在这篇文章中,我将使用Flannel作为网络提供者,并使用Containered作为容器运行时。

同一主机上的容器

在同一主机上运行的容器可以通过其IP地址相互通信的方法之一是通过linux bridge。在kubernetes(和docker)世界中,创建了veth(虚拟以太网)设备来实现此目的。此veth设备的一端插入容器网络名称空间,另一端连接到主机网络上的linux bridge。同一主机上的所有容器都将veth对的一端连接到linux网桥,并且它们可以通过网桥使用其IP地址相互通信。 linux网桥也被分配了一个IP地址,它充当从目的地到不同节点的Pod流出流量的网关。
image.png

不同主机上的容器

在不同主机上运行的容器可以通过其IP地址相互通信的方式之一是使用数据包封装。 Flannel通过vxlan支持此功能,vxlan将原始数据包包装在UDP数据包中并将其发送到目标。

在kubernetes集群中,Flannel在每个节点上创建一个vxlan设备和一些路由表条目。每个发往不同主机上的容器的数据包都会通过vxlan设备,并封装在UDP数据包中。在目标位置,检索封装的数据包,然后将数据包路由到目的地的pod。

image.png

注意:这只是可以配置容器之间的网络的方法之一。