為什麼 MetalLB 無法在二層模式下提供真正的負載平衡功能?

為什麼 MetalLB 無法在二層模式下提供真正的負載平衡功能?

MetalLB 的文檔指出:

在第 2 層模式下,服務 IP 的所有流量都會流向一個節點。

據我了解,這主要是由於以下事實:

一個節點承擔向本地網路通告服務的責任。

正如上述文件的其餘部分所提到的,這種行為意味著嚴格的限制。流量頻寬僅限於可以通過所選節點的流量。但這是由於 ARP 造成的嗎?

我可以想像消除此限制的解決方案是每個節點都有一個“揚聲器”。當部署一組新的 pod 和服務時,運行在運行新節點的節點上的揚聲器負責 ARP 公告。這樣,入站流量始終採用最佳路由。技術上可行嗎?

答案1

MetalLB 是正確的。玩 2 級尋址遊戲意味著只有一台主機可以同時接收單播流量。每個服務地址。

Say2001:db8:c0ba:4816::a是服務位址,目前指向乙太網路上的網路卡6E:17:C2:2E:F4:A4。該主機發生故障會觸發故障轉移。發生了一些鄰居發現,現在它指向不同的主機6E:17:C2:2E:E7:B8。沒有機會進行多路徑,HA 協定和單播工作負載對此來說太簡單了。當然可以有更多的服務地址,因此添加2001:db8:c0ba:4816::b可以轉到另一個可能未使用的主機的服務地址。

VRRP 或 PowerHA 叢集的使用者會熟悉這樣的主動/被動設定。除了 MetalLB 由於某種原因重新實現了他們自己的東西。

MetalLB BGP模式則不同,三層路由。如果為服務位址路由安裝多個下一跳,則 ECMP 成為可能。與設計比較使用 ECMP 的大型多層負載平衡器

每個服務 IP 一台活動主機可能不是問題,這取決於設計。主機可以擴展到相當大的規模,也許可以使用 25 Gb 連結。如果有必要,真正的工作可以轉移到其他主機,只留下一個代理來終止前端連線。

相關內容