適用於 Kubernetes 叢集的 MetalLB 概觀
適用於:Azure 本機版本 23H2
當您設定 AKS Arc 叢集時,您需要一種方法,讓您的服務可在叢集外部存取。 此 LoadBalancer
類型非常適合此輔助功能,但外部IP仍擱置中。 已啟用 Azure Arc 的 MetalLB Kubernetes 擴充功能是一種工具,可讓您為應用程式和服務產生外部 IP。 已啟用 Arc 的 Kubernetes 叢集可以使用適用於已啟用 Azure Arc 的 Kubernetes 之 MetalLB 擴充功能,與 MetalLB 整合。
若要讓您的服務可在叢集外部存取,MetalLB 需要IP位址。 當建立服務時,MetalLB 會負責指派和釋放這些位址,但只會散發其設定集區中的IP。 當 MetalLB 將外部 IP 位址指派給服務時,它會通知叢集外部的網路此 IP 屬於叢集。 此通訊是使用ARP或 BGP 等標準網路協定來完成。
- 第 2 層模式 (ARP):在第 2 層模式中,叢集中的一個 K8s 節點會取得服務的擁有權,並使用標準位址探索通訊協定 (ARP for IPv4) 讓這些 IP 可在局域網路上連線。 從 LAN 的觀點來看,宣告機器只會有多個 IP 位址。
- BGP:在 BGP 模式中,叢集中的所有機器都會使用您控制的鄰近路由器建立 BGP 對等互連會話,並告訴這些路由器如何將流量轉送至服務 IP。 使用 BGP 可跨多個節點進行真正的負載平衡,以及由於 BGP 的原則機制而進行更細緻的流量控制。
MetalLB 有兩個元件:
- 控制器:負責為 的每個服務
type=loadbalancer
配置IP。 - 演講者:負責使用
ARP
或BGP
通訊協定來公告 IP。 為了滿足高可用性 (HA) 需求,喇叭部署是精靈集。
注意
- 說話者 Pod 會使用主機網路;亦即,其IP是節點IP,以便他們可以透過主機網路介面直接傳送廣播訊息。
- 控制器 Pod 是存在於叢集中任何節點的一般 Pod。
- 在ARP模式中,其中一個喇叭Pod會選取為領導者。 然後,它會使用 ARP 廣播訊息來公告 IP,並將 IP 系結至其所在的節點 MAC 位址。 因此,所有流量都會先叫用一個節點,然後 kube-proxy 會將它平均分散到服務的所有後端 Pod。
- 在 BGP 模式中,所有叢集節點都會與索引標籤中
BGP Peers
建立的所有 BGP 對等互連建立連線。BGP 對等是 TOR 交換器。 若要廣播 BGP 路由資訊,必須設定 BGP 對等互連,才能辨識叢集節點的 IP 和 ASN。 當您搭配 ECMP 使用 BGP 時(等於成本多重路徑),流量會平均在所有節點之間達到,因此達到真正的負載平衡。
比較 MetalLB L2 (ARP) 和 BGP 模式
使用 MetalLB 的 L2 和 BGP 模式之間的選擇取決於您的特定需求、網路基礎結構和部署案例:
層面 | L2 中的 MetalLB (ARP) 模式 | BGP 模式中的 MetalLB |
---|---|---|
概觀 | 在第 2 層模式中,一個 K8s 節點負責向局域網路發佈服務。 從網路的觀點來看,K8s 節點似乎已將多個IP位址指派給其網路介面。 | 在 BGP 模式中,叢集中的每個 K8s 節點都會建立與網路路由器的 BGP 對等互連會話,並使用該對等互連會話來公告外部叢集服務的 IP。 |
IP 位址指派 | MetallLB IP 位址池必須與 K8s 節點位於相同的子網中。 | MetallLB IP 位址池可以位於與 K8s 節點不同的網路中。 |
設定複雜度 | 低。 由於您在與 Kubernetes 節點相同的網路中提供 IP 位址,因此設定 MetalLB 時只需要指定 IP CIDR 或 IP 集區。 | 高。 設定 BGP 需要瞭解 BGP 通訊協定,並瞭解您的網路基礎結構。 |
延展性 | 限制為第 2 層網路,適用於小型至中型 K8s 部署。 | 適用於複雜的網路拓撲和大規模 K8s 部署。 |
與基礎結構網路的相容性 | 使用任何網路,但可能會導致大型 K8s 叢集中發生 ARP 泛濫,因為單一 IP 會用於所有服務,而服務的輸入頻寬僅限於單一節點的頻寬。 | 需要網路基礎結構中的 BGP 支援。 |
交通工程 | 對流量路由的控制有限。 | 使用 BGP 屬性對流量路由進行更細緻的控制。 |
外部連線能力 | 需要更多外部連線的組態。 | 使用 BGP 路由與外部網路提供順暢的連線。 |
常見問題集
可以跨 AKS Arc 叢集重複使用 MetalLB 實例嗎?
否,無法跨 AKS Arc 叢集重複使用 MetalLB。 MetalLB 會以 Kubernetes 叢集中的 Pod 的形式存在,而負載平衡器是自定義資源(CRS)。 您必須使用 Azure CLI、Azure 入口網站 或 Azure Resource Manager 範本來安裝 MetalLB Arc k8s 擴充功能,併為每個 AKS Arc 叢集建立負載平衡器。