Kubernetes 网络主要涉及两个方面:一个是各个服务的网络间负载均衡,另一个是网络间的通讯。
- Pod 内部容器共享一个网络命名空间,使用 loopback 通信
- Pod 使用 pause 容器启动网络命名空间,pause 的 NetworkMode 是 bridge,其它容器都共享 pause 容器的网络
- 每一个 Pod 都有唯一的 IP 地址。
- 同一 node 上的 Pod 都通过 Veth 连接到 docker0,可以直接用对方的 IP 地址通信,而不需要其它发现机制,例如 DNS、Consul、etcd。
- 不同 node 上的 Pod 也是通过 IP 地址通信,但是需要进行配置。每个 node 的 docker0 地址不能有冲突,通过找到对方 Pod 所在机器 IP,将数据包通过本机网卡发向对方 Pod 所在机器的网卡。数据包到达对方网卡之后,对方知道如何将数据通过 docker0 转发到 Pod。
- 每个主机的 docker0 都可以被路由到,因此在网络层可以把 node 看作一个路由器 (不同网络方案有所出入)