这MetalLB 文档指出:
在第 2 层模式下,服务 IP 的所有流量都会流向一个节点。
据我了解,这主要是因为:
一个节点承担向本地网络宣传服务的责任。
正如该文档其余部分所述,此行为意味着严重的限制。流量带宽仅限于可以通过选定节点的带宽。但这是否如文档中所述是由于 ARP 造成的?
我能想到的一种消除此限制的解决方案是每个节点有一个“扬声器”。部署一组新的 pod 和服务时,运行在运行新节点的节点上的扬声器负责 ARP 公告。这样,入站流量始终采用最佳路由。这在技术上可行吗?
答案1
MetalLB 是正确的。玩 2 级寻址游戏意味着一次只能有一台主机接收单播流量。每个服务地址。
假设2001:db8:c0ba:4816::a
是服务地址,当前指向以太网的 NIC 6E:17:C2:2E:F4:A4
。该主机发生故障会触发故障转移。发生一些邻居发现,现在它指向具有 的不同主机6E:17:C2:2E:E7:B8
。没有机会进行多路径,HA 协议和单播工作负载对此来说太简单了。当然可以有更多的服务地址,因此添加2001:db8:c0ba:4816::b
可以转到另一个可能未使用的主机的服务地址。
此类主动/被动设置对于 VRRP 或 PowerHA 集群的用户来说并不陌生。但 MetalLB 出于某种原因重新实现了自己的功能。
MetalLB BGP 模式不同,为第 3 层路由。如果为服务地址路由安装了多个下一跳,则 ECMP 成为可能。与以下设计相比使用 ECMP 的大型多层负载均衡器。
根据设计,每个服务 IP 一个活动主机可能不是问题。主机可以扩展相当大,可能具有 25 Gb 链接。如有必要,可以将实际工作转移到其他主机,只留下代理来终止前端连接。