Openshift 网络v3.11

Openshift 网络理解

  • 三种插件类型
  • Masters设计
  • Nodes设计
  • Pod网络数据流向

OKD使用SDN(软件定义网络)提供集群网络,实现集群POD之间的通信。Openshift SDN使用Open vSwitch(OVS)配置覆盖网络。

三种插件类型

ovs-subnet:默认插件,提供一个‘平面’网络,所有POD和POD与Service都可以相互通信。

ovs-multitenant:多租户插件,提供了不同项目POD与Service隔离,每个项目都有一个唯一的VNID(虚拟网络ID),通过VNID标识分配给POD的流量,不同VNID之间的POD无法通信。
其中VNID 0是个特例,它可以与集群所有POD相互通信,即允许任何流量进入和流出。在OKD中,default项目是VNID 0,特殊服务如router、docker-registry均在该项目内,以便提供全局访问。

ovs-networkpolicy:允许集群管理员自定义网络策略。
参考:https://docs.okd.io/latest/admin_guide/managing_networking.html#admin-guide-networking-networkpolicy

Masters设计

在OKD Masters上,OpenShift SDN维护一个存储在etcd中的节点注册表。当注册新节点时,OpenShift SDN会从群集网络中分配未使用的子网,并将此子网存储在注册表中。删除节点后,OpenShift SDN会从注册表中删除子网,并认为可以再次分配子网。

使用ovs-multitenant插件时,OpenShift SDN主机还会监视项目的创建和删除,并为它们分配VXLAN VNID,这些VNLAN稍后将被节点用于正确隔离流量。

Nodes设计

在Node上,OpenShift SDN首先在Master注册表中将本地主机与SDN主机注册,为该Node分配子网。
接下来,OpenShift SDN创建并配置三个网络设备:

br0:pod容器将连接到的OVS桥接设备。
tun0:OVS内部端口(端口2打开br0)。分配集群子网网关地址,并用于外部网络访问。OpenShift SDN配置netfilter和路由规则,以允许通过NAT从集群子网访问外部网络。
vxlan_sys_4789:OVS VXLAN设备(端口1打开br0),提供对远程节点上的容器的访问。

每次在主机上启动pod时,OpenShift SDN:
1.从Node的集群子网中为pod分配一个空闲IP地址。
2.将pod的veth pair的主机端连接到OVS桥接设备br0。
3.将OpenFlow规则添加到OVS数据库,以将发往新pod的流量路由到正确的OVS端口。
4.在ovs-multitenant插件的情况下,添加OpenFlow规则来标记具有VNID的pod的流量,并且如果流量的VNID与pod的VNID匹配(或者是特权VNID 0),则允许流量进入pod。(默认会过滤掉不匹配的流量)

OpenShift SDN Node还会监视SDN Master的子网更新。添加新子网时,Node在br0添加OpenFlow规则,以便远程子网中具有目标IP地址的数据包转到vxlan0(端口1打开br0),从而进入网络。ovs-subnet插件通过VXLAN发送VNID 0的所有数据包,但ovs-multitenant插件使用适当的VNID作为源容器。

Pod网络数据流向

假设您有两个容器A和B,其中容器A的eth0的veth pair名称为vethA,容器B的eth0的veth pair名称为vethB。
1.现在假设容器A在本地主机上,容器B也在本地主机上。然后从容器A到容器B的数据包流如下:
eth0(在A的网络中)→ vethA → br0 → vethB → eth0(在B的网络中)

2.假设容器A位于本地主机上,而容器B位于集群网络上的远程主机上。然后从容器A到容器B的数据包流如下:
eth0(在A的网络中)→ vethA → br0 → vxlan0 → (此后为B设备) → vxlan0 → br0 → vethB → eth0(在B的网络中)

3.如果容器A连接到外部主机,则流量如下所示:
eth0(在A的网络中)→ vethA → br0 → tun0 →(NAT)→ eth0(物理设备)→Internet

几乎所有数据包传送决策都是使用OVS网桥br0中的OpenFlow规则执行的,这简化了插件网络架构并提供了灵活的路由。对于ovs-multitenant插件,这也提供了可执行的网络隔离。

参考文档:
https://docs.okd.io/latest/architecture/networking/sdn.html#architecture-additional-concepts-sdn

你可能感兴趣的:(Openshift)