当前位置: 首页 > web >正文

Flannel MAC地址冲突导致Pod 跨节点通信异常

问题背景
客户在扩容 Kubernetes 节点后,发现部分服务 Pod 跨节点通信异常,表现为:

• Pod 间通信间歇性失败;
• 某些业务服务异常或响应慢;
• 怀疑是网络问题引起的。

问题排查
1️⃣ 初步排查网络路由信息

我们先检查 flannel 的路由信息是否完整,执行如下命令查看:

# 查看所有节点上的 flannel 路由信息kubectl get node -o yaml | grep -A3 flannel.alpha.coreos.com/backend-data
结果发现 多个节点的 flannel.1 接口的 VtepMAC 完全相同:flannel.alpha.coreos.com/backend-data: '{"VtepMAC":"fe:22:77:eb:2f:a1"}'

🔍 问题浮现 —— MAC 地址冲突!

2️⃣ 查看物理网卡 MAC 地址是否一致

ip link show enp1s0

不同节点的物理网卡 MAC 地址是不同的,说明冲突不在物理网卡层面。

3️⃣ 进一步查看 flannel.1 接口 MAC

ip -d link show flannel.1
可以看到 flannel.1 接口在多个节点上的 MAC 地址是一致的。

问题原因
💡 客户的节点是通过 KVM 克隆创建的虚拟机,未对系统级唯一标识(如 /etc/machine-id)做处理,导致 MAC 地址生成逻辑一致,flannel 默认使用静态策略(非随机)生成 MAC 地址,从而出现冲突。

由于 flannel 使用 VXLAN 建立 overlay 网络,VTEP MAC 地址用于 VXLAN 建隧道,一旦多个节点的 MAC 相同,会导致 FDB 表异常,转发路径错误,从而出现通信失败。

四、解决方案
方式一:让 flannel 接口 MAC 地址随机生成

使用 systemd 的 .link 文件强制设置接口 MAC 策略为随机:

# /etc/systemd/network/10-flannel.1.link
[Match]
OriginalName=flannel.1[Link]
MACAddressPolicy=random

然后执行以下操作使配置生效:

# 重启 systemd-networkd,或重启节点
systemctl restart systemd-networkd# 或重启 flannel 容器
docker restart flannel-xxxx

这样每次启动都会为 flannel.1 分配一个不同的随机 MAC,避免冲突。

问题延申:FDB 表未同步导致通信异常
由于MAC地址相同,还会导致fdb表异常,发现某节点无法访问新增节点的 Pod 网络,进一步排查:

/sbin/bridge fdb show flannel.1 | grep <mac地址>
发现 FDB 表存在旧的 MAC -> IP 映射,且未及时更新,导致节点pod网络通过异常

此时执行:

# 重启 flannel 容器或服务,重新注册 FDB
docker restart flannel-xxxx

问题解决

总结思路
在这里插入图片描述

📌 建议
• 虚拟机克隆后建议清理 machine-id 并重新生成;
• 使用 MACAddressPolicy=random 保证 overlay 网络接口唯一;
• 定期巡检 flannel 路由表、FDB 表等底层数据;
• 可使用 CNI 替代方案(如 Calico)更强的网络控制策略。

http://www.xdnf.cn/news/10507.html

相关文章:

  • 6.运算放大器—增益带宽积(六)
  • __STDC_VERSION__
  • 路由策略与路由控制
  • Linux系统配置网络优先级
  • Wavelib 库的核心属性、方法
  • Sa-Token 同端登录冲突检测实战
  • 箱式不确定集
  • Baklib加速企业AI数据治理实践
  • AtCoder Beginner Contest 399题目翻译
  • 前端面经 响应式布局
  • 2023ICPC杭州题解
  • 文档核心结构优化(程序C++...)
  • TensorFlow深度学习实战(19)——受限玻尔兹曼机
  • seq2seq 视频截图
  • 深度学习篇---人脸识别中的face-recognition库和深度学习
  • 【Canvas与色彩】八彩大风车
  • springboot-响应接收与ioc容器控制反转、Di依赖注入
  • nt!MiDispatchFault函数里面的nt!IoPageRead函数分析和nt!MiWaitForInPageComplete函数分析
  • URLDNS利用链剖析
  • latex figure Missing number, treated as zero. <to be read again>
  • mybatis01
  • 3、禁止树莓派屏幕休眠,设置树莓派屏幕常亮
  • VisionPro —— 不规则胶路检测
  • Codeforces Round 1028 (Div. 2) C. Gellyfish and Flaming Peony
  • java synchronized关键字用法
  • STM32Cubemx-H7-17-麦克纳姆轮驱动
  • 关于神经网络中的梯度和神经网络的反向传播以及梯度与损失的关系
  • 用Python打开不同联类型的文件
  • 【xmb】】内部文档148344599
  • 大数据学习(126)-窗口函数范围