2. CNI基础回顾:CNI规范、常见CNI插件工作原理、Pod网络模型

2.1 CNI规范核心要点

容器网络接口(Container Network Interface, CNI)是 Kubernetes 与容器运行时之间的网络配置协议。其核心设计原则是“最小接口、最大灵活性”——仅定义容器创建/删除时的网络配置操作,不关心底层网络实现。

规范要素 说明
ADD 操作 容器运行时调用 CNI 插件为容器添加网络接口,返回 IP、路由、DNS 等信息
DEL 操作 容器销毁时清理网络资源,释放 IP 和接口
CHECK 操作 (可选)验证容器网络状态是否与预期一致
VERSION 操作 返回插件支持的 CNI 规范版本号
网络配置 JSON 格式,包含 name、type、ipam、dns 等字段
IPAM 模块 独立子插件,负责 IP 地址分配与管理(host-local、dhcp)
关键设计哲学: CNI 不绑定任何网络后端,插件只需实现 ADD/DEL 两个核心接口即可接入 Kubernetes 网络体系。这种“插件化”架构使得 Calico、Flannel、Cilium 等不同技术栈可以共存于同一集群。

2.2 常见CNI插件工作原理对比

2.2.1 Flannel — 覆盖网络(Overlay)

Flannel 是最早的 Kubernetes 网络方案之一,核心思路是在主机间建立 VXLAN 隧道,将 Pod IP 封装在宿主机网络之上传输。

  • 数据路径: Pod → veth pair → cni0 网桥 → flannel.1 VXLAN 设备 → 宿主机 eth0 → 对端宿主机 → 目标 Pod
  • IPAM: host-local,每个节点分配一个 /24 子网
  • 优点: 部署简单、零依赖、适合中小规模集群
  • 缺点: 隧道封装带来额外开销(约 5-10% 吞吐损失),不支持 NetworkPolicy

2.2.2 Calico — 纯三层路由(BGP)

Calico 采用无隧道、纯三层路由模型,每个节点作为 BGP 路由器,将 Pod 路由信息直接广播到网络基础设施中。

  • 数据路径: Pod → veth pair → caliX 接口 → 宿主机路由表 → 对端宿主机 → 目标 Pod
  • IPAM: 支持 host-local 或 Calico IPAM(更灵活的 IP 池管理)
  • 网络策略: 原生支持 Kubernetes NetworkPolicy,通过 iptables/ebpf 实现
  • 优点: 接近线速转发、原生 NetworkPolicy、支持大规模集群(1000+ 节点)
  • 缺点: 需要 BGP 基础设施支持,对网络设备有要求

2.2.3 Cilium — eBPF 驱动

Cilium 基于 Linux 内核 eBPF 技术,将网络、安全和可观测性下沉到内核层面,绕过传统 iptables 和隧道封装。

  • 数据路径: Pod → veth pair → eBPF 程序(TC/XDP)→ 宿主机 eth0 → 对端宿主机 → 目标 Pod
  • IPAM: 支持 CRD-backed IPAM、AWS ENI、Azure 等云原生 IPAM
  • 网络策略: L3/L4/L7 全栈策略,基于身份的安全组模型
  • 优点: 极低延迟、高吞吐、原生可观测性(Hubble)、支持 Service Mesh
  • 缺点: 内核版本要求高(≥5.10 推荐)、调试复杂度较高
选型建议: 若追求极致性能且内核版本满足条件,优先选择 Cilium;若已有 BGP 网络基础设施且需要 NetworkPolicy,Calico 是成熟选择;Flannel 适合快速搭建开发/测试环境。

2.3 Pod网络模型详解

Kubernetes Pod 网络模型遵循三个基本原则:

  1. 每个 Pod 拥有独立 IP 地址,容器间通过 localhost 通信
  2. Pod 之间可以直接通信,无需 NAT 转换
  3. Node 与 Pod 之间可以直接通信,无需端口映射

下图展示了 Pod 网络的核心组件与数据流:

Pod 网络模型核心组件与数据流 Node 1 (10.0.1.0/24) Pod A 容器1: 10.1.1.2 容器2: 10.1.1.2 (共享网络命名空间) veth cni0 网桥 10.1.1.1/24 eth0 路由 Node 2 (10.0.2.0/24) Pod B 容器: 10.2.2.3 (单一容器) veth cni0 网桥 10.2.2.1/24 eth0 VXLAN/BGP 跨节点通信 关键说明: • Pod 内所有容器共享同一个网络命名空间(IP、端口、路由) • 跨节点通信由 CNI 插件负责(Flannel 用 VXLAN,Calico 用 BGP,Cilium 用 eBPF)

2.4 CNI插件架构对比总结

维度 Flannel Calico Cilium
转发模型 VXLAN 覆盖网络 纯三层 BGP 路由 eBPF 直接转发
封装开销 高(50字节头部) 无 无
NetworkPolicy 不支持 原生支持(iptables) 原生支持(eBPF)
IPAM 模式 host-local host-local / Calico IPAM CRD / AWS ENI / Azure
内核依赖 低(VXLAN 支持即可) 中(BGP 路由) 高(eBPF ≥ 5.10)
大规模集群 一般(≤500 节点) 优秀(1000+ 节点) 优秀(1000+ 节点)
可观测性 基础 中等(Felix 监控) 原生(Hubble)
CNI 缓存命中率的关键前提: 不同 CNI 插件的数据路径长度和内核交互方式直接影响 Envoy 连接缓存的有效性。例如,Flannel 的 VXLAN 封装会增加数据包处理路径,导致连接复用率下降;而 Cilium 的 eBPF 直通路径可减少上下文切换,提升缓存命中率。后续章节将深入分析这些差异对 Envoy 数据面的具体影响。