第276篇:Flannel、Calico、Cilium 方案对比

关键词

Flannel、Calico、Cilium、CNI 对比、eBPF、BGP、VXLAN、网络策略、性能基准


一、Flannel

1.1 架构

Flannel 是最简单的 CNI 插件——专注于 Pod 间网络连通:

Flannel 架构:

┌──────────────────────────────────────────┐ │ etcd / Kubernetes API │ │ (存储子网分配信息) │ └────────────────┬─────────────────────────┘ │ | flanneld(每个节点一个) ┌────────────────────────────────┐ | 从 etcd 获取子网分配信息 配置路由和隧道 更新主机路由表 | | | --- | --- | --- |

Flannel 后端模式:

  1. VXLAN(默认) ┌─ 节点间使用 VXLAN 隧道 ├─ 内核 VXLAN(无额外守护进程) └─ 性能:~7Gbps(100G 链路)

  2. host-gw(主机网关) ┌─ 直接写主机路由(无隧道) ├─ 通过节点的物理 IP 路由 Pod IP ├─ 需要节点二层互通 └─ 性能:~线速(无封装开销)

  3. UDP(最慢,已淘汰) ┌─ 用户态封装 └─ 性能差(~1Gbps)

1.2 Flannel 的特点

优点:
  1. 简单——配置少,上手快
  2. 轻量——flanneld 占用资源少
  3. 稳定——大规模部署验证
  4. 兼容——支持大多数 Linux 发行版

缺点:
  1. 无 NetworkPolicy——不支持 K8s 网络策略
  2. 无加密——隧道未加密(可配合 IPSec)
  3. 无细粒度控制——全局策略,不可精细化
  4. 性能——VXLAN 模式有 5-10% 开销

适用场景:
  - 小型集群(< 50 节点)
  - 网络策略不需要
  - 追求简单部署
  - 测试/开发环境

安装:
  kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

二、Calico

2.1 架构

Calico 是功能最全面的 CNI 插件——网络连通 + 安全策略:

Calico 架构:

Felix(每个节点一个) ┌────────────────────────────────┐ └────────────────────────────────┘ 配置网络接口(veth pair) 管理 iptables 规则(策略实现) 更新路由表
BIRD(BGP 客户端) ┌────────────────────────────────┐ └────────────────────────────────┘ 向其他节点通告 Pod 路由 支持 BGP Route Reflector
Typha(大规模集群可选) ┌────────────────────────────────┐ 减少 Felix 对 API Server 的压力 聚合策略变更通知

Calico 数据面模式:

  1. BGP(默认) ┌─ 通过 BGP 交换 Pod 路由 ├─ Pod IP 直接路由(无隧道封装) ├─ 需要节点二层互通(或 BGP 到 ToR 交换机) └─ 性能:线速(无封装)

  2. VXLAN / IPIP ┌─ 通过隧道封装跨子网流量 ├─ IPIP 封装(比 VXLAN 少 4 字节) ├─ 不需要二层互通 └─ 性能:VXLAN ~95%,IPIP ~97%

  3. eBPF(实验性) ┌─ 用 eBPF 替代 iptables ├─ 更高性能 └─ 需要内核 5.3+

2.2 Calico 的特点

优点:
  1. NetworkPolicy——完整的 K8s 网络策略支持
  2. 高性能——BGP 模式无封装
  3. 安全——支持全局网络策略、命名空间隔离
  4. 可扩展——支持大规模集群(1000+ 节点)
  5. 灵活——BGP/VXLAN/IPIP/eBPF 多种数据面
  6. 加密——支持 WireGuard 隧道加密

缺点:
  1. 复杂——配置比 Flannel 复杂得多
  2. BGP 依赖——BGP 模式需要 ToR 交换机支持
  3. iptables 性能——大规模策略 iptables 规则膨胀
  4. 学习曲线——Felix/BIRD/Typha 组件多

适用场景:
  - 生产集群(所有规模)
  - 需要网络策略
  - 多租户/安全敏感
  - 已有 BGP 基础设施

安装:
  kubectl create -f https://docs.projectcalico.org/manifests/calico.yaml

三、Cilium

3.1 架构

Cilium 是新一代 CNI——基于 eBPF 技术:

Cilium 架构:

Cilium Agent(每个节点一个) ┌────────────────────────────────┐ └────────────────────────────────┘ eBPF 程序管理 - XDP(早期丢包/转发) - TC(流量控制 hook) - cgroup hook(套接字级)
Cilium Operator(集群级) ┌────────────────────────────────┐ └────────────────────────────────┘ 状态管理 负载均衡器 IP 池管理
Hubble(可观测性) ┌────────────────────────────────┐ 网络流量可视化和监控 服务地图、依赖关系识别

Cilium 数据面: eBPF 程序直接挂载到网络 hook 点: - eth0 入口:XDP 程序(最快的丢包决策) - eth0 入口:TC 程序(流量转发) - cgroup:套接字级别策略(identity-based)

