5.2.3. 在节点上设计
在节点上,OpenShift SDN 首先在上述 registry 中注册带有 SDN master 的本地主机,以便主节点将子网分配给节点。
接下来,OpenShift SDN 会创建和配置三个网络设备:
-
br0
:将 pod 容器附加到的 OVS 网桥设备。OpenShift SDN 还在这个网桥上配置一组特定于非子网的流规则。 -
Tun0
:OVS 内部端口(br0
上的端口 2)。这会分配集群子网网关地址,用于外部网络访问。OpenShift SDN 配置 netfilter 和路由规则,以启用通过 NAT 从集群子网到外部网络的访问。 -
vxlan_sys_4789
:OVS VXLAN 设备(br0
上的端口 1),提供对远程节点上容器的访问。在 OVS 规则中称为vxlan0
。
每次在主机上启动 pod 时,OpenShift SDN:
- 从节点的集群子网分配 pod 的一个可用 IP 地址。
-
将 pod 的 veth 接口对的主机一侧连接到 OVS 网桥
br0
。 - 为 OVS 数据库添加 OpenFlow 规则,将寻址到新 pod 的流量路由到正确的 OVS 端口。
- 对于 ovs-multitenant 插件,添加 OpenFlow 规则来标记来自带有 pod 的 VNID 的 pod 的流量,并允许流量与 pod 的 VNID 匹配(或是特权 VNID 0)。非匹配流量通过通用规则过滤。
OpenShift SDN 节点也从 SDN 主控机监控子网更新。当添加新子网时,节点在 br0
上添加 OpenFlow 规则,以便远程子网中具有目的地 IP 地址的数据包进入 vxlan0
( br0
上的端口 1),然后传输到网络上。ovs-subnet 插件通过 VNID 0 在 VXLAN 间发送所有数据包,但是 ovs-multitenant 插件将适当的 VNID 用于源容器。