容器间的通信

同一个 POD 容器(container)共享同一个网络命名空间,他们之间可以用localhost+容器端口号进行访问。
基于这种特性,Istio 的 Sidecar 就是通过此基础实现的劫持 POD 的出入流量。

同一 Node 中 POD 间的通信

同一 NodePOD 默认的路由地址都是虚拟网卡docker0的网络地址,他们共同关联在同一个网桥上,网段相同(如:192.168.0.1/24),所以他们之间是可以直接通信的。

不同 Node 中 POD 间的通信

不同 Node 中的 POD 之间通讯需要满足两个条件:POD 的 IP 地址不能冲突;将 POD 的 IP 和宿主机的 Node IP 关联起来,通过这个关联性实现互相访问。具体实现是可以在容器的环境变量中定义 service ip 或者service name 来实现。
但由于不能提前知道 service ip,所以在 Kubernetes 中使用 kube-dns 做服务发现,他的作用就是监听 service 变化并更新 DNS ,即 POD 通过服务名称可以查询 DNS。