关键特性: 无 iptables——全部用 eBPF 替代 无 conntrack——eBPF maps 替代 身份标识(Identity)——基于标签的 L3/L4/L7 策略

3.2 Cilium 的特点

优点:
  1. 极致性能——eBPF 绕过 iptables,PPS 高 3-5x
  2. 细粒度策略——L3/L4/L7(HTTP/gRPC/Kafka)策略
  3. Hubble 可观测性——流量可视化、延迟分析
  4. Service 替代——eBPF 直接处理 Cluster IP(性能更好)
  5. 透明加密——WireGuard 集成
  6. 可编程——eBPF 程序按需加载

缺点:
  1. 内核要求——需要 Linux 5.10+(部分特性需要更新)
  2. 新技术——相对不成熟(虽然已生产就绪)
  3. 调试复杂——eBPF 问题排查需要专业知识
  4. 资源占用——eBPF map 占用内核内存

适用场景:
  - 高性能要求(HPC、AI、金融)
  - 需要 L7 策略(服务网格替代)
  - 大规模集群(10K+ 节点)
  - 需要深度可观测性

安装:
  cilium install

四、三方对比

4.1 功能对比

特性 Flannel Calico Cilium
部署复杂度 Pod 连通 NetworkPolicy L7 策略 服务负载均衡 加密 可观测性 IPv6 多集群 Windows 简单 ✓ ✗ ✗ kube-proxy ✗ 弱 部分 有限 ✓ 中等 ✓ ✓ ✗ kube-proxy WireGuard 中 ✓ ✓ ✓ 中等-复杂 ✓ ✓ ✓ 原生 eBPF WireGuard 强(Hubble) ✓ ✓ 有限

4.2 性能对比

性能基准测试(100G 网卡,Pod-to-Pod):

测试项 Flannel (VXLAN) Calico (BGP) Cilium (eBPF)
TCP 吞吐 PPS(64B) 延迟(P50) 延迟(P99) TCP 新建/s 35 Gbps 5 Mpps 75 μs 150 μs 30K 50 Gbps 8 Mpps 50 μs 100 μs 50K 48 Gbps 15 Mpps 35 μs 60 μs 200K

关键结论: 1. Cilium eBPF 的 PPS 是 Calico BGP 的 2x 2. Cilium 延迟最低(绕过了 iptables 和 conntrack) 3. Calico BGP 吞吐最高(无封装开销) 4. Flannel VXLAN 性能最低(封装开销)

4.3 选型建议

选型决策树:

是否需要 NetworkPolicy? ├── 不需要 → Flannel(最简方案) └── 需要 → ├── 是否需要 L7 策略/高性能? │ ├── 是 → Cilium(eBPF) │ └── 否 → │ ├── 内核版本 > 5.10? │ │ ├── 是 → Cilium(推荐) │ │ └── 否 → Calico └──

场景推荐: | 场景 | 推荐方案 | | --- | --- | | 开发/测试 通用生产 高性能计算 金融交易 多租户 边缘/小型 混合云 | Flannel(简单快速) Calico(稳定成熟) Cilium(极致性能) Cilium(低延迟+可观测性) Cilium 或 Calico(策略强) Flannel(资源占用少) Cilium(多集群统一管理) |


五、总结

知识点 核心要点
Flannel 简单 CNI,VXLAN/host-gw 模式,无 NetworkPolicy
Calico 完整 CNI,BGP/VXLAN 数据面,iptables 策略
Cilium 新一代 eBPF CNI,高性能,L7 策略,Hubble 可观测性
性能排序 Cilium(eBPF) > Calico(BGP) > Flannel(VXLAN)
功能排序 Cilium > Calico > Flannel
复杂度排序 Flannel < Calico < Cilium
选型关键 性能需求、策略需求、内核版本、运维能力

六、思考

  1. Flannel 的 host-gw 模式和 VXLAN 模式有什么区别?什么情况下不能使用 host-gw 模式?
  2. Calico 的 BGP 模式下,Pod 跨节点通信时数据包是否经过隧道封装?为什么 Calico BGP 性能优于 Flannel VXLAN?
  3. Cilium 使用 eBPF 替代 iptables 带来了哪些性能提升点?为什么 eBPF 的 PPS 比 iptables 高 3-5 倍?
  4. 在一个 500 节点的生产集群中,需要 NetworkPolicy 支持,内核版本为 5.4,你会选择哪个 CNI?为什么?
  5. Hubble 在 Cilium 中扮演什么角色?如果网络出现故障,Hubble 如何帮助排查问题?

下篇预告:第277篇《Cilium eBPF 数据面与网络性能》——深入 Cilium 的 eBPF 数据面原理,XDP/TC hook、身份标识、eBPF Map 与高性能网络路径。