Kubernetes CNI 插件详解:原理、特点、配置与选择指南

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
      
  • 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. 选择建议

  1. 新手或小型 Kubernetes 集群 → Flannel(VXLAN)
  2. 公有云环境 → Calico(IP-in-IP)
  3. 高性能私有数据中心 → Calico(BGP)或 Cilium(Native Routing)
  4. 跨数据中心通信 → Weave
  5. 企业级 Kubernetes → Antrea(OVS)
  6. 超大规模集群 → Kube-Router(BGP)

对于 Kubernetes CNI 的选择,应根据 网络架构、性能需求、维护成本 进行权衡,选择最适合自身业务的网络方案。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容