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的流量都必须经过这对虚拟网卡。
2.3 CNI插件架构:标准化网络配置接口
CNI(Container Network Interface)是Kubernetes与网络实现之间的标准化协议。它定义了一组接口,用于配置和清理容器网络。Kubelet在创建Pod时,会调用CNI插件来完成网络配置。
CNI插件的核心工作流程如下:
- ADD操作:Kubelet调用CNI插件,传入Pod的命名空间、容器ID和网络配置。
- 创建veth pair:插件在宿主机和Pod命名空间之间创建一对veth网卡。
- 分配IP地址:插件从IPAM(IP Address Management)模块获取一个可用IP,并配置到Pod的veth端。
- 路由配置:插件在宿主机和Pod内添加必要的路由规则。
- 连接网络:将宿主机端的veth连接到网桥、overlay隧道或路由设备。
- DEL操作:Pod删除时,插件清理网络资源。
性能关键点: CNI插件的执行效率直接影响Pod启动速度。在镜像拉取场景中,如果CNI插件执行缓慢(例如IPAM分配延迟、overlay隧道建立耗时),会显著增加Pod从创建到Ready的时间。
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插件在封装开销和延迟上差异显著,需根据场景权衡。