当前位置: 当前位置:首页 >系统运维 >Flannel MAC 地址冲突导致 Pod 跨节点通信异常 正文

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

2025-11-04 07:48:02 来源:多维IT资讯作者:域名 点击:277次

问题背景

客户在扩容 Kubernetes 节点后,地址导发现部分服务 Pod 跨节点通信异常,冲突表现为:

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

问题排查

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

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

复制# 查看所有节点上的异常 flannel 路由信息 kubectl get node -o yaml | grep -A3 flannel.alpha.coreos.com/backend-data1.2.

结果发现 多个节点的 flannel.1 接口的 VtepMAC 完全相同

复制flannel.alpha.coreos.com/backend-data: {"VtepMAC":"fe:22:77:eb:2f:a1"}1.

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

2️⃣ 查看物理网卡 MAC 地址是地址导否一致 复制ip link show enp1s01.

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

3️⃣ 进一步查看 flannel.1 接口 MAC 复制ip -d link show flannel.11.

可以看到 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=random1.2.3.4.5.6.

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

复制# 重启 systemd-networkd,或重启节点 systemctl restart systemd-networkd # 或重启 flannel 容器 docker restart flannel-xxxx1.2.3.4.

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

问题延申:FDB 表未同步导致通信异常

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

复制/sbin/bridge fdb show flannel.1 | grep <mac地址>1.

发现 FDB 表存在旧的 MAC -> IP 映射,且未及时更新,导致节点pod网络通过异常

此时执行:

复制# 重启 flannel 容器或服务,重新注册 FDB docker restart flannel-xxxx1.2.

问题解决

总结思路

检查项

内容

MAC 冲突

多节点 flannel.1 接口 MAC 是否一致

FDB 表

本地 FDB 映射是否含有错误记录

flannel 状态

是否在 VXLAN 模式、路由是否同步

节点创建方式

是否通过 VM 克隆,是否处理 machine-id

快速修复

重启 flannel 服务或容器

📌 建议

虚拟机克隆后建议清理 machine-id 并重新生成;使用 MACAddressPolicy=random 保证 overlay 网络接口唯一;定期巡检 flannel 路由表、FDB 表等底层数据;可使用 CNI 替代方案(如 Calico)更强的网络控制策略。b2b信息网
作者:应用开发
------分隔线----------------------------
头条新闻
图片新闻
新闻排行榜