又一次metallb lb ip不通问题排查
问题
某k8s集群基于metallb layer2模式实现了kubernetes得lb service,目前建立了几个lb service,发现有个别的不通
排查
-
首先在客户端查看arp表(
arp -a
),发现表里的mac地址和预期中的mac地址不符 -
安装arping(
apt install arping
),使用该工具看看arp response的情况(arping $IP
),发现对于该不通的lb ip,会有两条arp response,对应了两个mac地址。 -
进一步对比这两个mac地址后,发现有一个是预期内的mac,另一个是同一节点上的另一块网卡,最终不通是因为使用了这块预期外的网卡作为了目标网卡
分析
为什么会收到两个网卡的arp response?
这个环境是同事部署的,在给他报告了初步排查情况后,他说这个机器有一块网卡插了线,接通了交换机。
由于metallb layer2模式的原理,speaker启动后除了排除一些名字特殊的、明显不是真实网卡的虚拟网卡以外,会对监听到的arp request在所有网卡发送arp response。
如果不接线,那么多发的arp response无伤大雅。但是同时接通多块网卡到同一个交换机,那么就会收到多块网卡的arp response。
如果客户端学到的mac地址是错误的网卡(虽然是同一台机器的),那么数据包便会被丢弃,不会有回应,自然也就不通。
解决
把多余的网卡down掉,问题解决。
在分析metallb问题时,发现其官方网站的trouble shooting页面总结得非常到位,分门别类,层层递进,逻辑清晰,有操作有原理,适量适度,把握地非常好,简直是文档届楷模,值得学习。
参考
MetalLB, bare metal load-balancer for Kubernetes (universe.tf)
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。