异常环境
移动云环境,自建K8S,所有主机处于同一网段,CNI插件是用Calico,BGP模式。
CNI插件主要分为三种类型:Overlay、路由及 Underlay。
- overlay 模式是基于隧道技术实现的,典型特征是容器拥有独立于主机的IP段。容器之间跨主机通信时将整个容器网络封装到底层网络中,然后到达目标机器后再解封装传递到目标容器。不依赖与底层网络的实现。实现的插件有flannel(UDP、vxlan)、calico(IPIP)等等。
- 三层路由模式中容器和主机也属于不同的网段,容器互通主要通过路由表打通,无需在主机之间建立隧道封包。但路由打通就需要部分依赖于底层网络,比如说要求底层网络有二层可达的一个能力。实现的插件有flannel(host-gw)、calico(BGP)等等。
- underlay网络是底层网络,负责互联互通。容器网络和主机网络处于同一层网络,拥有相同的地位。整个网络三层互通,没有大二层的限制,但是需要强依赖底层网络的实现支持.实现的插件有calico(BGP)等等。
异常现象
某些节点的容器无法与K8S其他node通信,表现为该节点的容器无法访问其他节点及节点上的容器和服务,其他节点和节点上容器也无法访问该节点上的容器,节点间通信正常,仿佛该节点的容器被隔离了一样。
通过在容器内及节点上抓包可以看到,数据包在节点与节点网卡之间丢失,如图:
异常原因
异常节点的网卡开启了“源目的地址检查”。该选项移动云默认开启,但无相关介绍。我们从华为云的文档中找到了一些介绍:默认情况下,“源/目的检查”状态为“ON”,系统会检查裸金属服务器发送的报文中源IP地址是否正确,否则不允许裸金属服务器发送该报文。这有助于防止伪装报文攻击,提升安全性。当裸金属服务器作为NAT服务器、路由器或防火墙时,此开关应该设置为“OFF”。在移动云中,绑定HAVIP的主机网卡需要开启该功能,才能绑定。
解决办法
关闭异常节点的网卡“源目的地址检查”。