
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.4 通信原理
集群网络搭建的四个阶段,为Pod创建了网络通信干道。基于这个网络干道,Pod可以完成图3-7所示的四种通信,分别是本地通信、同节点Pod通信、跨节点Pod通信,以及Pod和Pod之外网络实体的通信。

图3-6 容器部署阶段网络架构

图3-7 集群通信原理架构
本地通信说的是Pod内部不同容器之间的通信。因为Pod内网容器共享同一个网络协议栈,所以它们之间的通信可以通过Loopback设备完成。
同节点Pod之间的通信,是Cni0虚拟网桥内部的通信,相当于一个二层局域网内部设备通信。
跨节点Pod通信略微复杂一点,但也很直观,发送端数据包通过Cni0网桥的网关流转到节点上,然后经过节点eth0发送给VPC路由。这不会经过任何封包操作。当VPC路由收到数据包时,它通过查询路由表,确认数据包目的地,并把数据包发送给对应的ECS节点。而进入节点之后,因为Flanneld在节点上创建了Cni0的路由,所以数据包会被发送到目的地的Cni0局域网,再到目的地Pod。
最后一种情况,Pod与非Pod网络的实体通信,需要经过节点上的iptables规则做源地址转换,而此规则就是Flanneld依据命令行--ip-masq选项做的配置。