一、容器与容器之间的通信
同一个pod中的容器,共用同一个网络命名空间,直接使用localhost或127.0.0.1加上端口访问就好了。可以看到这两个容器的ip地址,路由表,以及暴露的端口号等都是一样的,因为他们使用的是同一个网络命名空间,同一个网络栈。
【注意】:他们只是共用网络命名空间(network namespace),但是进程命名空间(PID namespace)、用户命名空间(user namespace)等其他的命名空间是相互隔离的。
二、POD与POD之间的通信
1、同一个Node上的pod之间的通信
每个pod都有唯一一个ip(属于docker0网桥上的网段),每个pod的网络基础设施容器都是通过veth设备对直接连在docker0网桥上的:
本机docker0网桥的地址的数据包都会通过容器内的eth0(veth设备)直接转给Kernel,路由的范围是link(与本设备直接连接),因为veth设备都是成对存在的,另一端连在docker0网桥上,所以会由Kernel直接转发给docker0网桥上的另一个veth设备。
宿主机将数据包通过docker0发给Kernel,最终docker0网桥会将数据包转发给目的pod。
2、不同Node上的pod之间的通信
要支持不同Node节点上的pod通信需要满足的要求:
1)整个kubernetes集群中对每个POD分配一个唯一的IP&