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)。
- 核心功能与特性:
- 网络策略: