0%

节点重启flannel网络不通问题排查记录

问题现象

k8s集群中有一台机器重启了,重启后在这台节点ping其他机器的pod ip都不通。

抓ping的包可以看到只有request的,正常情况是有reply的。

tcpdump -i flannel.1 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on flannel.1, link-type EN10MB (Ethernet), capture size 262144 bytes
22:28:45.852513 IP 10.233.65.0 > 10.233.64.0: ICMP echo request, id 12, seq 48, length 64
22:28:46.872698 IP 10.233.65.0 > 10.233.64.0: ICMP echo request, id 12, seq 49, length 64
22:28:47.896618 IP 10.233.65.0 > 10.233.64.0: ICMP echo request, id 12, seq 50, length 64
22:28:49.851093 IP 10.233.65.0 > 10.233.64.0: ICMP echo request, id 13, seq 1, length 64
22:28:50.872665 IP 10.233.65.0 > 10.233.64.0: ICMP echo request, id 13, seq 2, length 64

NC命令测试,问题节点启动UDP监听

# 启动udp监听
nc -u -l -p 12345 
# 抓包
tcpdump -i flannel.1 port 12345

正常节点发送udp报文

echo "test"| nc -u 10.233.64.0  12345

此时后台抓包可以看到有报文过来,但是nc控制台无任何显示。

问题解决

  1. 网上搜很多是云平台安全组策略问题,这可能是一种情况,但是我这里安全组策略都是开通的。

  2. 学习下Flannel网络模式之VXLAN
    文中提到每个节点都会保存Routing TableARP TableFDB Table,然后我在所有节点上都查询了这些表,

# 查询route
route -n

# 查询ARP
ip neigh | grep flannel

# 查询 FDB
bridge fdb show | grep flannel.1

发现别的节点 ARP 表和 FDB 表保存的重启节点的 Flannel.1 网卡的 MAC 地址不对。更新MAC地址:

# 删除FDB命令:bridge fdb del <MAC地址> dev <接口> dst <目标IP>
bridge fdb del 46:83:71:f7:d7:69 dev flannel.1 dst 10.201.112.29
# 新增:bridge fdb add <MAC地址> dev <接口> dst <目标IP>
bridge fdb add 46:83:71:f7:d7:69 dev flannel.1 dst 10.201.112.29

# 删除ARP
ip neigh del 10.233.64.0 dev flannel.1
# 新增
ip neigh add 10.233.64.0 lladdr f2:b5:5e:29:23:55 dev flannel.1 nud permanent
# 注意:删除ARP后可能会自动添加一个,导致新增失败,RTNETLINK answers: File exists,可以将删除和新增放同一个命令执行。
ip neigh del 10.233.64.0 dev flannel.1 && ip neigh add 10.233.64.0 lladdr 0a:9c:93:d8:1c:bd dev flannel.1 nud permanent

然后测试ping别的机器POD IP,问题解决。