Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Kubernetes Calico

下面是一份 Kubernetes Calico 最详细介绍(基于 K8s 1.33 最新认知),涵盖架构、工作原理、组件、网络策略、BGP、IPIP/VXLAN、企业特性等,全程用工程师视角写,帮助你在实际集群中落地。

🚀 Kubernetes Calico 详细介绍(基于 Kubernetes ≥1.33)

Calico 是目前 Kubernetes 最主流的 CNI 插件之一,以高性能、可观测性强、企业特性丰富而著称。

它不是简单的 Pod 网络方案,而是一套 L3 网络、BGP 路由、网络策略执行、跨集群通信、安全合规的大型网络平台。

1. 什么是 Calico?

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)

2. Calico 架构组成

Calico 主要组件:

2.1 calico-node(必备)

DaemonSet,每个节点一个。它负责:

  • 把 CNI 网络插入 Pod(CNI 插件)
  • BGP daemon:分发 /32 Pod 路由
  • 设置 iptables/eBPF
  • 设置 IPAM(Pod IP 分配)
  • 维护 overlay 隧道:IPIP/VXLAN/WireGuard

2.2 Felix(calico-felix)

Felix 是 Calico 的核心控制面代理,负责:

  • 网络策略 -> iptables/eBPF 规则
  • 路由表管理
  • 隧道端点管理

是 Calico 最重要的进程。

2.3 Typha(可选)

为大规模集群(>200 nodes)减少 Felix 与 etcd/K8s API 的连接压力。

相当于一个 fan-out aggregator,让 Felix 不直接读 API,大幅减少 watch 连接。

2.4 BGP Route Reflector(可选)

当集群节点规模增大,节点之间的 Full-mesh BGP 成本会很高,因此可以部署 RR。

3. Calico 网络模式详解

Calico 最大特点就是网络模式灵活。下面是你实际工程中最常用的 3 种模式。

3.1 部署模式:BGP(无 overlay)🔥推荐

特点:性能最高

网络走三层路由,不封装:

Pod -> Node -> Node -> Pod

Linux 路由直接转发,延迟最小。

适用场景

  • 裸金属机房
  • 云主机具备固定路由能力
  • 腾讯云 TKE 高性能网络
  • 阿里云 ACK Pro

优点

  • 零封装,性能最高
  • 路由可控
  • 运维可观测性强

3.2 部署模式:IPIP overlay

Calico 默认模式就是 IPIP。

特点:

Pod -> NodeA(IPIP 封包)-> NodeB 解包 -> Pod

节点之间走 IPIP 隧道。

适用于:

  • 没有 BGP 能力的通用环境
  • 多节点跨子网

但性能一般(比 VXLAN 更低一点)。

3.3 部署模式:VXLAN overlay(常用)

Calico 的 VXLAN 模式近几年更流行,因为:

  • 支持 eBPF dataplane
  • 性能好
  • 云原生兼容性高

VXLAN ID(VNI)一般固定:4096

VXLAN 头大小固定(50 bytes),比 IPIP 多一点,但支持硬件 offload。

4. IPAM(Pod 网络 IP 分配)

Calico 内置 IPAM,支持两种模式:

4.1 Kubernetes podCIDR 模式(host-local)

跟默认 CNI 一样,每个 Node 有固定 CIDR:

Node1 -> 10.244.1.0/24
Node2 -> 10.244.2.0/24

4.2 Calico IPAM(更强大)

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

5. Calico 网络策略(Policy)安全体系

Calico 支持两种策略:

类型 作用范围 功能
NetworkPolicy(标准) namespace 内 L3/L4 控制
GlobalNetworkPolicy(Calico 扩展) 全集群 L3/L4/L7 控制(企业版)

5.1 标准 NetworkPolicy

例如只允许 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

5.2 Calico GlobalNetworkPolicy(企业常用)

全局级别,优先级更高:

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: deny-all
spec:
  selector: all()
  types:
  - Ingress
  - Egress

可实现:

  • 集群默认拒绝所有
  • 再逐条开放白名单(Zero Trust)

6. eBPF dataplane(新趋势)

Calico 从 v3.19 开始支持 eBPF。

优势:

  • 性能高于 iptables
  • 支持 XDP
  • 无 kube-proxy(CEF-like)
  • 更低延迟
  • 更高 PPS
  • 直接处理 NodePort & LoadBalancer
  • NAT 流量可观测

如果你使用 K8s 1.33,强烈推荐启用 eBPF 模式

CALICO_NETWORKING_BACKEND = "bpf"

7. Calico 的 BGP 原理

Calico 每个节点都运行 BGP daemon(BIRD 或 GoBGP),广播:

  • Pod /32 路由
  • Node /24 路由(CIDR)
  • Service ClusterIP(可选)

7.1 Kubernetes 内部 BGP

例如 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

8. 高级特性(Calico Enterprise)

功能 描述
Multi-cluster 多集群连接
L7 Policy 基于域名、HTTP 方法控制
Compliance reports 网络安全报表
Enterprise eBPF 全链路可观测
Zero Trust Segmentation 租户隔离、安全控制

9. Calico 总结

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,不是因为“能用”,而是因为:

  • 性能强
  • 功能全
  • 安全性强
  • 好调试
  • 企业级能力完善