本文介绍了 Kubernetes 网络的各种场景,包括容器之间、Pod 之间、Pod 到
Service、外部到内部的这 4 种场景下,不同的通信模式。在设计 Kubernetes 容器平台的
时候,建议按照这些通信模式,根据具体的场景,逐一比对选择合适的解决方案。其中,特
别需要注意的是外部到内部的访问。如果您想更系统学习容器云平台网络架构设计及优化,
了解容器网络基础概念、学习架构设计和优化实践,可以关注文章后所附介绍。
在实际的业务场景中,业务组件之间的关系十分复杂,特别是微服务概念的提出,应用部署
的粒度更加细小和灵活。为了支持业务应用组件的通信联系,Kubernetes 网络的设计主要
致力于解决以下场景:
(1)紧密耦合的容器到容器之间的直接通信;
(2)抽象的 Pod 到 Pod 之间的通信;
(3)Pod 到 Service 之间的通信;
在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命名空间,共
享同一个 Linux 协议栈。所以对于网络的各类操作,就和它们在同一台机器上一样,它们甚
至可以用 localhost 地址访问彼此的端口。这么做的结果是简单、安全和高效,也能减少将
已经存在的程序从物理机或者虚拟机移植到容器的难度。
如下图中的阴影部分就是 Node 上运行着的一个 Pod 实例。容器 1 和容器 2 共享了一个网
络的命名空间,共享一个命名空间的结果就是它们好像在一台机器上运行似的,它们打开的
端口不会有冲突,可以直接用 Linux 的本地 IPC 进行通信。它们之间互相访问只需要使用
localhost 就可以。