Kubernete网络模型
- 每一个pod都有唯一的一个IP
- kubernetes节点上pod内都运行一个pause容器,此容器保留和保存由Pod中的所有容器共享的网络名称空间(netns),即使容器挂了,再重新创建一个新容器,PodIP也不会变
- 节点内通信
- 每个节点上都有一个Root Netns名称空间,主网络接口eth0位于此Netns中,每个pod都有自己的网络,并且有一个虚拟以太网对将其连接到root netns。这基本上是一个网络对,一端在root netns网中,另一端在容器netns中.
对节点上的所有Pod完成此操作。为了使这些Pod相互通信,使用了Linux以太网桥cbr0。Docker使用了一个类似的桥接器docker0,可以使用brctl show命令列出网桥。
- pod1到pod2通信过程(如下图):
- 在离开pod1网的eth0并在进入根网veth-xxx。
- 将其传递给cbr0,后者使用ARP请求发现目的地,并说“谁拥有该IP?”
- veth-yyy说具有该IP,因此网桥知道将数据包转发到何处。
- 数据包到达vethyyy,越过pipe-pair到达其pod2网络。
节点间通信
假设pod1与pod4通信,如下图: