Calico BGP模式是通过BGP协议将Kubernetes各节点的Pod网段动态通告,实现无Overlay的高性能三层网络。适用于需要与物理网络深度集成、追求极致性能和大规模集群的场景。

适用场景

  • 数据中心/企业内部网络与K8S集群互通
  • 大规模集群,追求低延迟/高吞吐
  • 与传统网络设备(如核心路由器)集成

Calico网络模式对比

特性BGP模式IPinIPVXLANWireGuard
封装IPinIPVXLAN可叠加
性能最高
跨子网需物理网络支持支持支持支持
安全性依赖物理网络无加密无加密强加密
复杂度

BGP(边界网关协议)是一种动态路由协议,广泛用于数据中心和运营商网络。Calico利用BGP自动通告各节点Pod网段,实现全网路由可达。

  • AS号:自治系统编号,用于标识网络边界
  • BGP Peer:对等体,节点间建立BGP连接交换路由
  • Route Reflector:简化大规模集群的BGP连接关系

Calico BGP架构如下图所示:

Calico BGP架构图
  1. 每个Node运行BGP Client(如BIRD),与其它Node或核心路由器建立BGP对等体。
  2. 各节点将本地Pod网段通告给全网。
  3. 数据包根据BGP路由表直接转发,无需Overlay封装。
  4. 可通过Route Reflector优化大规模集群的BGP连接。

(1)启用BGP

calicoctl patch felixconfiguration default --type='merge' -p '{"spec": {"bpfEnabled": false}}'

(2)配置BGP对等体

apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
  name: core-router
spec:
  peerIP: 192.168.100.1
  asNumber: 64512

(3)配置IP Pool(关闭Overlay)

apiVersion: projectcalico.org/v3
kind: IPPool
metadata:
  name: default-pool
spec:
  cidr: 10.244.0.0/16
  ipipMode: Never
  vxlanMode: Never
  natOutgoing: true
  nodeSelector: all()

(4)Route Reflector配置(可选)

apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
  name: rr-peer
spec:
  peerIP: 192.168.100.10
  asNumber: 64512
  nodeSelector: "has(role) && node.role == 'rr'"
注意:生产环境建议使用Route Reflector简化BGP连接。
  • 合理划分Pod网段,避免路由表过大
  • 使用Route Reflector减少Peer数量
  • 监控BGP会话状态,及时发现异常
  • 关闭不必要的Overlay封装
  • 配置合理MTU,防止分片
  • 检查BGP会话:calicoctl node status
  • 查看路由表:ip routebirdc show route
  • 确认Pod网段是否正确通告
  • 排查BGP建立失败、路由不通、收敛慢等问题
  • 分析日志定位异常
  1. 生产环境建议引入Route Reflector,避免全互联
  2. 与网络团队协作,合理分配AS号与网段
  3. 定期备份配置,开启BGP监控与告警
  4. 结合Calico网络策略提升安全性