在京东云(以及大多数主流公有云环境)上长期运行 Kubernetes 集群,如果必须二选一,结论非常明确:首选 Calico。
Flannel 在公有云上属于“能用但体验较差”的选项,而 Calico 是生产级、企业级的标准选择。下面从原理、公有云特性、长期稳定性三个维度拆解为什么这么选。
1. 核心差异:底层实现决定了上限
-
Flannel:
- 本质是一个简单粗暴的 Overlay 网络。它通常使用 VXLAN 模式,在每台节点上创建一个
flannel.1虚拟接口,通过封装数据包来实现跨主机通信。 - 它的优势是配置极简,几乎零学习成本;劣势是性能损耗大(双层封装/解封装),且缺乏对网络策略(Network Policy)的原生支持(需要额外组件如 kube-router 或单独部署 CNI 插件才能补全)。
- 在长连接、高并发场景下,VXLAN 的 MTU 问题、CPU 软中断压力会逐渐显现。
- 本质是一个简单粗暴的 Overlay 网络。它通常使用 VXLAN 模式,在每台节点上创建一个
-
Calico:
- 基于 BGP(边界网关协议) 或 IP-in-IP 路由模型。在公有云上,默认推荐 BGP 模式。
- 它不依赖 Overlay,而是让每个 Pod IP 直接路由到宿主机内核,利用 Linux 内核的路由表进行转发。这意味着数据平面无封装开销,性能接近物理直连。
- 原生支持 Network Policy,功能完整,符合 CNCF 标准。
2. 为什么在京东云(公有云)上 Calico 更稳?
A. 公有云的 VPC 限制与 BGP 优势
京东云的 VPC 底层已经具备成熟的三层路由能力。Calico 的 BGP 模式正是利用这一点:
- Flannel (VXLAN):所有流量都要经过隧道封装,再解封装。这不仅消耗 CPU,还容易因为 MTU 设置不当导致大包丢包。在长期高负载下,VXLAN 的 UDP 处理会成为瓶颈。
- Calico (BGP):Pod IP 被宣告到 VPC 的路由表中。其他节点通过 BGP 邻居学习到路由,直接通过物理网卡转发。没有封装开销,没有额外的虚拟接口干扰。在京东云这种大型 VPC 环境中,BGP 路由收敛速度快,路径最优。
B. 网络策略(Network Policy)的真实性能
如果你要求安全隔离(比如XX、XX类项目),必须启用 Network Policy。
- Flannel 本身不支持,需配合第三方方案,调试复杂,故障排查链路长。
- Calico 内置 iptables/IPVS 规则,性能稳定,且日志清晰。长期运行中,防火墙规则的冲突和性能抖动是常见痛点,Calico 的处理机制更成熟。
C. 长期运行的“隐形杀手”:MTU 与分片
VXLAN 增加 50 字节头部,极易触发 PMTUD(路径最大传输单元发现)失败,导致 TCP 连接卡顿或超时。这在长期运行中表现为间歇性网络抖动,极难排查。
Calico 的 BGP 模式天然规避了这个问题,只要你的底层 VPC MTU 设置正确(京东云默认通常是 1450 或 1500,需确保 Calico 配置匹配),就不会出现此类问题。
3. 什么情况下可以考虑 Flannel?
只有以下极端情况才考虑 Flannel:
- 集群规模极小(< 10 节点),且业务对网络延迟、吞吐量完全不敏感。
- 团队运维能力薄弱,无法处理 BGP 路由故障、iptables 规则膨胀等问题。
- 测试环境、开发沙箱,非生产用途。
⚠️ 注意:即使如此,也建议至少使用 Flannel 的
host-gw模式(而非 VXLAN),它在二层互通的网络中能提供更好的性能。但在京东云这类三层隔离的 VPC 中,host-gw往往不可用或受限,只能退而求其次用 VXLAN,这就回到了性能劣势。
4. 京东云实战建议
在京东云上部署 Calico,务必注意以下几点以避免“伪问题”:
-
MTU 对齐:
- 检查京东云 VPC 子网的 MTU 值(通常为 1450 或 1500)。
- 在 Calico DaemonSet 配置中设置
CALICO_IPV4POOL_MTU,确保其小于等于 VPC MTU。一般设为 1450 是安全值。 - 错误示例:VPC MTU=1450,Calico 默认 MTU=1500 → 大包必丢。
-
BGP 模式 vs IP-in-IP:
- 优先选择 BGP 模式。京东云支持 BGP 路由宣告,这是最佳实践。
- 如果因特殊合规或架构限制不能用 BGP,再选 IP-in-IP,但性能略低于纯 BGP。
-
资源预留:
- Calico 的
calico-node容器会占用一定 CPU 和内存用于维护路由表和 iptables 规则。在大规模集群(>100 节点)中,需监控node_exporter的netstat相关指标,确保没有因 conntrack 表满导致网络异常。
- Calico 的
-
升级与维护:
- Calico 版本迭代较快,建议跟随京东云托管 K8s 服务的兼容版本矩阵。不要随意手动升级 CNI 插件,除非有明确的 Bug 修复需求。
总结
| 维度 | Flannel (VXLAN) | Calico (BGP) |
|---|---|---|
| 性能 | 中等,有封装开销 | 高,接近物理直连 |
| 稳定性 | 长期高负载易现 MTU/拥塞问题 | 稳定,路由收敛快 |
| 安全性 | 需额外组件支持 Network Policy | 原生支持,功能完整 |
| 运维复杂度 | 低 | 中(需关注 BGP 状态) |
| 公有云适配性 | 差 | 优秀 |
最终建议:
在京东云生产环境,坚定不移地使用 Calico。它是经过大规模验证的生产级 CNI,能有效避免长期运行中的网络抖动、性能衰减和安全策略缺失问题。Flannel 更适合本地实验室或边缘轻量场景,不适合作为云原生生产集群的首选。
云技术博客