ロード バランシング ネットワーク モードを構成する

このドキュメントでは、ロード バランシング用の 2 つの Dataplane V2 ネットワーキング モードと、GKE on Bare Metal に対してそれらを有効にする方法について説明します。リリース 1.16.0 より前の GKE on Bare Metal では、ロード バランシング用の Dataplane V2 ネットワーキング モードを構成できません。Dataplane V2 は、ソース ネットワーク アドレス変換(SNAT)ロード バランシングのみサポートしています。クラスタ バージョン 1.16.0 以降では、クラスタの作成時にロード バランシング ネットワーク モードを SNAT(デフォルト)またはダイレクト サーバー リターン(DSR)に構成できます。

SNAT ロード バランシング

送信元ネットワーク アドレス変換(SNAT)は、Dataplane V2 ロード バランシングのデフォルトのネットワーク モードです。しかし、SNAT モードでは、クライアント IP アドレスがバックエンド Pod に対して保持されません。クライアントからのパケットは、ロードバランサ ノードに到達すると、変換され、バックエンド Pod がある宛先のワーカーノードに転送されます。バックエンド Pod は、リクエストが、クライアントの場所からではなく、ロードバランサ ノードから送信されていることを認識します。その結果、応答はロードバランサ ノードに返され、逆変換されてクライアントに送り返されます。

SNAT のパケットフロー

Dataplane V2 ロード バランシングの SNAT ネットワーキング モードでは、外部クライアントからバックエンド Pod へのパケットフローが次のようになります。

  • LoadBalancer タイプの Service がロードバランサ ノードに割り当てられ、その IP アドレス 172.16.20.16 がノードで実行されている MetalLB スピーカーによってアドバタイズされます。

  • Dataplane V2 は、SNAT を使用して送信元 IP アドレスとポートを <LB_NODE_IP>:52000 に変換し、パケットをワーカーノードに転送します。

  • レスポンスはロードバランサ ノードに返送され、宛先アドレスが逆変換されます。

次の図では、SNAT モードのパケットフローを示します。

SNAT モードでの Dataplane V2 ロード バランシングのパケットフロー

DSR ロード バランシング

Direct Server Return(DSR)は、SNAT ロード バランシングの問題を解決します。DSR モードでは、ロードバランサ ノードが IP オプションを使用してクライアントの送信元アドレスを保存します。ワーカーノードは、元のパケットを復元し、バックエンド Pod に転送できます。バックエンド Pod は、ロードバランサ ノードの IP アドレスではなく、クライアント IP アドレスからパケットが送信されていることを認識できます。その結果、戻りのパケットは、ロードバランサ ノードに戻されるのではなく、直接クライアント IP アドレスに返されます。

このモードでは、クライアント IP アドレスの公開設定の問題が解決されるだけでなく、ロードバランサ ノードの帯域幅も節約されます。戻りトラフィックがロードバランサ ノードを通過する必要がなく、ロードバランサ ノードが接続トラッキングを行う必要もなくなります。この方法は、メモリを節約し転送ポートを解放します。非対称ワークロード(ダウンロード トラフィックがリクエスト トラフィックよりもはるかに多い)の場合、DSR フローによって帯域幅が大幅に削減されます。

DSR のパケットフロー

Dataplane V2 ロード バランシングの DSR ネットワーキング モードでは、外部クライアントからバックエンド Pod へのパケットフローが次のようになります。

  • LoadBalancer タイプの Service がロードバランサ ノードに割り当てられ、その IP アドレス 172.16.20.16 がノードで実行されている MetalLB スピーカーによってアドバタイズされます。

  • Dataplane V2 はパケットをワーカーノードに転送し、IP オプションを使用して元のクライアントの送信元 IP アドレスとポートを保存します。

  • ワーカーノードの Dataplane V2 は、パケットをバックエンド Pod に転送します。

  • バックエンド Pod が送信元 IP アドレスとポートを復元し、クライアントに応答します。

次の図では、DSR モードのパケットフローを示します。

SNAT モードでの Dataplane V2 ロード バランシングのパケットフロー

DSR の制限

DSR は、非トンネルモードでのみサポートされるため、フラットモード ネットワーク モデルを有効にする必要があります。フラットモード ネットワーク モデルを有効にする手順については、フラット IPv4 モード ネットワーク モデルの実装をご覧ください。フラットモード ネットワーク モデルが有効になっていない場合、DSR を有効にしようとすると、プリフライト チェックが失敗します。

DSR モードを有効にする

前述のとおり、デフォルトでは、SNAT モードが有効になっています。DSR モードを有効にするには、クラスタを作成する前に、次のアノテーションをクラスタ構成ファイルに追加します。プレビュー版では、この機能はアノテーション preview.baremetal.cluster.gke.io/dpv2-lbmode-dsr: enable を使用して DSR モードを有効にします。DSR モードを無効にするには、アノテーションを削除するか、disable に設定します。他の値は無効で、検証エラーが発生します。

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: bm
  namespace: cluster-bm
  annotations:
    preview.baremetal.cluster.gke.io/dpv2-lbmode-dsr: enable  # valid options: enable or disable
spec:
...

この値をクラスタの作成後に変更することはできません。クラスタを作成する前に、必要なオプションが構成されていることを確認してください。