CNI #
CNI(Container Network Interface)是 Kubernetes 的容器网络接口标准,负责为 Pod 分配 IP 地址并实现 Pod 间通信。以下对比四种主流 CNI 插件:Cilium、Calico、Flannel、阿里云 Terway。
| Name | Doc | Github | Note |
|---|---|---|---|
| Cilium | Docs | Github | 基于 eBPF 的新一代 CNI,替代 kube-proxy,支持 L7 NetworkPolicy 和 Hubble 全链路可观测,CNCF 毕业项目。 |
| Calico | Docs | Github | 企业级 CNI,基于 BGP 路由实现无封装网络,支持 iptables / eBPF 数据平面,NetworkPolicy 功能完善。 |
| Flannel | Docs | Github | 最简单的 CNI 插件,基于 VXLAN / host-gw 的 Overlay 网络,部署零配置,适合小型集群。不支持 NetworkPolicy。 |
| Terway | Docs | Github | 阿里云 ACK 自研 CNI,基于 ENI 直通 VPC,Pod IP 即 VPC IP,无封装开销,支持 eBPF 加速。 |
| Weave Net | Docs | Github | 基于 VXLAN 的 Overlay 网络,内置服务发现和加密通信,支持 NetworkPolicy,适合中小型集群。 |
| kube-router | Docs | Github | 一体化网络方案,集 CNI + Service Proxy + NetworkPolicy 于一体,基于 BGP / iptables,无 Overlay 封装。 |
| Multus | Docs | Github | Meta-CNI 插件,允许一个 Pod 挂载多张网卡,常用于 SR-IOV / DPDK / Macvlan 等高性能场景。 |
四种 CNI 总览对比 #
| 特性 | Flannel | Calico | Cilium | Terway |
|---|---|---|---|---|
| 数据平面 | iptables | iptables / eBPF | eBPF | ENI / eBPF |
| 网络模式 | Overlay(VXLAN / host-gw) | BGP / Overlay(VXLAN / IPIP) | Overlay(VXLAN / Geneve)/ eBPF | Underlay(ENI 直通 VPC) |
| 封包开销 | VXLAN 有封装开销 | BGP 无封装 / IPIP 有封装 | eBPF 无封装 | 无封装(Pod IP 即 VPC IP) |
| NetworkPolicy | 不支持 | 支持(L3/L4) | 支持(L3/L4/L7) | 支持(L3/L4 + 安全组) |
| kube-proxy 替代 | 否 | 否(eBPF 模式可替代) | 是(eBPF 完全替代) | 否 |
| 可观测性 | 无 | 基础(Flow Logs) | 强(Hubble,L3-L7 流量可视化) | 基础(流日志) |
| 性能 | 中等 | 高 | 高(eBPF 绕过 iptables) | 高(ENI 直通,无隧道) |
| IPv6 双栈 | 支持 | 支持 | 支持 | 支持 |
| 云平台依赖 | 无 | 无 | 无 | 仅阿里云 |
| Service Mesh | 无 | 无 | 支持(Cilium Service Mesh) | 无 |
| 复杂度 | 低(最简单) | 中 | 中高 | 中(ACK 托管自动配置) |
| 适用场景 | 小型集群、学习 | 中大型集群、混合云 | 大规模集群、安全敏感 | 阿里云 ACK 集群 |
| GitHub Star | ~8.8k | ~6.2k | ~20k+ | ~1k |
Flannel #
最简单、最轻量的 CNI 插件,适合入门和小型集群。
工作原理 #
Node A (10.244.1.0/24) Node B (10.244.2.0/24)
┌──────────────┐ ┌──────────────┐
│ Pod-A 10.244.1.5 │ Pod-B 10.244.2.3
│ │ │ │ │ │
│ flannel.1 (VXLAN) │ ═ VXLAN 隧道 ═ │ flannel.1 (VXLAN) │
└──────────────┘ └──────────────┘
- 每个 Node 分配一个
/24子网 - 跨 Node 通信通过 VXLAN 隧道封装(或
host-gw直接路由) - 不支持 NetworkPolicy,需搭配 Calico 策略组件使用
优点 #
- 部署极简,几乎零配置
- 资源占用低
- 成熟稳定,兼容性好
缺点 #
- 无 NetworkPolicy 支持
- 无高级可观测性
- VXLAN 模式有约 50 字节封装开销
- 大规模集群性能不理想
Calico #
企业级 CNI,基于 BGP 路由,支持丰富的网络策略。
工作原理 #
Node A (10.244.1.0/24) Node B (10.244.2.0/24)
┌──────────────┐ ┌──────────────┐
│ Pod-A 10.244.1.5 │ Pod-B 10.244.2.3
│ │ │ │ │ │
│ veth pair │ ══ BGP 路由交换 ══ │ veth pair │
└──────────────┘ └──────────────┘
│ │
物理网络直接路由(无封装)
- 跨 Node 通信通过 BGP 路由直接转发,无需封装
- 也可使用 VXLAN 或 IPIP 模式(适用公有云不支持 BGP 的场景)
- 支持基于 iptables 或 eBPF 的数据平面
- 完整支持 Kubernetes NetworkPolicy(L3/L4)
优点 #
- BGP 模式无封装开销,性能优秀
- NetworkPolicy 功能完善
- 支持大规模集群(BGP Route Reflector 扩展)
- 可与 Flannel 组合使用(Canal 方案)
缺点 #
- BGP 模式需要底层网络支持(公有云通常用 VXLAN 模式)
- iptables 模式在大规模 Service 时规则链较长
- eBPF 模式功能不如 Cilium 全面
Cilium #
基于 eBPF 的新一代 CNI,无需 kube-proxy,支持 L7 网络策略和全链路可观测。
工作原理 #
eBPF 程序(内核态)
┌───────────────────────────────────────┐
│ TC / XDP Hook │
│ ├── Pod 间路由(替代 iptables) │
│ ├── Service 负载均衡(替代 kube-proxy)│
│ ├── NetworkPolicy L3-L7 执行 │
│ └── 可观测性指标采集 │
└───────────────────────────────────────┘
│ 无需上下文切换
┌────────────┴───────────────────────────┐
│ Pod-A Pod-B Pod-C │
└─────────────────────────────────────────┘
- 数据平面完全基于 eBPF,在内核态处理数据包
- 替代 kube-proxy:Service 负载均衡直接在 eBPF 中实现
- 支持 L7 NetworkPolicy:可按 HTTP 路径、方法、gRPC 方法等精细控制
- Hubble 提供全链路流量可视化(L3-L7)
- 支持 Cilium Service Mesh(无 Sidecar 架构)
优点 #
- 性能最优:eBPF 绕过 iptables,无规则链遍历开销
- 可观测性最强:Hubble 提供实时流量地图和审计日志
- L7 策略支持(HTTP、gRPC、Kafka 等)
- 无 Sidecar Service Mesh 架构,资源开销低
- 社区活跃,CNCF 毕业项目
缺点 #
- 需要较新内核版本(建议 5.4+,部分功能需 5.10+)
- 配置项复杂,学习曲线较陡
- eBPF 与某些内核模块可能冲突(如 kube-proxy 同时运行需禁用)
阿里云 Terway #
阿里云 ACK 自研 CNI,基于弹性网卡(ENI)直通 VPC,Pod IP 即 VPC IP。
工作原理 #
阿里云 VPC 网络平面
┌───────────────────────────────────────────────────┐
│ ECS Node A ECS Node B │
│ ┌─────────────────┐ ┌─────────────────┐
│ │ ENI-1 (主网卡) │ │ ENI-1 (主网卡) │
│ │ ENI-2 (附加网卡) │ │ ENI-2 (附加网卡) │
│ │ ├── Pod-A (ENI IP) │ ├── Pod-C (ENI IP)
│ │ └── Pod-B (ENI IP) │ └── Pod-D (ENI IP)
│ └─────────────────┘ └─────────────────┘
│ │ │
│ └──── VPC 直接路由(无封装)──────────┘
└───────────────────────────────────────────────────┘
- Pod IP 直接从 VPC 子网分配,与 ECS、RDS 等云资源在同一网络平面
- 跨 Node 通信通过 VPC 弹性网卡直接转发,无 VXLAN / IPIP 封装
- 支持 eBPF 加速协议栈,降低延迟
- 支持 NetworkPolicy 和阿里云安全组双重网络策略
网络模式 #
| 模式 | 说明 | 适用场景 |
|---|---|---|
| 共享 ENI(默认) | 多个 Pod 共享一张 ENI,通过 IP 复用扩展 Pod 密度 | 通用场景,Pod 密度高 |
| 独占 ENI | 每个 Pod 独占一张 ENI,网络性能最大化 | 高性能网络应用(如 AI、大数据) |
| IPvlan | 基于 IPvlan 的共享 ENI 模式,兼容性更好 | 对内核兼容性有要求的场景 |
优点 #
- 无封装开销:Pod IP 即 VPC IP,跨 Node 通信等同于 ECS 间通信
- 高性能:ENI 直通 + eBPF 加速,延迟低、吞吐高
- 云原生集成:与 SLB / NLB / 安全组 / VPC 路由无缝对接
- Pod 与 VPC 内 RDS / Redis 等资源可直接互通,无需 NAT
- ACK 托管版自动安装和维护
缺点 #
- 仅限阿里云,无法在自建 IDC 或其他云平台使用
- 受 ENI 数量配额限制(共享 ENI 模式可缓解)
- 可观测性不如 Cilium Hubble 丰富
- Trunking 功能仅在 ACK 托管版可用
选型建议 #
| 场景 | 推荐方案 | 理由 |
|---|---|---|
| 阿里云 ACK | Terway | 云原生集成最优,无封装性能高,自动运维 |
| 自建 IDC / 混合云(简单需求) | Flannel | 部署简单,维护成本低 |
| 自建 IDC / 混合云(企业级) | Calico | BGP 直路由 + NetworkPolicy,成熟稳定 |
| 大规模集群 / 安全敏感 / Service Mesh | Cilium | eBPF 性能最优,L7 策略 + Hubble 可观测 |
| Flannel + 网络策略 | Calico + Flannel(Canal) | Flannel 组网 + Calico 策略,兼得两者优势 |
| 需要深层数据面可观测性 | Cilium | Hubble 提供 L3-L7 全链路可视化,无出其右 |
性能排序(跨 Node Pod 间通信) #
Terway(ENI 直通)≈ Cilium(eBPF)> Calico(BGP 直路由)> Calico(VXLAN)≈ Flannel(VXLAN)
功能丰富度排序 #
Cilium > Calico > Terway > Flannel