为什么 MetalLB 不能在第 2 层模式下提供真正的负载均衡功能?

为什么 MetalLB 不能在第 2 层模式下提供真正的负载均衡功能?

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 链接。如有必要,可以将实际工作转移到其他主机,只留下代理来终止前端连接。

相关内容