Skip to the content.

MetalLB,多网卡环境有时候会无法访问

31 May 2023 - joy717

背景

k8s LB类型的service,在多网卡环境下,通过externalIP访问,有时候无法正常访问。

排查

经tcpdump抓包后发现,集群外访问不通的时候,此ip所在的节点有收到sync的请求包,但没有返回sync的响应包。

进一步发现,请求包的目的mac地址为"fa:c4:55:76:3e:01",即ip地址为172.32.4.114的eth1的网卡。与预期的不符合,应该为br_eth0的mac地址才对。

查看metallb的代码,发现metallb会将所有running的,带ip地址的网卡过滤出来,返回arp响应。这意味着收到的arp响应的客户端,有可能会获取到错误的mac地址。(即前面遇到的情况)

实际问题为:metallb无法判断哪张网卡才是他需要做响应的网卡。因此需要告知metallb相应的网卡信息。

解决

上metallb的github社区查询issue,发现有此问题的issue。https://github.com/metallb/metallb/issues/277

此问题在v0.13.6版本修复。

因此解决方法

1、可以将metallb升级到v0.13.6之后的版本(2022.11.1的最新版本为v0.13.7)

2、在旧版本的metallb代码上,做补丁,进行修改。增加一个网卡列表的参数,传给metallb,metallb在获取网卡mac地址时候,只针对该参数里的网卡做响应。