第三部分:网络组件 CNI(Calico) 介绍

📝 前言

在 Kubernetes 集群中,网络是实现 Pod、Service、Node 等组件之间通信的核心基础设施。

为了保证不同容器运行环境和不同网络方案的可插拔性,CNI(Container Network Interface)标准被提出。

CNI 插件是 Kubernetes 集群不可或缺的组件之一,没有它 Pod 之间将无法建立正常的网络连接。

Calico 是目前生产环境中最常用的 CNI 插件,以其高性能、可扩展和丰富的网络策略能力,成为云原生网络的首选方案。

本文将对 Calico 的背景、架构和工作原理进行介绍,并结合生产环境给出优化建议。

🧠 本章知识卡片

🚀 本章小节

1️⃣ 什么是 CNI(Calico)?

CNI 是 CNCF 推出的容器网络接口标准,定义了容器运行时如何调用网络插件来完成容器的网络配置。

Calico 是一个基于 BGP(边界网关协议) 的容器网络解决方案,主要提供以下功能:

  • Pod 网络互通:为 Pod 分配可路由的 IP 地址。
  • 网络策略:支持细粒度的安全策略控制(类似防火墙规则)。
  • 跨集群通信:通过 BGP 或 VXLAN 进行高效的路由传播。
  • 与云原生生态集成:兼容 Kubernetes、OpenShift、Docker 等平台。

与 Flannel、Weave 等 CNI 相比,Calico 更加注重高性能和安全策略能力,特别适合大规模生产环境。

2️⃣ Calico 架构

Calico 的架构主要由以下组件构成:

  • Felix:核心代理,负责在节点上管理路由规则和安全策略。
  • etcd / Kubernetes API:存储网络策略、IP 分配信息等。
  • BIRD(BGP Daemon):实现 BGP 路由传播,使得各节点能够通过三层网络直接通信。
  • calicoctl:命令行工具,用于管理和调试 Calico 配置。

完整架构图如下:

更详细介绍可参看官方文档:https://docs.tigera.io/calico/latest/reference/architecture/overview

3️⃣ 支持的工作模式

Calico 提供几种主要的数据平面工作模式,每种模式各有侧重点:

  • 标准 Linux(iptables)模式

    基于 iptables 和 kube-proxy,兼容性强,但受限于 Linux 网络栈效率。

  • 三层 BGP 模式

    Pod 之间通过 BGP 路由直接通信,无需隧道,性能优秀,依赖底层网络对 BGP 的支持。

  • VXLAN/IPIP 隧道模式

    适用于底层网络无法改造的场景,通过封装跨节点通信,兼容性较强。

  • 最新 eBPF 模式

    Calico 支持使用 eBPF(extended Berkeley Packet Filter) 作为数据平面的替代方案Calico 文档

    eBPF 是一种运行在 Linux 内核中的轻量沙箱虚拟机,允许运行安全的小程序,无需修改内核源代码。

4️⃣ 工作原理

Calico 的工作流程大致如下:

  • Pod 创建

    kubelet 调用 CNI 插件,Calico 为新建 Pod 分配一个 IP 地址。

  • 网络路由配置

    Felix 在节点上安装路由和 iptables 规则,确保流量能正确转发到对应 Pod。

  • BGP 路由传播

    BIRD 或 GoBGP 将路由信息通告给其他节点,从而实现跨节点通信。

如果底层网络不支持 BGP,可以启用 IPIP/VXLAN 封装。

  • 网络策略应用

    当用户在 Kubernetes 中定义 NetworkPolicy,Calico 将其转换为 iptables 规则,实现流量控制。

5️⃣ 工作流程时序图

6️⃣ 生产环境优化建议

在生产环境中,Calico 的性能和稳定性至关重要,以下是常见优化方案:

场景 优化措施
大规模集群(>500 节点) 使用 BGP Peering(Route Reflector)减少路由泛洪
云环境部署 建议使用 VXLAN 模式,避免依赖底层网络
高并发策略 启用 eBPF 提升性能
容器安全需求 使用 Calico NetworkPolicy 进行细粒度隔离
可观测性 启用 Calico metrics,结合 Prometheus + Grafana 做监控

✅ 总结

Calico 是 Kubernetes 集群中最主流的 CNI 插件之一,凭借高性能路由、灵活的安全策略和可扩展性,广泛应用于公有云、私有云和混合云环境。

在生产环境中,合理选择工作模式(BGP / VXLAN)并优化路由策略,能显著提升网络性能与稳定性。