pod 网络

Kubernetes 对容器技术做了更多的抽象,其中最重要的一点是提出 pod 的概念,pod 是 Kubernetes 资源调度的基本单元,我们可以简单地认为 pod 是容器的一种延伸扩展,从网络的角度来看,pod 必须满足以下条件:
pod-network

pod互相通信

同一主机

同一主机上的 pod 之间,通过 docker0 网桥设备直接二层(数据链路层)网络上通过 MAC 地址直接通信
pod-network-1

不同主机

  • 修改底层网络设备配置,加入容器网络 IP 地址的管理,修改路由器网关等,该方式主要和 SDN(Software define networking) 结合。
  • 完全不修改底层网络设备配置,复用原有的 underlay 网络平面,解决容器跨主机通信,主要有如下两种方式:
    • 隧道传输(overlay):将容器的数据包封装到原主机网络的三层或者四层数据包中,然后使用主机网络的 IP 或者 TCP/UDP 传输到目标主机,目标主机拆包后再转发给目标容器。overlay 隧道传输常见方案包括 Vxlan、ipip 等,目前使用 overlay 隧道传输技术的主流容器网络有 Flannel 等; pod-network-2
    • 修改主机路由:把容器网络加到主机路由表中,把主机网络设备当作容器网关,通过路由规则转发到指定的主机,实现容器的三层互通。目前通过路由技术实现容器跨主机通信的网络如 Flannel host-gw、Calico 等; pod-network-3

通信方案

  • Flannel 是目前使用最为普遍的方案,提供了多种网络后端,它支持多种数据路径,也适合于 overlay/underlay 等多种场景。对于 overlay 的数据包封装,可以使用用户态的 UDP,内核态的 Vxlan(性能相对较好),甚至在集群规模不大,且处于同一个二层域时可以采用 host-gw 的方式修改主机路由表;
  • Weave 工作模式与 Flannel 很相似的,它最早只提供了 UDP(称为 sleeve 模式)的网络方式,后来又加上了 fastpass 方式(基于 VxLAN),不过 Weave 消除了 Flannel 中用来存储网络地址的额外组件,自己集成了高可用的数据存储功能;
  • Calico 主要是采用了修改主机路由,节点之间采用 BGP 的协议去进行路由的同步,但是现实中的网络并不总是支持 BGP 路由的,因此 Calico 也支持内核中的 IPIP 模式,使用 overlay 的方式来传输数据;
Last Updated:
Contributors: jobcher