对比
CNI 主流方案对比
| 维度 | Flannel | Calico | Cilium |
|---|---|---|---|
| 维护方 | Flannel-io(社区) | Tigera(公司) | Isovalent / Cisco |
| CNCF | sandbox | Graduated | Graduated |
| 数据面 | vxlan / host-gw / ipip / udp | iptables / eBPF / IPIP / VXLAN / BGP | eBPF(XDP / TC / sock_ops) |
| NetworkPolicy | ❌(雏形) | ✅ K8s 事实标准 | ✅ K8s + Cilium 扩展(L7) |
| 替换 kube-proxy | ❌ | ✅(eBPF data plane) | ✅ |
| 性能 | 中 | 高(eBPF)/ 中(iptables) | 最高 |
| 可观测 | 无 | 弱 | Hubble(service map + flow + L7) |
| L7 策略 | ❌ | ✅(Enterprise) | ✅(原生) |
| BGP 物理网络 | ❌ | ✅(生产推荐) | ❌ |
| 双栈 IPv4/IPv6 | 部分 | ✅ | ✅ |
| 内核要求 | 3.10+ | 3.10+ | 4.19+,建议 5.10+ |
| 资源占用 | 极低 | 中 | 中(BPF maps 占用内存) |
| 商业版 | 无 | Tigera Enterprise | Isovalent Enterprise |
| 学习曲线 | 平 | 中(BGP 陡) | 陡(eBPF) |
| 适用集群规模 | <500 | <5000 | <10000 |
一句话定位
- Flannel:最简、零策略、学习 / 开发用
- Calico:生产最稳、NetworkPolicy 完整、配合 BGP 可对接物理网络
- Cilium:性能 / 可观测 / 服务网格一体化,新集群首选
决策树
要 NetworkPolicy?
├─ 不要 → Flannel(最简单)
└─ 要
├─ 集群 <100 节点,不需要 L7 policy → Calico(iptables,稳)
├─ 大集群 / BGP 网络 / 物理设备要学 Pod 路由 → Calico + BGP
├─ 性能 / 可观测 / L7 policy / 服务网格 → Cilium
└─ 内核老(<4.19) → Calico iptables(别勉强 Cilium)
性能数字参考
- iptables 模式:service 规则 ~5k 时延迟显著上升
- Calico eBPF:service 规则 ~20k 内延迟平稳
- Cilium:service 规则 ~50k 内延迟平稳
- 跨节点 Pod-to-Pod:
- host-gw / native-routing:~30–50μs(无封装)
- VXLAN:~60–100μs(50 字节开销)
- IPIP:~50–80μs
兼容 / 迁移注意
- Flannel → Calico:共存可(calico policy-only 模式),但要重排 Pod CIDR
- Calico → Cilium:calico 不卸载也能共存一段时间,但生产建议一次性切换
- CNI 切换一定记得:所有 Pod 重启,service IP 不变但 Pod IP 会变
- Multus:常用于多网卡,Cilium / Calico 都是常见主 CNI
监控 / 排障通用
# 看当前 CNI
ls /etc/cni/net.d/
# 看 CNI binary
ls /opt/cni/bin/
# 看 Pod 路由
ip route show table all
# 看 iptables(如果是 iptables 模式)
iptables-save | head
一句话选型
生产不知道选啥 → Calico;新集群能升内核 + 想要最强 → Cilium;学习 / dev → Flannel。