每个Pod都拥有一个独 立的IP地址,并假定所有Pod都在一个可以直接连通的、扁平的网络空 间中。所以不管是否运行在同一个Node(宿主机)中,都要求它们 可以直接通过对方的IP进行访问。设计这个原则的原因是,用户不需要 额外考虑如何建立Pod之间的连接,也不需要考虑如何将容器端口映射 到主机端口等问题。
IP是以Pod为单位进行分配的。一个 Pod内部的所有容器共享一个网络堆栈(相当于一个网络命名空间,它 们的IP地址、网络设备、配置等都是共享的)。按照这个网络原则抽象 出来的为每个Pod都设置一个IP地址的模型也被称作IP-per-Pod模型。
同一个Pod内的容器可以通过localhost连接对方 的端口。
Kubernetes的网络实现
Kubernetes网络的设计主要致力于解决以下问 题。
(1)容器到容器之间的直接通信。
(2)抽象的Pod到Pod之间的通信。
(3)Pod到Service之间的通信。
(4)集群内部与外部组件之间的通信。
容器到容器的通信
共享同一个网络命名空间,共享同一个Linux协议栈。所以对于网络的各类操作, 就和它们在同一台机器上一样,它们甚至可以用localhost地址访问彼此的端口。