K8S几种常见CNI深入比较
以下在技术层面上对 Kubernetes 中的五种 CNI 插件进行深入比较:Flannel、Calico、kube-router、Weave Net 和 Cilium。
比较将从以下几个关键维度展开:
- 网络模型(Network Model)
- 数据平面(Data Plane)
- 控制平面(Control Plane)
- 核心功能与特性(Key Features)
- 性能与资源开销(Performance & Overhead)
- 操作与复杂度(Operability & Complexity)
1. Flannel (简单可靠的 Overlay)
- 技术概要: 最早期的 CNI 之一,设计目标是提供一个极其简单、轻量级的跨节点 Pod 网络连通方案。
- 网络模型:
- Overlay 网络: 默认使用 VXLAN 封装。也支持 host-gw(纯三层路由,但要求所有节点在同一个二层网络)。
- 每个节点从一个大的集群 CIDR 中分配一个独立的子网(通常是 /24)。
- 数据平面:
- VXLAN 模式: 数据包通过 Linux 内核的 VXLAN 模块进行封装和解封装,由一个名为 flannel.1 的虚拟设备 (VTEP) 处理。
- host-gw 模式: 不进行封装,直接修改节点的内核路由表(ip route),利用内核进行高效的路由转发。
- 控制平面:
- 一个简单的 flanneld 守护进程(DaemonSet)。
- 通过 watch Kubernetes API(或直连 etcd)来获取节点 IP 与其 Pod 子网的映射关系,并据此更新后端(如创建 VXLAN 转发表或写入路由表)。
- 核心功能与特性:
- 网络策略: 原生不支持 Kubernetes Network Policies。这是一个关键短板。
- 服务负载均衡: 完全依赖 kube-proxy。
- 加密: 不支持。
- 优点:
- 极其简单:配置和部署极为容易,资源消耗极低。
- 稳定可靠:经过长期大规模验证,VXLAN 模式兼容性极好。
- 缺点:
- 功能单一,缺乏高级特性(网络策略、加密、可观测性)。
- VXLAN 存在封装开销(约 10-20% 性能损失)。
2. Calico (高性能纯三层路由与强大策略)
- 技术概要: 企业级,功能丰富,以高性能和强大的网络安全策略著称,是生产环境中最常见的选择之一。
- 网络模型:
- 纯三层路由 (BGP): 默认模式。将每个节点视为一个路由器,通过 BGP 协议在各节点间分发 Pod 的路由信息。无封装,性能最佳。
- Overlay 封装: 当底层网络不支持 BGP 或需要跨子网时,支持 IPIP 或 VXLAN 封装。
- 数据平面:
- 路由: Linux 内核路由表。
- 网络策略: 使用 iptables 或更现代化的 eBPF 来实现。
- Felix: Calico 的节点代理(DaemonSet),负责将网络策略和路由信息编程到内核中(写入路由表和 iptables/eBPF 规则)。
- 控制平面:
- BGP Speaker (Bird/GoBGP): 在每个节点上运行,负责与其他节点交换路由信息。
- 状态存储: etcd 或 Kubernetes API (CRDs)。
- 核心功能与特性:
- 网络策略: 原生强项。支持完整的 Kubernetes Network Policies 和扩展的 Calico Global Network Policies (更强大的规则,如 L7 策略、基于 FQDN 的出口策略)。
- 服务负载均衡: 其 eBPF 模式可 替代 kube-proxy,提供高性能、低延迟的服务访问,并支持 DSR (Direct Server Return)。
- 加密: 支持通过 WireGuard 对节点间流量进行加密。
- 优点:
- 极高的转发性能(BGP 无封装模式)。
- 最强大、最灵活的网络策略引擎之一。
- eBPF 模式显著优化服务性能和策略实施效率。
- 缺点:
- 配置和管理比 Flannel/Weave 复杂,需要一些网络知识(尤其是 BGP)。
- 纯 BGP 模式要求节点间二层网络可达,或物理网络支持 BGP。
3. kube-router (精简的三合一方案)
- 技术概要: 一个旨在提供 “单进程、无 Overlay” 的一体化解决方案,整合了网络、服务代理和网络策略三大功能。
- 网络模型:
- 纯三层路由: 与 Calico 类似,使用 BGP 在节点间通告 Pod 路由,无 Overlay 封装。
- 数据平面:
- 路由: Linux 内核路由表。
- 服务代理: 使用 IPVS (LVS Kernel Module) 来实现 Service 的负载均衡,替代了 kube-proxy 的 iptables 模式,通常在大规模 Service 场景下性能更好。
- 网络策略: 使用 iptables 的 ipsets 来高效实现策略规则。
- 控制平面:
- 单个 kube-router DaemonSet 进程 完成所有功能 (BGP 路由广播、IPVS 规则同步、iptables 策略实施)。
- 直接 watch Kubernetes API 获取 Pod/Service/Endpoint/NetworkPolicy 的变化。
- 核心功能与特性:
- 三合一: 一个组件搞定网络、服务代理和网络策略。
- 高性能服务代理: 基于 IPVS,在大规模 Service 场景下性能优于 iptables kube-proxy。
- 网络策略: 支持标准的 Kubernetes Network Policies。
- 优点:
- 集成度高,架构简洁,避免部署多个组件。
- 无封装开销,纯三层路由性能高。
- 缺点:
- 成熟度和社区活跃度不如 Calico/Cilium。
- 高级功能(如 L7 策略、加密)不如 Calico/Cilium 丰富。
4. Weave Net (简单、加密、自愈的 Mesh)
- 技术概要: 注重简单性、安全性和弹性的 CNI 插件,核心特点是默认开启节点间通信加密和基于 Mesh Overlay 的自愈网络。
- 网络模型:
- Overlay 网络: 主要使用 VXLAN 封装。
- 每个节点上的 Weave router (weave) 形成一个全连接的 Mesh 网络,自动发现和重新连接。
- 数据平面:
- Fast Path: 默认且高效的模式,利用内核的 Open vSwitch 模块和 VXLAN 驱动进行转发。
- Encryption: 默认对节点间流量使用 NaCl (基于 IPsec ESP) 进行加密。
- 控制平面:
- 自组织的 Gossip 协议: Weave router 之间通过 UDP 交换控制信息(成员关系、路由、IPAM),无需外部数据库(如 etcd)。
- 核心功能与特性:
- 网络策略: 通过 Weave NPC (Network Policy Controller) 组件,基于 iptables 实现标准的 Kubernetes Network Policies。
- 服务负载均衡: 依赖 kube-proxy。
- 默认加密: 开箱即用且对用户透明的高性能加密是其最大卖点。
- 优点:
- 部署极其简单,默认加密,安全性高。
- 控制平面去中心化,不依赖 etcd,具有自愈能力。
- 缺点:
- 加密和封装有性能开销。
- Gossip 协议在超大规模集群(>100节点)可能增加控制平面的流量开销。
5. Cilium (基于 eBPF 的下一代云原生网络)
- 技术概要: 面向云原生的下一代网络方案,核心技术是 eBPF (Extended Berkeley Packet Filter),旨在提供 API 感知的网络、可观测性和安全能力。
- 网络模型:
- Overlay 可选: 支持 VXLAN 或 Geneve 封装模式。
- Native Routing: 支持纯三层路由模式(BGP 或直接路由),无封装。
- 数据平面:
- eBPF everywhere: Pod 网络、服务负载均衡、网络策略、监控追踪、加密等都通过加载到内核的 eBPF 程序高效处理,绕过了传统的 iptables 和网络协议栈的部分路径。
- 控制平面:
- Cilium Agent (DaemonSet): 运行在每个节点,管理 eBPF 程序和状态同步。
- Operator: 处理集群级别的任务(如 IPAM,CRD 管理)。
- 核心功能与特性:
- 网络策略: 支持 L3/L4 策略,更支持强大的 L7 策略 (HTTP, gRPC, Kafka 等),基于 eBPF 在 socket 层实施,效率极高。
- 服务负载均衡: 基于 eBPF 的 Maglev/Katran 算法,完全替代 kube-proxy。支持 DSR、一致性哈希,提供高性能、低延迟的服务访问。
- 加密: 支持通过 IPSec 或 WireGuard 进行节点间加密,并利用 eBPF 加速。
- 强大可观测性 (Hubble): 基于 eBPF 构建的分布式网络、服务和安全可观测性平台,提供丰富的流量指标、服务依赖图等。
- 优点:
- 卓越的性能和效率:eBPF 在内核运行,避免了大量的系统调用和上下文切换开销,尤其在 Service LB 和大量网络策略规则的场景下优势巨大。
- 先进的 L7 安全策略,提供了微服务级别的精细化控制能力。
- 无与伦比的可观测性 (Hubble)。
- 缺点:
- 对内核版本要求较高(推荐 >= 5.10+ 以获得全部功能)。
- 学习曲线最陡峭,eBPF 技术较新,调试相对复杂。
技术对比总结表
特性维度 | Flannel | Calico | kube-router | Weave Net | Cilium |
核心技术 | Linux Bridge / VXLAN | BGP / iptables / eBPF | BGP / IPVS | Gossip / VXLAN | eBPF |
网络模型 | Overlay | Pure L3 / Overlay | Pure L3 | Overlay | Pure L3 / Overlay |
网络策略 | ❌ 不支持 | ⭐⭐⭐⭐⭐ (L3-L7) | ✅ (L3-L4) | ✅ (L3-L4) | ⭐⭐⭐⭐⭐ (L3-L7 API-aware) |
Service LB | 依赖 kube-proxy | ✅ (eBPF 替代) | ✅ (IPVS 替代) | 依赖 kube-proxy | ✅ (eBPF 高性能替代) |
加密 | ❌ | ✅ (WireGuard) | ❌ | ✅ (默认开启) | ✅ (WireGuard/IPsec) |
可观测性 | 基础 | 企业版支持 | 基础 | 基础 | ⭐⭐⭐⭐⭐ (Hubble) |
性能 | 中-高 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
复杂度 | ⭐ (极低) | ⭐⭐⭐ (中高) | ⭐⭐ (中) | ⭐⭐ (低) | ⭐⭐⭐⭐ (高) |
主要优势 | 简单轻量 | 高性能路由,强大策略 | 三合一,IPVS | 简单安全,默认加密 | 高性能L7安全,先进可观测性 |
主要缺点 | 无策略,功能少 | 配置较复杂 | 社区规模小 | 性能有开销 | 内核要求高,学习曲线陡峭 |
选型建议
- 追求极致简单、轻量级,小集群或测试环境: Flannel。
- 重视网络策略安全性、企业级特性、大规模、高性能: Calico。如果对 Service LB 性能要求特别高,启用其 eBPF 模式。
- 想要一个集成的、替代 kube-proxy 的精简方案: kube-router。
- 需要简单部署且必须加密通信: Weave Net。
- 追求极致性能、需要 L7 策略、强大的可观测性,并愿意采用最新技术的生产环境: Cilium 是不二之选。