k8s ovn egressip

简介:

  集群管理员为命名空间分配一个或多个出口 IP 地址,或分配给命名空间中的特定 pod。

 出口 IP 地址功能可确保来自一个或多个命名空间中的一个或多个 pod 的流量具有集群网络之外的服务具有一致的源 IP 地址;

出口 IP 地址作为额外 IP 地址在节点的主网络接口中使用,且必须与节点的主 IP 地址位于同一个子网中。不能为集群中的任何其他节点分配额外的 IP 地址。

在一些集群配置中,应用程序 pod 和入口路由器 pod 在同一个节点上运行。如果在这种情况下为应用程序项目配置出口 IP,则在从应用程序项目向路由发送请求时不会使用 IP。

 

将出口 IP 分配给 pod

要将一个或多个出口 IP 分配给命名空间中的命名空间或特定 pod,必须满足以下条件:

  • 集群中至少有一个节点必须具有 k8s.ovn.org/egress-assignable: "" 标签。(不存在可以添加)
  • 存在一个 EgressIP 对象定义一个或多个出口 IP 地址,用作从命名空间中离开集群的流量的源 IP 地址。

将出口 IP 分配给节点

在创建 EgressIP 对象时,以下条件适用于标记为 k8s.ovn.org/egress-assignable: "" 标签的节点:

  • 每次不会将出口 IP 地址分配给多个节点。
  • 出口 IP 地址可在可以托管出口 IP 地址的可用节点之间平衡。
  • 如果 EgressIP 对象中的 spec.EgressIPs 数组指定了多个 IP 地址,则不会有超过一个指定地址的节点托管。
  • 如果节点不可用,则会自动重新分配给它的所有出口 IP 地址,但符合前面描述的条件。

当 Pod 与多个 EgressIP 对象的选择器匹配时,无法保证在 EgressIP 对象中指定的出口 IP 地址被分配为 pod 的出口 IP 地址。

另外,如果 EgressIP 对象指定了多个出口 IP 地址,则无法保证可以使用哪些出口 IP 地址。例如,如果 pod 与具有两个出口 IP 地址 10.10.20.1 和 10.10.20.2 的 EgressIP 对象的选择器匹配,则可能用于每个 TCP 连接或 UDP 对话。

EgressIP 对象

以下 EgressIP 对象描述了一个配置,该配置选择将 env 标签设置为 prod 的任意命名空间中的所有 pod。所选 pod 的出口 IP 地址为 192.168.126.10 和 192.168.126.102

对象信息:

root@master:~# kubectl describe egressip
Name:         egressip-test
Namespace:
Labels:       <none>
Annotations:  <none>
API Version:  k8s.ovn.org/v1
Kind:         EgressIP
Metadata:
  Creation Timestamp:  2023-03-08T05:40:26Z
  Generation:          14
Spec:
  Egress I Ps:
    192.168.108.29
    192.168.108.30
  Namespace Selector:
    Match Labels:
      Ns - Egressip:  ns-egressip
  Pod Selector:
Status:
  Items:
    Egress IP:  192.168.108.29
    Node:       node2
    Egress IP:  192.168.108.30
    Node:       node1
Events:         <none>

 查看系统已经分配的egressip,(这里未显示完全)

root@master:~# kubectl get egressip
NAME            EGRESSIPS        ASSIGNED NODE   ASSIGNED EGRESSIPS
egressip-test   192.168.108.29   node2           192.168.108.29

POD 与外部主机进行通讯,抓包查看信息:

root@master:~# kubectl get pod -n egressip -o wide
NAME                           READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
pod-busybox-65fdc868df-4wm6z   1/1     Running   0          75m   10.244.1.15   node2   <none>           <none>
pod-busybox-65fdc868df-j7h45   1/1     Running   0          76m   10.244.2.10   node1   <none>           <none>
pod-busybox-egressip           1/1     Running   0          15m   10.244.2.12   node1   <none>           <none>
root@master:~# kubectl exec -n egressip pod-busybox-65fdc868df-4wm6z -- ping 192.168.108.26 -c 2
PING 192.168.108.26 (192.168.108.26): 56 data bytes
64 bytes from 192.168.108.26: seq=0 ttl=126 time=8.152 ms
64 bytes from 192.168.108.26: seq=1 ttl=126 time=8.083 ms

--- 192.168.108.26 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 8.083/8.117/8.152 ms

抓包信息内容:

 

 

posted @ 2023-03-08 15:16  橘子飞飞  阅读(239)  评论(0编辑  收藏  举报