1. CNI 概述
CNI(Container Network Interface)是 Kubernetes 负责容器网络通信的核心组件。不同的 CNI 方案提供不同的网络连接方式,并针对不同的应用场景优化。常见的 CNI 组件包括 Flannel、Calico、Cilium、Weave、Antrea 和 Kube-Router,它们支持不同的网络模式,如 VXLAN、IP-in-IP、BGP、eBPF 等。
2. 主要 CNI 组件及工作原理
2.1 Flannel
Flannel 是一个轻量级 CNI,主要提供 L3 网络连接,适合中小型 Kubernetes 部署。
-
VXLAN 模式:
- 采用 UDP 封装(端口
8472
),跨 L3 网络通信。 - 特点:易于配置,但有封装开销。
- 适用场景:公有云、小型集群。
-
安装示例:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
- 采用 UDP 封装(端口
-
Host-GW 模式:
- 直接使用主机路由,无封装,性能最佳。
- 特点:适用于 L2 网络,无需额外封包。
- 适用场景:私有数据中心,高吞吐量场景。
配置示例(修改
flannel-config
):{ "Network": "10.244.0.0/16", "Backend": { "Type": "host-gw" } }
2.2 Calico
Calico 采用 L3 路由方式,支持 IP-in-IP 和 BGP,并提供 Kubernetes 网络策略。
-
IP-in-IP 模式(默认):
- 适用于多子网环境,封装 IP 包。
- 特点:性能高于 VXLAN,适用于公有云。
- 适用场景:跨子网、混合云环境。
-
安装示例:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
-
BGP 模式:
- 直接使用 BGP 协议,无封装,低延迟。
- 特点:要求底层网络支持 BGP。
- 适用场景:数据中心、大规模集群。
-
配置 BGP:
data: backend: "bird"
2.3 Cilium
Cilium 采用 eBPF 技术,提高网络性能,并支持 L7 网络策略。
-
VXLAN 模式(默认):
- 特点:性能优越,适合大规模集群。
- 适用场景:高性能微服务集群。
-
安装示例:
helm install cilium cilium/cilium --namespace kube-system
-
Native Routing 模式(BGP):
- 直接使用 BGP,无封装,减少开销。
- 适用场景:需要底层 BGP 路由支持的环境。
2.4 Weave
Weave 适用于跨数据中心和加密通信,支持 VXLAN。
- 特点:提供加密支持,适合混合云环境。
-
安装示例:
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
2.5 Antrea
Antrea 采用 Open vSwitch(OVS),提供强大的流量控制。
- 特点:适用于企业级 Kubernetes 运营,支持 L7 网络策略。
-
安装示例:
kubectl apply -f https://github.com/antrea-io/antrea/releases/latest/download/antrea.yml
2.6 Kube-Router
Kube-Router 是一个集成 BGP、Network Policy 和 Service Proxy 的轻量级 CNI。
- 特点:高性能,适合大规模 Kubernetes 部署。
-
安装示例:
kubectl apply -f https://raw.githubusercontent.com/cloudnativelabs/kube-router/master/daemonset/kube-router-all-features.yaml
3. 方案对比总结
CNI | 模式 | 配置难度 | 适用网络 | 适用场景 |
---|---|---|---|---|
Flannel | VXLAN | ⭐ | L3 | 公有云,小型集群 |
Host-GW | ⭐⭐ | L2 | 私有数据中心,高吞吐量 | |
Calico | IP-in-IP | ⭐⭐ | L3 | 跨子网、云环境 |
BGP | ⭐⭐⭐ | L3 | 大规模集群,数据中心 | |
Cilium | VXLAN | ⭐⭐ | L3 | 高性能网络 |
Native Routing | ⭐⭐⭐ | L3 | 需要底层 BGP | |
Weave | VXLAN | ⭐⭐ | L3 | 混合云,跨数据中心 |
Antrea | OVS | ⭐⭐⭐ | L2/L3 | 需要 Open vSwitch |
Kube-Router | BGP | ⭐⭐⭐⭐ | L3 | 高性能集群 |
4. 选择建议
- 新手或小型 Kubernetes 集群 → Flannel(VXLAN)
- 公有云环境 → Calico(IP-in-IP)
- 高性能私有数据中心 → Calico(BGP)或 Cilium(Native Routing)
- 跨数据中心通信 → Weave
- 企业级 Kubernetes → Antrea(OVS)
- 超大规模集群 → Kube-Router(BGP)
对于 Kubernetes CNI 的选择,应根据 网络架构、性能需求、维护成本 进行权衡,选择最适合自身业务的网络方案。