Kubernetes クラスター用の MetalLB の概要
適用対象: Azure Local バージョン 23H2
AKS Arc クラスターを設定するときは、クラスターの外部でサービスにアクセスできるようにする方法が必要です。 LoadBalancer
の種類は、このアクセシビリティに最適ですが、外部 IP は保留中のままです。 Azure Arc 対応 Kubernetes 用 MetalLB の extension は、アプリケーションとサービスの外部 IP を生成できるツールです。 Arc 対応 Kubernetes クラスターは、Azure Arc 対応 Kubernetes 用 MetalLB の拡張機能を使用してMetalLB と統合できます。
クラスターの外部でサービスにアクセスできるようにするには、MetalLB に IP アドレスが必要です。 MetalLB では、サービスの作成時に必要に応じてこれらのアドレスの割り当てと解放が行われますが、配布されるのは、構成済みのプール内にある IP のみです。 MetalLB は、外部 IP アドレスをサービスに割り当てると、クラスターの外部のネットワークに、この IP がクラスターに属していることを通知します。 この通信は、ARP や BGP などの標準的なネットワーク プロトコルを使用して行われます。
- レイヤー 2 モード (ARP): レイヤー 2 モードでは、クラスター内の 1 つの K8s ノードがサービスの所有権を取得し、標準アドレス検出プロトコル (IPv4 の場合は ARP) を使用して、それらの IP をローカル ネットワーク上で到達可能にします。 LAN の観点からは、アナウンス マシンには複数の IP アドレスが含まれるだけです。
- BGP: BGP モードでは、クラスター内のすべてのマシンが、制御する近くのルーターとの BGP ピアリング セッションを確立し、それらのルーターにトラフィックをサービス IP に転送する方法を指示します。 BGP を使用すると、複数のノード間での真の負荷分散と、BGP のポリシー メカニズムによるきめ細かなトラフィック制御が可能になります。
MetalLB には、次の 2 つのコンポーネントがあります。
- コントローラー:
type=loadbalancer
の各サービスに IP を割り当てる役割を担います。 - 講演者:
ARP
またはBGP
プロトコルを使用して IP をアドバタイズする責任があります。 高可用性 (HA) の要件を満たすために、スピーカーのデプロイはデーモンセットです。
Note
- スピーカー ポッドはホスト ネットワークを使用します。つまり、ホスト ネットワーク インターフェイスを介してブロードキャスト メッセージを直接送信できるように、その IP はノード IP です。
- コントローラー ポッドは、クラスター内の任意のノードに存在する通常のポッドです。
- ARP モードでは、スピーカー ポッドの 1 つがリーダーとして選択されます。 その後、ARP ブロードキャスト メッセージを使用して IP をアドバタイズし、その IP をノードの MAC アドレスにバインドします。 したがって、すべてのトラフィックが最初に 1 つのノードにヒットし、kube-proxy によってサービスのすべてのバックエンド ポッドに均等に分散されます。
- BGP モードでは、すべてのクラスター ノードが、
BGP Peers
タブで作成されたすべての BGP ピアとの接続を確立します。通常、BGP ピアは TOR スイッチです。 BGP ルーティング情報をブロードキャストするには、クラスター ノードの IP と ASN を認識するように BGP ピアを構成する必要があります。 ECMP (等コスト MultiPath) で BGP を使用すると、すべてのノードでトラフィックが均等にヒットするため、真の負荷分散が実現されます。
MetalLB L2 (ARP) モードと BGP モードを比較する
MetalLB での L2 モードと BGP モードの選択は、特定の要件、ネットワーク インフラストラクチャ、およびデプロイ シナリオによって異なります。
特徴 | L2 (ARP) モードの MetalLB | BGP モードの MetalLB |
---|---|---|
概要 | レイヤー 2 モードでは、1 つの 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 デプロイに適しています。 |
インフラストラクチャ ネットワークとの互換性 | すべてのネットワークで動作しますが、すべてのサービスに 1 つの IP が使用され、サービスのイングレス帯域幅が 1 つのノードの帯域幅に制限されるため、大規模な K8s クラスターで ARP フラッディングが発生する可能性があります。 | ネットワーク インフラストラクチャでの BGP サポートが必要です。 |
交通工学 | トラフィック ルーティングの制限付き制御。 | BGP 属性を使用してトラフィック ルーティングをきめ細かく制御します。 |
外部接続 | 外部接続に対してより多くの構成が必要です。 | BGP ルーティングを使用して外部ネットワークとのシームレスな接続を提供します。 |
よく寄せられる質問
AKS Arc クラスター間で MetalLB インスタンスを再利用できますか?
いいえ。MetalLB は AKS Arc クラスター間で再利用できません。 MetalLB は Kubernetes クラスター内のポッドとして存在し、ロード バランサーはカスタム リソース (PR) です。 Azure CLI、Azure portal、または Azure Resource Manager テンプレートを使用して MetalLB Arc k8s 拡張機能をインストールし、すべての AKS Arc クラスターのロード バランサーを作成する必要があります。