边缘Pod网络
背景说明
在边缘场景中,为了确保云边网络断开时节点上的业务仍能稳定运行,OpenYurt提供了边缘节点自治功能。该功能能够实现云边断网情况下,业务Pod的异常自动重启、节点重启自动拉起业务Pod等功能。然而,为了保证云边断网后业务Pod和节点的重启不影响边边的容器网络,这里有一些网络情况需要适配。
Flannel: VTEP MAC地址保持
场景
如果我们使用flannel作为CNI插件,且后端为VXLAN模式。在节点上会创建一个VTEP设备(通常命名为": flannel.1),同时VNI和VTEP的信息会被记录到节点的annotations中,供其它节点创建相应的路由和转发规则。
Flannel的架构如图所示,我们用两个边缘节点来举例说明:
- node2创建flannel.1设备,MAC地址为"9e:c9:07:f9:b3:8b",IP地址为"172.30.133.0",那么node2的annotations中有如下记录。
# node2 annotations with vtep info.
flannel.alpha.coreos.com/backend-data: '{"VtepMAC":"9e:c9:07:f9:b3:8b"}'
flannel.alpha.coreos.com/public-ip: 10.0.0.20
- node1 将使用node2的这些信息,在主机上配置fdb、arp以及路由信息
# node1 host network namespace.
fdb: 9e:c9:07:f9:b3:8b dev flannel.1 dst 10.0.0.20 self permanent
arp: ? (172.30.133.0) at 9e:c9:07:f9:b3:8b [ether] PERM on flannel.1
route: 172.30.133.0/26 via 172.30.133.0 dev flannel.1 onlink
每当node2重启之后,flannel会重新创建VTEP设备,VTEP的MAC地址也发生变化,并更新到node2的annotations中。然而,如果此时node2或者node1与云端的网络断开,node1将不能感知到node2的MAC地址的变化,这将导致node1与node2上的Pod无法正常通信。