2. CNI 插件架构基础

CNI(Container Network Interface)是 Kubernetes 网络插件的核心规范,它定义了容器运行时与网络插件之间的标准接口。理解 CNI 规范、插件生命周期以及主流插件的架构差异,是进行网络性能调优的前提。

2.1 CNI 规范与核心概念

CNI 规范由 Container Network Interface 项目定义,其核心思想是“插件化”。Kubelet 或容器运行时(如 containerd)通过调用 CNI 插件二进制文件,完成网络接口的创建、删除和检查。

核心原则: CNI 插件不负责 IPAM(IP 地址管理)之外的网络策略、服务发现或 Overlay 封装,这些由插件自身或上层组件实现。这种“最小接口”设计保证了插件的可替换性。

CNI 规范定义了以下关键概念:

  • CNI 插件: 一个可执行二进制文件,通常位于 /opt/cni/bin/。
  • CNI 配置: 一个 JSON 文件,位于 /etc/cni/net.d/,指定要使用的插件链和参数。
  • 容器运行时: 通过环境变量(如 CNI_COMMAND、CNI_CONTAINERID)和 stdin 传递配置给插件。
  • 网络命名空间: 每个 Pod 拥有独立的网络命名空间,CNI 插件负责将 veth 对的一端放入其中。

2.2 插件生命周期:ADD / DEL / CHECK

CNI 规范定义了三种标准操作,构成了插件的完整生命周期:

操作 触发时机 核心行为 性能关注点
ADD Pod 创建时 创建 veth 对、分配 IP、配置路由、设置 MAC 地址 延迟敏感,影响 Pod 启动速度
DEL Pod 删除时 清理 veth 对、释放 IP、删除路由规则 资源释放效率,避免 IP 泄漏
CHECK 周期性健康检查 验证容器网络配置是否与预期一致 执行频率与开销平衡
调优提示: 在 Pod 密度高的集群中,ADD 操作的延迟会直接影响调度吞吐量。建议监控 cni_add_duration_seconds 指标,若 P99 超过 500ms,需排查 IPAM 分配或路由配置瓶颈。

以下 SVG 展示了 CNI 插件在 Pod 创建时的完整调用流程:

CNI 插件 ADD 操作调用流程 Kubelet 容器运行时 CNI 插件 IPAM 插件 veth 对创建 路由配置 关键性能路径 IPAM 分配延迟 → veth 对创建开销 → 路由表写入时间 三者串行执行,任一环节慢都会阻塞 Pod 启动

2.3 常见 CNI 插件架构对比

当前社区主流的 CNI 插件包括 Calico、Flannel、Weave 和 Cilium。它们在数据平面、控制平面和功能特性上存在显著差异,直接影响网络带宽和连接容量。

特性 Calico Flannel Weave Cilium
数据平面 eBPF / iptables VXLAN / host-gw VXLAN / fastdp eBPF (XDP / TC)
封装开销 无 (BGP) 或 IPIP VXLAN (50B) VXLAN (50B) / 无 无 (原生路由)
网络策略 原生支持 需额外组件 原生支持 原生支持 (L3-L7)
IPAM 模式 host-local / IP池 host-local weave IPAM host-local / CRD
最大 Pod 密度 高 (BGP 直连) 中 (VXLAN 隧道) 中 (VXLAN 隧道) 高 (eBPF 高效)
带宽性能 接近线速 (BGP) 约 85-90% 线速 约 80-85% 线速 接近线速 (eBPF)
性能陷阱: Flannel 的 VXLAN 模式在 MTU 1500 的网络上,有效载荷仅 1450 字节,导致 3.3% 的带宽损失。对于大流量应用(如日志、数据备份),这种开销会显著放大。Calico 的 BGP 模式或 Cilium 的原生路由模式可避免此问题。

以下 SVG 对比了四种插件的核心数据平面架构:

主流 CNI 插件数据平面架构对比 Calico BGP 路由 无封装 eBPF 加速 Felix 策略引擎 带宽: 接近线速 Flannel VXLAN 隧道 host-gw 模式 无策略引擎 简单稳定 带宽: 85-90% Weave VXLAN / fastdp 内置 DNS 加密选项 多跳路由 带宽: 80-85% Cilium eBPF 原生 XDP 加速 L3-L7 策略 Hubble 可观测 带宽: 接近线速 架构差异对性能的影响 • 封装开销:VXLAN 增加 50 字节头部,降低有效带宽并增加 CPU 负载 • 路由模式:BGP 原生路由 vs 隧道封装,直接影响 PPS(包每秒)上限 • 策略执行:iptables 规则链 vs eBPF 内核态处理,延迟差异可达 10 倍 • 连接跟踪:Cilium 的 eBPF map 比 conntrack 表更高效,支持更大并发连接 选择建议:追求极致性能选 Cilium 或 Calico+BGP;追求简单稳定选 Flannel

2.4 插件选择对带宽与容量的影响

从性能调优角度看,CNI 插件的选择直接决定了集群的带宽天花板和连接容量上限:

  • 带宽瓶颈: 隧道封装(VXLAN)会占用 CPU 资源进行封包/解包,在 10Gbps 以上网络中,CPU 可能成为瓶颈。Calico 的 BGP 模式和 Cilium 的 eBPF 原生路由可避免此问题。
  • 连接容量: iptables 规则链在规则数量超过 1000 条时,延迟会显著增加。Cilium 使用 eBPF map 替代 iptables,可支持 10 万+ 并发连接而性能不衰减。
  • MTU 规划: 使用 VXLAN 时,需将底层网络 MTU 设置为 1500 + 50 = 1550,或在 CNI 配置中设置 mtu: 1450,避免分片导致性能下降。
调优基线: 对于延迟敏感型应用(如金融交易、实时通信),优先选择 Cilium 或 Calico(eBPF 模式)。对于吞吐密集型应用(如大数据、视频处理),Calico BGP 模式可提供接近线速的性能。Flannel 适合开发测试环境或对性能要求不高的生产集群。