目录
Please enable Javascript to view the contents

Flannel 版本与 5.15 内核不兼容导致跨节点 Pod 无法通信

 ·  ☕ 1 分钟

重要

Flannel v0.13.0 在 Linux 5.15 内核下,VXLAN 的 checksum offload 功能导致校验和计算错误,报文携带 bad udp cksum 被丢弃,跨节点 Pod 无法通信。

环境说明

  • OS: Ubuntu 22.04, 内核 5.15.0-79-generic
  • rke v1.2.6, K8s v1.19.8, canal (flannel v0.13.0 + calico)
  • 双节点:node-1 (10.42.0.0/24), node-2 (10.42.1.0/24)

1. 现象

场景结果
同节点 Pod 互 ping正常
跨节点 Pod 互 ping不通
宿主机 ping 本节点 Pod正常
宿主机 ping 其他节点 Pod不通

2. 排错过程

步骤命令结论
防火墙systemctl status ufw已关闭
安全组云控制台检查无限制
iptablessudo iptables -L无异常
路由route -nflannel 子网路由正常

抓包发现关键线索:

1
sudo tcpdump -vvvenX -i ens160 udp

报文包含 bad udp cksum 标记。

3. 根因

checksum-offload 将校验和计算交给网卡。VXLAN 模式下,某些内核版本与网卡驱动的 checksum offload 交互导致校验值计算错误,报文被丢弃。

canal 中跨节点通信通过 flannel VXLAN,节点内通过 calico——所以仅跨节点不通。

4. 处理

两种方案:

方案命令
关闭 VXLAN 网卡 checksum offloadethtool -K flannel.1 tx-checksum-ip-generic off
升级内核

参考

分享

Hex
作者
Hex
CloudNative Developer