☰
Kubernetes Calico 网络模式怎么选?IPIP、BGP、VXLAN、eBPF 对比
2026/9/29 7:36:14 网站建设 项目流程

本文介绍 Calico 常见网络模式,包括 IPIP、BGP、VXLAN、CrossSubnet 以及 eBPF 数据面,并结合 IPPool 配置说明如何查看和切换模式。

Calico 是一个开源的 CNI 解决方案,主要用于 Kubernetes 和 Docker 环境,提供高性能、高可扩展性的网络和网络安全策略。

在 Calico 中,不同的网络模式决定了 Pod 跨节点通信时采用何种转发方式:是直接路由、IP-in-IP 封装,还是 VXLAN 封装。不同模式在性能、底层网络依赖和适用场景上差异较大。

一、Calico 常见网络模式对比

模式封装方式性能适用场景依赖条件
IPIPIP-in-IP 封装中公有云(AWS、GCP 等)底层网络允许 IP-in-IP
BGP无封装,纯路由高裸金属、私有云网络支持 BGP
VXLANVXLAN 封装中受限网络、防火墙限制场景内核支持 VXLAN
CrossSubnet同子网直连,跨子网封装较高混合云、跨子网环境支持 BGP 路由
eBPF无封装,eBPF 加速极高高性能需求Linux 4.18+,内核支持 eBPF

说明:eBPF 更准确地说是 Calico 的一种数据面实现,而不是单纯的封装模式。它可以和 Kubernetes Service 转发等能力结合使用。

二、查看当前 Calico 网络模式

Calico 的网络模式主要通过IPPool资源中的ipipMode和vxlanMode字段控制。

查看命令:

kubectl get ippool -o yaml

如果已经安装calicoctl,也可以使用:

calicoctl get ippool -o wide

示例输出整理后如下:

apiVersion: projectcalico.org/v3 kind: IPPool metadata: name: default-ipv4-ippool creationTimestamp: "2024-11-29T01:39:18Z" resourceVersion: "1000" uid: c88c4c71-e0a1-49f1-b020-8df6700a975f spec: allowedUses: - Workload - Tunnel blockSize: 26 cidr: 10.119.0.0/22 ipipMode: Never natOutgoing: true nodeSelector: all() vxlanMode: Never

关键字段说明:

字段说明
cidrCalico 分配给 Pod 的地址池
ipipModeIPIP 模式,可选Always、CrossSubnet、Never
vxlanModeVXLAN 模式,可选Always、CrossSubnet、Never
natOutgoingPod 访问集群外时是否做 SNAT
blockSize每个节点分配的地址块大小
nodeSelectorIPPool 适用的节点范围

三、IPIP 模式

IPIP 模式通过 IP-in-IP 隧道封装跨节点流量,把原始 IP 包封装在一个外层 IP 包中。

配置示例:

spec: cidr: 10.119.0.0/22 ipipMode: Always vxlanMode: Never natOutgoing: true

特点:

  • 使用 IP-in-IP 封装,需要底层网络允许 IP-in-IP 协议。
  • 相比 BGP 多一层封装,性能中等。
  • 配置简单,适合公有云等不方便使用 BGP 的环境。
  • 常见于 AWS、GCP 等云平台环境。

四、BGP 模式

BGP 模式下 Calico 不进行隧道封装,而是通过 BGP 发布 Pod 路由,让节点之间直接路由 Pod 网段。

配置示例:

spec: cidr: 10.119.0.0/22 ipipMode: Never vxlanMode: Never natOutgoing: true

特点:

  • 无封装,几乎没有额外隧道开销,性能高。
  • 需要底层网络支持 BGP,或者能够与 Calico 建立 BGP 邻居。
  • 适合裸金属、私有云以及网络可控的数据中心环境。
  • 如果底层网络无法识别 Pod CIDR,通常需要结合natOutgoing: true使用。

五、VXLAN 模式

VXLAN 模式通过 VXLAN 隧道封装跨节点流量,是 Overlay 网络中比较常见的一种方式。

配置示例:

spec: cidr: 10.119.0.0/22 ipipMode: Never vxlanMode: Always natOutgoing: true

