ロード バランシング転送モードを構成する

このドキュメントでは、ロード バランシング用の 2 つの Dataplane V2 転送モードと、Google Distributed Cloud に対してそれらを有効にする方法について説明します。Dataplane V2 では、ロード バランシング用の次の 2 つの転送モードがサポートされています。

  • 送信元ネットワーク アドレス変換(SNAT)
  • Direct Server Return(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 モードを有効にするには、spec.clusterNetwork.forwardMode フィールドをクラスタ構成ファイルに追加し、dsr に設定します。前述のとおり、デフォルトでは、SNAT モードが有効になっています。forwardModesnat に設定すると、SNAT モードを明示的に指定できます。Dataplane V2 ロード バランシングの転送モードは、クラスタ作成時にのみ構成できます。

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: lb-mode
  namespace: cluster-lb-mode
  ...
spec:

  clusterNetwork:
    forwardMode: dsr # valid options are dsr or snat
    pods:
      cidrBlocks:
      - 192.168.0.0/16
    services:
      cidrBlocks:
      - 10.96.0.0/20
...

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