2. Kubernetes 网络基础:Pod网络模型、CNI插件架构、网络命名空间与veth pair原理

在深入分析镜像拉取的网络瓶颈之前,必须先理解Kubernetes的网络基石。Pod是Kubernetes最小的调度单元,其网络模型的设计直接决定了容器间通信的方式,而CNI(Container Network Interface)则是实现这一模型的标准化接口。本章将拆解这三个核心概念,并揭示它们如何通过Linux内核的命名空间与veth pair技术协同工作。

2.1 Pod网络模型:IP-per-Pod与扁平网络

Kubernetes网络模型的核心原则是“每个Pod拥有一个独立的IP地址”,且集群内所有Pod可以直接通过该IP通信,无需NAT转换。这一模型被称为“IP-per-Pod”或“扁平网络”。

关键原则:
  • 所有Pod可以不经过NAT直接通信(无论是否在同一节点)。
  • 所有节点可以与所有Pod直接通信(无需端口映射)。
  • Pod内部容器共享同一个网络命名空间,即共享IP和端口空间。

这种模型消除了传统Docker桥接模式中端口映射的复杂性,使得Pod的行为更接近虚拟机或物理机,极大简化了应用迁移和服务发现。

特性 传统Docker网络 Kubernetes Pod网络
IP分配粒度 每个容器一个IP 每个Pod一个IP
容器间通信 需通过link或端口映射 通过localhost直接通信
跨节点通信 需配置端口映射或overlay 原生IP路由或overlay
NAT开销 常见(端口映射) 无(直接路由)

2.2 网络命名空间与veth pair:Pod网络的底层实现

Pod网络模型的实现依赖于Linux内核的两项关键技术:网络命名空间(Network Namespace)和veth pair(虚拟以太网对)。

  • 网络命名空间:Linux内核提供的一种资源隔离机制。每个网络命名空间拥有独立的网络栈,包括自己的网卡、路由表、iptables规则和套接字。Pod内的所有容器共享同一个网络命名空间。
  • veth pair:一种成对出现的虚拟网卡,像一根双向管道。数据包从一端进入,会直接从另一端出来。通常一端放在Pod的网络命名空间内(称为eth0),另一端放在宿主机的根网络命名空间(通常连接到一个网桥或路由设备)。
理解关键: Pod内的容器看到的eth0,实际上是veth pair的一端。所有进出Pod的流量都必须经过这对虚拟网卡。
Pod网络命名空间与veth pair结构 宿主机根网络命名空间(Host Network Namespace) Pod 网络命名空间 容器A (nginx) 容器B (sidecar) 共享网络栈 IP: 10.1.2.3 路由表 iptables规则 veth pair veth0 veth1 cni0 网桥 eth0 (物理) 数据流:容器A → veth0 → veth1 → cni0网桥 → eth0 → 物理网络

2.3 CNI插件架构:标准化网络配置接口

CNI(Container Network Interface)是Kubernetes与网络实现之间的标准化协议。它定义了一组接口,用于配置和清理容器网络。Kubelet在创建Pod时,会调用CNI插件来完成网络配置。

CNI插件的核心工作流程如下:

  1. ADD操作:Kubelet调用CNI插件,传入Pod的命名空间、容器ID和网络配置。
  2. 创建veth pair:插件在宿主机和Pod命名空间之间创建一对veth网卡。
  3. 分配IP地址:插件从IPAM(IP Address Management)模块获取一个可用IP,并配置到Pod的veth端。
  4. 路由配置:插件在宿主机和Pod内添加必要的路由规则。
  5. 连接网络:将宿主机端的veth连接到网桥、overlay隧道或路由设备。
  6. DEL操作:Pod删除时,插件清理网络资源。
性能关键点: CNI插件的执行效率直接影响Pod启动速度。在镜像拉取场景中,如果CNI插件执行缓慢(例如IPAM分配延迟、overlay隧道建立耗时),会显著增加Pod从创建到Ready的时间。
CNI插件架构与调用流程 Kubelet Pod生命周期管理 CNI配置 CNI插件 (Calico/Flannel/Weave) IPAM模块 宿主机网络栈 Pod网络命名空间 1. ADD请求 2. 分配IP 3. 配置路由 4. 创建veth 5. 返回结果 /etc/cni/net.d/ 10-calico.conflist CNI插件是Kubernetes与底层网络实现的桥梁,其性能直接影响Pod启动速度 常见CNI插件:Calico(BGP/Overlay)、Flannel(VXLAN/Host-GW)、Weave(Fast Datapath)

2.4 常见CNI插件对比

不同的CNI插件在性能、复杂度和功能上各有侧重。选择适合的插件对镜像拉取场景的网络性能至关重要。

插件 数据平面 封装开销 延迟影响 适用场景
Calico BGP / VXLAN 低(BGP无封装) 低 大规模、高性能、网络策略严格
Flannel VXLAN / Host-GW 中(VXLAN有封装) 中 中小规模、简单部署
Weave Fast Datapath / Sleeve 中高 中高 多云、混合环境
Cilium eBPF 极低 极低 高性能、可观测性、安全
优化启示: 在镜像拉取场景中,如果CNI插件使用VXLAN等overlay技术,每个数据包都需要额外的封装和解封装操作,这会增加CPU开销和网络延迟。对于大规模镜像分发,建议优先考虑无封装或低封装开销的CNI方案(如Calico BGP或Cilium eBPF)。

2.5 本章小结

  • Pod网络模型:每个Pod拥有独立IP,容器间通过localhost通信,跨节点通信无需NAT。
  • 网络命名空间:提供网络栈隔离,Pod内所有容器共享同一个命名空间。
  • veth pair:连接Pod命名空间与宿主机命名空间的虚拟网卡对,是Pod流量的必经之路。
  • CNI插件:标准化接口,负责Pod网络的创建、配置和销毁,其性能直接影响Pod启动速度。
  • 插件选择:不同CNI插件在封装开销和延迟上差异显著,需根据场景权衡。