1. CNI 概述:容器网络接口的定义、设计目标与核心价值

1.1 什么是 CNI?

CNI(Container Network Interface,容器网络接口) 是由 CoreOS 发起、现由 CNCF 托管的容器网络标准规范。它定义了一组接口契约,让容器运行时(如 containerd、CRI-O)能够通过统一的插件机制为容器分配网络资源,而无需关心底层网络实现细节。

CNI 的核心思想是 “插件化”:网络功能由独立的二进制插件提供,容器运行时仅负责调用插件,插件负责创建/删除网络接口、分配 IP 地址、配置路由规则等。

关键定义: CNI 不是网络实现,而是网络实现的调用标准。它规定了“容器运行时 → 网络插件”之间的交互协议。

1.2 设计目标

CNI 的设计遵循以下五个核心目标,确保其在多云、多运行时环境下的通用性与可扩展性:

目标 说明 设计体现
简单性 接口定义极简,仅包含 ADD/DEL/CHECK 三个操作 插件为独立二进制,无守护进程依赖
可移植性 不绑定任何特定容器运行时或编排系统 通过 JSON 配置和 stdin/stdout 通信
可组合性 支持链式调用多个插件完成复杂网络策略 插件链(Plugin Chaining)机制
最小权限 插件只负责网络连接,不管理 IPAM 之外的资源 IPAM 作为独立插件分离
版本兼容 规范版本化,保证不同版本插件与运行时的互操作性 CNI_VERSION 字段协商

1.3 在 Kubernetes 中的角色

Kubernetes 本身不实现容器网络,而是通过 kubelet 调用 CNI 插件来完成 Pod 网络生命周期管理。其角色可概括为以下三个层面:

  • 网络就绪保障: 在 Pod 创建时,kubelet 调用 CNI 插件为 Pod 创建网络命名空间、配置 veth pair、分配 IP 并设置路由。
  • IP 地址管理: 通过 IPAM 插件(如 host-local、dhcp)为 Pod 分配集群内唯一 IP,确保 Pod 间可直接通信。
  • 网络策略执行: 部分 CNI 插件(如 Calico、Cilium)同时实现 Kubernetes NetworkPolicy,提供微隔离能力。
实践要点: Kubernetes 集群中,CNI 插件必须在集群初始化时安装,且一旦选定,后续更换需要重建所有节点。常见的生产级 CNI 插件包括 Calico(策略丰富)、Flannel(简单覆盖网络)、Cilium(eBPF 加速)、Weave Net(多跳路由)。

1.4 核心价值

CNI 为容器生态带来的核心价值体现在以下四个维度:

  1. 解耦运行时与网络: 容器运行时无需内置网络逻辑,网络实现可独立演进和替换。
  2. 标准化生态: 所有 CNI 插件遵循同一接口,用户可自由选择最适合业务场景的网络方案。
  3. 性能可优化: 插件可针对特定硬件(如 DPDK、RDMA)或内核特性(如 eBPF、XDP)进行深度优化,而不影响上层编排。
  4. 故障隔离: 插件以独立进程运行,单个插件的崩溃不会影响容器运行时或其他插件。

1.5 CNI 插件调用流程(SVG 架构图)

下图展示了 Kubernetes 中 kubelet 通过 CNI 接口调用插件链为 Pod 配置网络的完整流程:

CNI 插件调用流程架构图 CNI 插件调用流程(Kubernetes 环境) kubelet CRI 运行时 CNI 配置目录 CNI 插件链 (calico + portmap + bandwidth) IPAM 插件 Pod 网络命名空间 宿主机网络栈 Pod 创建事件 读取配置 解析插件列表 请求 IP 返回 IP/网关 创建 veth/配置路由 veth pair 连接 说明: 1. kubelet 通过 CRI 创建 Pod 沙箱,CRI 运行时根据 CNI 配置目录中的 .conf 文件确定插件链。 2. 插件链按顺序执行:先调用 IPAM 分配 IP,再由主插件创建网络接口并配置路由。

1.6 CNI 与容器网络方案对比

下表对比了主流 CNI 插件在关键维度上的差异,帮助理解不同场景下的选型依据:

插件 网络模型 数据面 NetworkPolicy 性能特征 适用场景
Flannel Overlay(VXLAN/Host-GW) 内核隧道 不支持 中等,封装开销约 5-10% 小规模、快速部署
Calico 纯路由(BGP)或 Overlay(IPIP) iptables / eBPF 支持(丰富) 高,无封装时接近原生 生产级、大规模、需策略
Cilium Overlay(VXLAN)或原生路由 eBPF 支持(L3-L7) 极高,eBPF 绕过 iptables 高性能、可观测性、安全
Weave Net Overlay(VXLAN + 快速路径) 用户态封装 支持(基础) 中等,多跳场景有延迟 多云、混合部署
选型提醒: CNI 插件的选择直接影响集群的网络延迟、吞吐量、故障恢复速度以及运维复杂度。建议在测试环境中使用真实业务流量进行基准测试,重点关注 P99 延迟和每秒新建连接数(CPS)两个指标。

1.7 本章小结