MetalLB がレイヤー 2 モードで実際の負荷分散機能を提供できないのはなぜですか?

MetalLB がレイヤー 2 モードで実際の負荷分散機能を提供できないのはなぜですか?

MetalLBのドキュメント次のように述べています。

レイヤー 2 モードでは、サービス IP のすべてのトラフィックが 1 つのノードに送信されます。

私の理解では、これは主に次の事実によるものです:

1 つのノードがローカル ネットワークにサービスを広告する責任を負います。

前述のドキュメントの残りの部分で述べられているように、この動作は重大な制限を意味します。トラフィックの帯域幅は、選択されたノードを通過できるものに制限されます。しかし、これはドキュメントで主張されているように ARP によるものなのでしょうか?

この制限を取り除くために私が想像できる解決策は、ノードごとに 1 つの「スピーカー」を用意することです。新しいポッドとサービスのセットがデプロイされると、新しいノードを実行するノードで実行されているスピーカーが ARP アナウンスメントを担当します。このようにして、受信トラフィックは常に最適なルートを取ります。これは技術的に実行可能でしょうか?

答え1

MetalLB は正しいです。レベル 2 のアドレス指定ゲームをプレイするということは、一度にユニキャスト トラフィックを受信できるホストが 1 つだけであることを意味します。サービス アドレスごとに。

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 ごとに 1 つのアクティブ ホストでも問題にならない場合があります。ホストは、おそらく 25 Gb リンクでかなり大規模に拡張できます。必要に応じて、実際の作業を他のホストに移動して、フロントエンド接続を終了するプロキシだけを残すことができます。

関連情報