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 最佳实践》,基于 Kubernetes ≥1.33 + Calico ≥3.27(含 eBPF 模式),包含网络设计、性能、安全、IPAM、Policy、Troubleshooting、监控、生产参数等内容。

这是企业级版本,不讲废话,只给可复制到生产环境的最佳实践。

🚀 Kubernetes + Calico 最佳实践(K8s 1.33 / Calico 3.27+)

1. CNI 网络模型选型(最关键)

Calico 支持多种网络模式,但要选正确:

🔥 最佳选型(强烈推荐)

Dataplane:eBPF(替代 iptables)

Overlay:VXLAN + eBPF NAT

IPAM:Calico IPAM

Routing:无 BGP(除非裸金属)

理由:

模式 性能 可观测性 兼容性 推荐
VXLAN + eBPF ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ 全云厂商支持 ✓✓✓✓✓
BGP 无封装 ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ 仅裸金属/自建 IDC ✓✓✓✓
IPIP ⭐⭐⭐ ⭐⭐ 旧机器 不推荐
纯 iptables ⭐⭐ 兼容最广 不推荐

eBPF 对 K8s 1.33 完美支持

能替代 kube-proxy,并大幅提升性能。

2. Calico 安装最佳实践

2.1 使用官方 manifest(推荐)

使用官方 operator,让升级和管理更可控:

kubectl apply -f https://docs.projectcalico.org/archive/v3.27/manifests/calico.yaml

2.2 启用 eBPF 模式(性能翻倍)

修改 ConfigMap:

apiVersion: operator.tigera.io/v1
kind: Installation
spec:
  calicoNetwork:
    linuxDataplane: "BPF"
    mtu: 1450
    encap: VXLAN

优势:

  • 无 kube-proxy
  • NAT/NodePort/LB 全走 BPF fast path
  • 高 QPS 服务性能提升 30%–200%

3. IP 地址管理 IPAM 最佳实践

避免使用 k8s podCIDR

必须使用 Calico IPAM(默认)

3.1 设置多个网段池(可按业务/环境划分)

示例:

  • frontend -> 10.10.0.0/16
  • backend -> 10.20.0.0/16
  • job/ci -> 10.30.0.0/16
apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: frontend-pool
spec:
  cidr: 10.10.0.0/16
  ipipMode: Never
  vxlanMode: Always
  natOutgoing: true

避免把所有 Pod 都塞进同一个网段(难 debug 和隔离)。

4. 性能优化最佳实践

4.1 MTU 设置

VXLAN MTU 一般为:

原生 MTU 1500 -> VXLAN -> 1450

Calico 默认自动检测,但建议明确写:

mtu: 1450

4.2 打开 eBPF(最佳性能)

eBPF 模式替代 kube-proxy

NodePort、ClusterIP NAT 都走 BPF fast path。

4.3 关闭 SNAT fallback(减少 NAT)

在跨节点访问不需要 SNAT 时:

spec:
  calicoNetwork:
    nodeAddressAutodetectionV4:
      firstFound: true
    linuxDataplane: "BPF"
    autoDetectBackend: false

5. Pod ↔ Pod 最佳链路

Pod ↔ Pod 最佳实践路径:

eBPF dataplane:

  • 规则在 BPF maps
  • conntrack 优化巨大

VXLAN overlay:

  • 兼容所有云厂商
  • 硬件 offload 高性能环境最快

最佳组合:

VXLAN + eBPF + 无 kube-proxy

6. Service(ClusterIP/NodePort/LB)最佳实践

6.1 禁用 kube-proxy(eBPF 自动处理)

Calico eBPF 模式可直接替代 kube-proxy:

linuxDataplane: BPF

ClusterIP 和 NodePort 都走 BPF,极大提高性能。

6.2 NodePort 调优(高并发)

设置 conntrack:

net.netfilter.nf_conntrack_max=2621440
net.netfilter.nf_conntrack_buckets=655360

7. NetworkPolicy 最佳实践

Calico 的 NP 能实现 Zero Trust。

强烈推荐默认拒绝策略

在 Namespace 使用:

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

分业务 namespace 使用 allow-only 策略

示例:只允许 frontend -> backend

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: allow-frontend
  namespace: backend
spec:
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          app: frontend

8. 生产环境常见错误 & 避坑

8.1 不要混用多个 CNI

不能在同一个集群:

  • 安装 Calico 后又安装 Flannel
  • 原来有 CNI,不干净就装 Calico

-> 直接导致 Pod 无网络、路由混乱、CNM 冲突。

8.2 不要让 kube-proxy + bpf 同时工作

eBPF 模式下 kube-proxy 必须关闭。

8.3 MTU 不统一 = 全集群随机丢包

调试最容易忽略:MTU

8.4 BGP 模式要慎用(云厂商不支持)

仅推荐:

  • 裸金属
  • 自建机房
  • 云厂商开启 VPC route table 支持 BGP 时

9. Calico 监控最佳实践

生产环境必须监控:

| 项目 | 说明 | | felix CPU | 规则过多会爆 | | BPF maps | 溢出会中断网络 | | VXLAN 封包 PPS | 常见瓶颈 | | conntrack | NodePort 高并发必须 | | IPPool 余量 | IP 用完 Pod 全挂

推荐工具:

  • Prometheus + calico-exporter
  • Grafana Calico Dashboard(官方)

10. Troubleshooting 最佳实践

10.1 查看 Pod 路由

ip route

10.2 查看 VXLAN tunnel

ip -d link show vxlan.calico

10.3 查看 IPPool

kubectl get ippool

10.4 Calico node logs

kubectl logs -n calico-system -l k8s-app=calico-node

11. Kubernetes + Calico 最佳生产配置总结

分类 推荐配置
Dataplane eBPF
Overlay VXLAN
节点路由 无 BGP(云) / BGP(裸金属)
kube-proxy 关闭
MTU 1450
IPAM Calico IPAM,多 IP pool
策略 Zero Trust(default deny + allow)
加密 WireGuard
监控 felix、ippool、vxlan、conntrack