type
status
date
slug
summary
category
tags
create_time
Aug 27, 2025 08:22 AM
icon
password
my_create_time

📝 前言

在 Kubernetes 集群中,网络是实现 Pod、Service、Node 等组件之间通信的核心基础设施。
为了保证不同容器运行环境和不同网络方案的可插拔性,CNI(Container Network Interface)标准被提出。
CNI 插件是 Kubernetes 集群不可或缺的组件之一,没有它 Pod 之间将无法建立正常的网络连接。
Calico 是目前生产环境中最常用的 CNI 插件,以其高性能、可扩展和丰富的网络策略能力,成为云原生网络的首选方案。
本文将对 Calico 的背景、架构和工作原理进行介绍,并结合生产环境给出优化建议。

🧠 本章知识卡片

notion image

🚀 本章小节

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 配置。
完整架构图如下:
notion image

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️⃣ 工作流程时序图

notion image

6️⃣ 生产环境优化建议

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

✅ 总结

Calico 是 Kubernetes 集群中最主流的 CNI 插件之一,凭借高性能路由、灵活的安全策略和可扩展性,广泛应用于公有云、私有云和混合云环境。
在生产环境中,合理选择工作模式(BGP / VXLAN)并优化路由策略,能显著提升网络性能与稳定性。
💡
有关文章的任何疑问,欢迎您在底部评论区留言,一起交流~
若文章对您有帮助,欢迎 请我喝杯咖啡~
 
上一篇
第三部分:DNS 组件 CoreDNS 介绍
下一篇
第三部分:节点组件 Container Runtime 介绍

评论
Loading...