特点:

  • 使用 VXLAN 封装,通常依赖 UDP 4789 端口。
  • 适合防火墙限制 IP-in-IP 或不允许 BGP 的环境。
  • 相比 IPIP,包头开销更大一些。
  • 需要内核支持 VXLAN。

六、CrossSubnet 混合模式

CrossSubnet 也叫跨子网模式,可以理解为“同子网直连、跨子网封装”。

在相同子网内,节点之间直接通过 BGP 路由通信;跨子网时,再使用 IPIP 或 VXLAN 封装。

IPIP CrossSubnet 示例:

spec: cidr: 10.119.0.0/22 ipipMode: CrossSubnet vxlanMode: Never natOutgoing: true

VXLAN CrossSubnet 示例:

spec: cidr: 10.119.0.0/22 ipipMode: Never vxlanMode: CrossSubnet natOutgoing: true

适用场景:

  • 混合云环境。
  • 集群节点分布在同一子网的不同网段。
  • 希望减少同子网通信的封装开销。

注意:CrossSubnet 不是独立的封装协议,而是 IPIP 或 VXLAN 的一种工作模式。

七、eBPF 数据面

eBPF 模式使用 eBPF 技术加速数据面转发,通常用于对性能和可观测性要求较高的场景。

eBPF 不是一种封装协议,它主要替换或增强 Calico 的数据面转发能力,在某些场景下可以替代 kube-proxy。

如果使用 Calico Operator 安装,可以通过Installation资源切换数据面:

kubectl patch installation default --type=merge -p '{"spec":{"calicoNetwork":{"linuxDataplane":"BPF"}}}'

查看配置:

kubectl get installation default -o yaml | grep linuxDataplane

特点:

  • 性能高,转发路径短。
  • 对内核版本有要求,一般需要 Linux 4.18+。
  • 不同 Calico 版本和 Kubernetes 版本的兼容性不同,切换前需要确认官方文档。
  • 生产环境切换 eBPF 前,建议先在测试环境验证。

另外,原文中记录了一条 KubeControllersConfiguration 的 patch 命令,修正后的calicoctl语法如下:

calicoctl patch kubecontrollersconfiguration default \ --patch='{"spec":{"controllers":{"node":{"hostEndpoint":{"autoCreate":"Enabled"}}}}}'

注意:这条命令用于调整 Calico 控制器配置,并不等同于开启 eBPF 数据面,两者不要混淆。

八、如何修改 Calico 网络模式

可以通过编辑IPPool修改网络模式。

kubectl edit ippool default-ipv4-ippool

例如,将 IPIP 改为 Always:

spec: ipipMode: Always vxlanMode: Never

修改后查看 IPPool:

calicoctl get ippool -o wide

检查 Calico 节点和 Pod 状态:

kubectl get pods -A -o wide calicoctl node status

注意:修改网络模式可能会影响现有 Pod 的跨节点通信,生产环境建议在维护窗口内操作,并提前做好验证和回滚方案。

九、模式选型建议

场景推荐模式
公有云、底层不允许 BGPIPIP
裸金属、私有云、网络可控BGP
防火墙受限、不允许 IP-in-IPVXLAN
同子网优先直连、跨子网封装IPIP/VXLAN CrossSubnet
高性能、内核版本满足要求eBPF

实际选择时建议重点确认三点:

  1. 底层网络是否允许 IP-in-IP 或 VXLAN。
  2. 网络设备是否支持 BGP,以及能否与 Calico 建立邻居。
  3. 当前内核版本、Calico 版本和 Kubernetes 版本是否兼容目标模式。

十、总结

Calico 提供了 IPIP、BGP、VXLAN、CrossSubnet 以及 eBPF 等多种数据转发方式:

  • 想要配置简单、兼容公有云,可以选择 IPIP。
  • 追求高性能、网络可控,可以选择 BGP。
  • 网络受限、防火墙严格,可以选择 VXLAN。
  • 同子网直连、跨子网封装,可以选择 CrossSubnet。
  • 追求高性能和先进数据面能力,可以评估 eBPF。

最终选择哪种模式,需要结合底层网络能力、性能要求和运维复杂度综合判断。


如果这篇文章对你有帮助,欢迎点赞、收藏、评论交流。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询