4. CNI 插件深度解析(下):Flannel VXLAN/Backend 原理、Weave Net 的快速数据路径、Cilium eBPF 革命
在上一节中,我们剖析了 CNI 的接口规范与通用数据平面。本节将深入三个最具代表性的 CNI 插件——Flannel、Weave Net 与 Cilium——分别揭示它们在 Overlay 封装、快速数据路径以及内核可编程性上的核心原理与瓶颈。
4.1 Flannel VXLAN / Backend 原理与性能瓶颈
Flannel 是 Kubernetes 生态中最轻量的 Overlay 网络方案之一,其核心设计思想是“简单可靠”。它通过 VXLAN(默认)或 host-gw 模式实现跨节点 Pod 通信。
4.1.1 VXLAN 模式数据流
在 VXLAN 模式下,Flannel 在每个节点上运行 flanneld 守护进程,负责从 etcd 或 Kubernetes API 分配子网,并将 Pod IP 封装到 UDP 包中(端口 8472)。
- 源 Pod 发送数据包到目标 Pod IP。
- 数据包到达节点 cni0 网桥,通过路由表匹配到 flannel.1 VXLAN 设备。
- flannel.1 将原始 L2 帧封装为 VXLAN 报文,外层添加 UDP/IP 头,目标 IP 为对端节点 IP。
- 数据包通过节点物理网卡发送到对端,对端 flannel.1 解封装后转发至目标 Pod。
4.1.2 host-gw 模式
host-gw 模式不进行任何封装,直接在节点路由表中添加远程 Pod 子网路由,下一跳指向对端节点 IP。性能接近宿主机网络,但要求所有节点处于同一二层网络。
| 特性 | VXLAN 模式 | host-gw 模式 |
|---|---|---|
| 封装开销 | 50 字节(UDP + VXLAN) | 无 |
| 网络要求 | 三层可达 | 二层可达 |
| CPU 消耗 | 中(封装/解封装) | 低(仅路由) |
| 吞吐量 | 约 80%-90% 线速 | 接近线速 |
| 适用场景 | 跨数据中心、云环境 | 同机房、同子网 |
4.2 Weave Net 的快速数据路径
Weave Net 提供了两种数据路径:sleeve(用户态,默认)和 fastdp(快速数据路径,基于内核 OVS 或 Linux 内核模块)。
4.2.1 Sleeve 模式
Sleeve 模式在用户态运行 weave 守护进程,使用 TCP 或 UDP 进行封装,支持加密(NaCl 加密库)。由于所有包处理都在用户态完成,CPU 消耗较高,吞吐量受限。
4.2.2 Fastdp 模式
Fastdp 模式利用 Linux 内核的 Open vSwitch (OVS) 或 weave-kernel 模块,将数据路径下沉到内核态,大幅减少上下文切换。Fastdp 使用 VXLAN 封装,但通过内核模块直接处理,性能接近原生。
| 特性 | Sleeve 模式 | Fastdp 模式 |
|---|---|---|
| 数据路径 | 用户态 | 内核态 |
| 封装方式 | TCP/UDP + 自定义 | VXLAN |
| 加密 | 内置(NaCl) | 需 IPsec 配合 |
| 吞吐量 | 约 1-2 Gbps | 可达 10 Gbps+ |
| CPU 消耗 | 高 | 低 |
4.2.3 Weave Net 网络拓扑与瓶颈
Weave Net 默认采用 全连接拓扑,每个节点与所有其他节点建立连接。当集群规模超过 50 节点时,连接数呈 O(n²) 增长,心跳与路由更新开销显著增加。
- 瓶颈 1:全连接导致控制平面压力大,节点加入/离开时路由收敛慢。
- 瓶颈 2:Sleeve 模式用户态处理成为吞吐瓶颈。
- 瓶颈 3:加密(默认开启)进一步降低性能。
--no-discovery 减少连接数;考虑迁移至 Cilium 以获得更好的扩展性。
4.3 Cilium eBPF 革命
Cilium 基于 eBPF(extended Berkeley Packet Filter) 技术,将网络、可观测性与安全策略直接注入 Linux 内核,无需修改内核代码或加载内核模块。这被视为 Kubernetes 网络领域的“革命性”方案。
4.3.1 eBPF 核心原理
eBPF 允许用户在 Linux 内核中安全地运行沙箱化程序。Cilium 利用 eBPF 实现:
- XDP(eXpress Data Path):在网卡驱动层直接处理数据包,绕过内核协议栈,实现超高吞吐。
- TC(Traffic Control)钩子:在协议栈入口/出口挂载 eBPF 程序,实现 L3/L4 转发与策略。
- Socket 层钩子:在应用层与内核之间拦截系统调用,实现 L7 策略(HTTP/gRPC)。
4.3.2 Cilium 网络模型
Cilium 使用 Overlay(VXLAN/Geneve) 或 Native Routing 模式。与 Flannel/Weave 不同,Cilium 不依赖 iptables 或 netfilter,所有转发规则由 eBPF Map 管理,规则更新无需重启服务。
| 特性 | 传统 iptables 方案 | Cilium eBPF 方案 |
|---|---|---|
| 规则更新 | 全量刷新,耗时随规则数增长 | 增量更新,O(1) 复杂度 |
| 数据路径 | netfilter 钩子链 | eBPF 钩子(XDP/TC) |
| L7 策略 | 需 Sidecar Proxy(Envoy) | 原生 eBPF 拦截 |
| 可观测性 | 外部工具(Prometheus + 导出器) | 内置 Hubble(eBPF 指标) |
| 性能损耗 | 中-高(规则多时明显) | 低(接近线速) |
4.3.3 Cilium 的瓶颈与注意事项
- 内核版本要求:eBPF 功能依赖较新内核(推荐 5.10+),老旧发行版(CentOS 7)需升级内核或使用 RHEL 8/9。
- 调试复杂度:eBPF 程序调试工具链(bpftrace、bcc)学习曲线陡峭。
- 大规模集群:eBPF Map 大小需合理配置,避免内存占用过高。
4.4 三种 CNI 插件选型对比
| 维度 | Flannel | Weave Net | Cilium |
|---|---|---|---|
| 部署复杂度 | 低(单 DaemonSet) | 中(需额外组件) | 中-高(依赖内核版本) |
| 性能(Overlay) | 中 | 低(Sleeve)/ 高(Fastdp) | 高 |
| 可观测性 | 无内置 | weave status | Hubble(丰富) |
| 安全策略 | 无(需 NetworkPolicy) | 基础加密 | L3-L7 原生策略 |
| 大规模集群 | 一般(>100 节点需调优) | 差(全连接瓶颈) | 优秀(eBPF 扩展性好) |
| 社区活跃度 | 维护模式 | 低 | 高(CNCF 毕业) |