Kubernetes Calico
下面是一份 Kubernetes Calico 最详细介绍(基于 K8s 1.33 最新认知),涵盖架构、工作原理、组件、网络策略、BGP、IPIP/VXLAN、企业特性等,全程用工程师视角写,帮助你在实际集群中落地。
Calico 是目前 Kubernetes 最主流的 CNI 插件之一,以高性能、可观测性强、企业特性丰富而著称。
它不是简单的 Pod 网络方案,而是一套 L3 网络、BGP 路由、网络策略执行、跨集群通信、安全合规的大型网络平台。
Calico 是一个基于 三层路由(L3 Routing) 的 Kubernetes 网络方案,核心理念:
- 每个 Pod 拥有独立的 /32 IP
- Pod 到 Pod 的流量走路由,不走 Overlay(可选)
- 使用 Linux 内核(iptables/BPF)执行策略
- 用 BGP 或 overlay 上构建网络拓扑
- 可提供企业级 Zero Trust 安全能力
支持网络模式包括:
| 模式 | 描述 | 性能 |
|---|---|---|
| BGP 模式(无 overlay) | 直接使用 BGP 交换路由,Pod IP 可达 | ⭐⭐⭐⭐⭐(最高) |
| IPIP overlay | 节点之间包一层 IPIP | ⭐⭐⭐ |
| VXLAN overlay | 用 VXLAN 封装 Pod 流量 | ⭐⭐⭐⭐ |
| WireGuard | Pod 间端到端加密 | ⭐⭐⭐⭐ |
同时支持:
- NetworkPolicy(K8s 标准)
- GlobalNetworkPolicy(Calico 扩展)
- eBPF dataplane(更快,替代 iptables)
- 跨集群通信(Calico Enterprise)
Calico 主要组件:
DaemonSet,每个节点一个。它负责:
- 把 CNI 网络插入 Pod(CNI 插件)
- BGP daemon:分发 /32 Pod 路由
- 设置 iptables/eBPF
- 设置 IPAM(Pod IP 分配)
- 维护 overlay 隧道:IPIP/VXLAN/WireGuard
Felix 是 Calico 的核心控制面代理,负责:
- 网络策略 -> iptables/eBPF 规则
- 路由表管理
- 隧道端点管理
是 Calico 最重要的进程。
为大规模集群(>200 nodes)减少 Felix 与 etcd/K8s API 的连接压力。
相当于一个 fan-out aggregator,让 Felix 不直接读 API,大幅减少 watch 连接。
当集群节点规模增大,节点之间的 Full-mesh BGP 成本会很高,因此可以部署 RR。
Calico 最大特点就是网络模式灵活。下面是你实际工程中最常用的 3 种模式。
特点:性能最高
网络走三层路由,不封装:
Pod -> Node -> Node -> Pod
Linux 路由直接转发,延迟最小。
适用场景
- 裸金属机房
- 云主机具备固定路由能力
- 腾讯云 TKE 高性能网络
- 阿里云 ACK Pro
优点
- 零封装,性能最高
- 路由可控
- 运维可观测性强
Calico 默认模式就是 IPIP。
特点:
Pod -> NodeA(IPIP 封包)-> NodeB 解包 -> Pod
节点之间走 IPIP 隧道。
适用于:
- 没有 BGP 能力的通用环境
- 多节点跨子网
但性能一般(比 VXLAN 更低一点)。
Calico 的 VXLAN 模式近几年更流行,因为:
- 支持 eBPF dataplane
- 性能好
- 云原生兼容性高
VXLAN ID(VNI)一般固定:4096
VXLAN 头大小固定(50 bytes),比 IPIP 多一点,但支持硬件 offload。
Calico 内置 IPAM,支持两种模式:
跟默认 CNI 一样,每个 Node 有固定 CIDR:
Node1 -> 10.244.1.0/24
Node2 -> 10.244.2.0/24
Calico 提供:
- multiple pools
- per-namespace
- 大CIDR拆小网段分配
- Auto-detection of interface
- Dual-stack IPv4/IPv6
你可以定义不同 IP 池分配给不同 namespace:
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
name: frontend
spec:
cidr: 10.100.0.0/16
natOutgoing: true
ipipMode: Always
Calico 支持两种策略:
| 类型 | 作用范围 | 功能 |
|---|---|---|
| NetworkPolicy(标准) | namespace 内 | L3/L4 控制 |
| GlobalNetworkPolicy(Calico 扩展) | 全集群 | L3/L4/L7 控制(企业版) |
例如只允许 frontend -> backend:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: allow-frontend
namespace: backend
spec:
podSelector:
matchLabels:
app: backend
ingress:
- from:
- namespaceSelector:
matchLabels:
team: frontend
全局级别,优先级更高:
apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
name: deny-all
spec:
selector: all()
types:
- Ingress
- Egress
可实现:
- 集群默认拒绝所有
- 再逐条开放白名单(Zero Trust)
Calico 从 v3.19 开始支持 eBPF。
优势:
- 性能高于 iptables
- 支持 XDP
- 无 kube-proxy(CEF-like)
- 更低延迟
- 更高 PPS
- 直接处理 NodePort & LoadBalancer
- NAT 流量可观测
如果你使用 K8s 1.33,强烈推荐启用 eBPF 模式:
CALICO_NETWORKING_BACKEND = "bpf"
Calico 每个节点都运行 BGP daemon(BIRD 或 GoBGP),广播:
- Pod /32 路由
- Node /24 路由(CIDR)
- Service ClusterIP(可选)
例如 Node1 给 Node2 广播:
10.244.1.5/32 via 192.168.1.101
Node2 安装到路由表后:
ip route add 10.244.1.5/32 via 192.168.1.101
| 功能 | 描述 |
|---|---|
| Multi-cluster | 多集群连接 |
| L7 Policy | 基于域名、HTTP 方法控制 |
| Compliance reports | 网络安全报表 |
| Enterprise eBPF | 全链路可观测 |
| Zero Trust Segmentation | 租户隔离、安全控制 |
Calico 与 Flannel 的区别?
| 项目 | Calico | Flannel |
|---|---|---|
| 模式 | L3 Routing | L2 Overlay |
| 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 安全 | NetworkPolicy | 无 |
| BGP | 支持 | 不支持 |
| eBPF | 支持 | 不支持 |
Calico 如何提高性能?
- 使用 BGP 模式
- 关闭 IPIP
- 打开 eBPF
- 使用 VXLAN offload
IPIP 与 VXLAN 区别?
| 模式 | IPIP | VXLAN |
|---|---|---|
| Header | 20 bytes | 50 bytes |
| 硬件 offload | 不支持 | 支持 |
| 性能 | 中 | 高 |
如果你要部署 高性能 + 安全 + 可观测 的 K8s 网络:
推荐配置:
- CNI:Calico
- Dataplane:eBPF
- Overlay:VXLAN
- Node networking:BGP RR(>200 节点)
- IPAM:Calico IPAM
- 策略:GlobalNetworkPolicy(零信任)
- 加密:WireGuard
Calico 之所以是最适合生产环境的 CNI,不是因为“能用”,而是因为:
- 性能强
- 功能全
- 安全性强
- 好调试
- 企业级能力完善