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

第三部分:网络组件 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)并优化路由策略,能显著提升网络性能与稳定性。


















