バックエンド サービスの概要

バックエンド サービスは、Cloud Load Balancing によるトラフィックの分散方法を定義します。バックエンド サービスの構成には、バックエンドへの接続に使用されるプロトコル、さまざまな配信とセッションの設定、ヘルスチェック、タイムアウトなどの値が含まれます。これらの設定により、ロードバランサの動作を細かく制御できます。ほとんどの設定にはデフォルト値が用意されているので、簡単な構成ですぐに使い始めることができます。バックエンド サービスのスコープは リージョンです。

ロードバランサ、Envoy プロキシ、プロキシレス gRPC クライアントは、バックエンド サービス リソースの構成情報を使用して次のことを行います。

  • トラフィックを正しいバックエンド、すなわちインスタンス グループまたはネットワーク エンドポイント グループ(NEG)に転送する。
  • 各バックエンドで設定されたバランシング モードに従ってトラフィックを分散する。
  • バックエンドの状態をモニタリングしているヘルスチェックを判別する。
  • セッション アフィニティを指定する。

これらの値は、バックエンド サービスを作成するとき、またはバックエンド サービスにバックエンドを追加するときに設定します。

次の表は、どのロードバランサがバックエンド サービスを使用しているかをまとめたものです。また、使用しているプロダクトによって、バックエンド サービスの最大数、バックエンド サービスのスコープ、サポートされているバックエンド タイプ、バックエンド サービスのロード バランシング スキームが決まります。ロード バランシング スキームは、Google が転送ルールとバックエンド サービスを分類するために使用する識別子です。各ロード バランシング プロダクトは、転送ルールとバックエンド サービスに 1 つのロード バランシング スキームを使用します。スキームの中には、プロダクト間で共有されるものもあります。

表: バックエンド サービスとサポートされているバックエンド タイプ
プロダクト バックエンド サービスの最大数 バックエンド サービスのスコープ サポートされているバックエンドの種類 ロード バランシング スキーム
リージョン外部アプリケーション ロードバランサ 複数 リージョン 各バックエンド サービスは、次のいずれかのバックエンドの組み合わせをサポートしています。
  • すべてのインスタンス グループ バックエンド: 1 つ以上のマネージドまたは非マネージド インスタンス グループ バックエンド。あるいは、マネージドと非マネージドの組み合わせ *
  • すべてのゾーン NEG: 1 つ以上の GCE_VM_IP_PORT タイプのゾーン NEG*
  • すべてのハイブリッド接続 NEG: 1 つ以上の NON_GCP_PRIVATE_IP_PORT タイプの NEG
  • ゾーン NEG とハイブリッド NEG の組み合わせ: GCE_VM_IP_PORT タイプと NON_GCP_PRIVATE_IP_PORT タイプの NEG
  • 単一の Private Service Connect NEG
  • 外部バックエンドのすべてのリージョン インターネット NEG
EXTERNAL_MANAGED
リージョン内部アプリケーション ロードバランサ 複数 リージョン 各バックエンド サービスは、次のいずれかのバックエンドの組み合わせをサポートしています。
  • すべてのインスタンス グループ バックエンド: 1 つ以上のマネージドまたは非マネージド インスタンス グループ バックエンド。あるいは、マネージドと非マネージドの組み合わせ *
  • すべてのゾーン NEG: 1 つ以上の GCE_VM_IP_PORT タイプのゾーン NEG*
  • すべてのハイブリッド接続 NEG: 1 つ以上の NON_GCP_PRIVATE_IP_PORT タイプの NEG
  • ゾーン NEG とハイブリッド NEG の組み合わせ: GCE_VM_IP_PORT タイプと NON_GCP_PRIVATE_IP_PORT タイプの NEG
  • 単一の Private Service Connect NEG
  • 外部バックエンドのすべてのリージョン インターネット NEG
INTERNAL_MANAGED
リージョン外部プロキシ ネットワーク ロードバランサ 1 リージョン バックエンド サービスは、次のいずれかのバックエンドの組み合わせをサポートしています。
  • すべてのインスタンス グループ バックエンド: 1 つ以上のマネージドまたは非マネージド インスタンス グループ バックエンド。あるいは、マネージドと非マネージドの組み合わせ *
  • すべてのゾーン NEG: 1 つ以上の GCE_VM_IP_PORT タイプのゾーン NEG*
  • すべてのハイブリッド接続 NEG: 1 つ以上の NON_GCP_PRIVATE_IP_PORT タイプの NEG
  • ゾーン NEG とハイブリッド NEG の組み合わせ: GCE_VM_IP_PORT タイプと NON_GCP_PRIVATE_IP_PORT タイプの NEG
  • 外部バックエンドのすべてのリージョン インターネット NEG
  • 単一の Private Service Connect NEG
EXTERNAL_MANAGED
リージョン内部プロキシ ネットワーク ロードバランサ 1 リージョン バックエンド サービスは、次のいずれかのバックエンドの組み合わせをサポートしています。
  • すべてのインスタンス グループ バックエンド: 1 つ以上のマネージドまたは非マネージド インスタンス グループ バックエンド。あるいは、マネージドと非マネージドの組み合わせ *
  • すべてのゾーン NEG: 1 つ以上の GCE_VM_IP_PORT タイプのゾーン NEG*
  • すべてのハイブリッド接続 NEG: 1 つ以上の NON_GCP_PRIVATE_IP_PORT タイプの NEG
  • ゾーン NEG とハイブリッド NEG の組み合わせ: GCE_VM_IP_PORT タイプと NON_GCP_PRIVATE_IP_PORT タイプの NEG
  • 外部バックエンドのすべてのリージョン インターネット NEG
  • 単一の Private Service Connect NEG
INTERNAL_MANAGED
外部パススルー ネットワーク ロードバランサ 1 リージョン バックエンド サービスは、次のいずれかのバックエンドの組み合わせをサポートしています。
  • すべてのインスタンス グループ バックエンド: 1 つ以上のマネージドまたは非マネージド インスタンス グループ バックエンド。あるいは、マネージドと非マネージドの組み合わせ。
  • すべてのゾーン NEG: 1 つ以上の GCE_VM_IP タイプのゾーン NEG
EXTERNAL
内部パススルー ネットワーク ロードバランサ 1 リージョン タイプ バックエンド サービスは、次のいずれかのバックエンドの組み合わせをサポートしています。
  • すべてのインスタンス グループ バックエンド: 1 つ以上のマネージドまたは非マネージド インスタンス グループ バックエンド。あるいは、マネージドと非マネージドの組み合わせ。
  • すべてのゾーン NEG: 1 つ以上の GCE_VM_IP タイプのゾーン NEG
  • 1 つのポート マッピング NEG
内部

バックエンド

バックエンドは、 Trusted Cloud by S3NSロードバランサ またはプロキシレス gRPC クライアントからトラフィックを受信する 1 つ以上のエンドポイントです。バックエンドにはいくつかの種類があります。

バックエンド サービスに関連付けられているバックエンド インスタンス グループまたは NEG は削除できません。インスタンス グループまたは NEG を削除する前に、参照元であるすべてのバックエンド サービスからバックエンドとして削除する必要があります。

インスタンス グループ

このセクションでは、インスタンス グループがバックエンド サービスでどのように機能するのかについて説明します。

バックエンド VM と外部 IP アドレス

バックエンド サービスのバックエンド VM には外部 IP アドレスは必要ありません。

  • リージョン外部アプリケーション ロードバランサの場合: クライアントは、ロードバランサの外部 IP アドレスをホストする Envoy プロキシと通信します。Envoy プロキシは、バックエンドの VPC ネットワークの識別子をバックエンドの内部 IPv4 アドレスと結合して作成された内部アドレスにパケットを送信することにより、バックエンド VM またはエンドポイントと通信します。

    • インスタンス グループのバックエンドの場合、内部 IPv4 アドレスは常に、VM の nic0 インターフェースに対応するプライマリ内部 IPv4 アドレスになります。nic0 は、ロードバランサと同じネットワークに存在する必要があります。
    • ゾーン NEG 内の GCE_VM_IP_PORT エンドポイントの場合、ネットワーク インターフェースがロードバランサと同じネットワーク内にある限り、VM のネットワーク インターフェースに関連付けられたプライマリ IPv4 アドレス、または VM のネットワーク インターフェースに関連付けられたエイリアス IP アドレス範囲の IPv4 アドレスとして、エンドポイントの IP アドレスを指定できます。
  • 外部パススルー ネットワーク ロードバランサの場合: クライアントは、Google の Maglev パススルー ロード バランシング インフラストラクチャを介してバックエンドと直接通信します。パケットは、元の送信元 IP アドレスと宛先 IP アドレスを保持した状態でバックエンドにルーティングされ、配信されます。バックエンドは、ダイレクト サーバー リターンを使用してクライアントに応答します。バックエンドの選択と接続の追跡に使用される方法は構成可能です。

    • インスタンス グループのバックエンドの場合、パケットは常に VM の nic0 インターフェースに配信されます。
    • ゾーン NEG 内の GCE_VM_IP エンドポイントの場合、パケットは NEG に関連付けられたサブネットワーク内にある VM のネットワーク インターフェースに配信されます。

名前付きポート

バックエンド サービスの名前付きポート属性は、インスタンス グループ バックエンドを使用するプロキシベースのロードバランサ(アプリケーション ロードバランサとプロキシ ネットワーク ロードバランサ)にのみ適用されます。名前付きポートは、プロキシ(GFE または Envoy)とバックエンド インスタンス間の TCP 接続に使用される宛先ポートを定義します。

名前付きポートは次のように構成されます。

  • インスタンス グループのバックエンドごとに、Key-Value ペアを使用して 1 つ以上の名前付きポートを構成する必要があります。キーには、わかりやすいポート名を選択します。値は、ポート名に割り当てるポート番号です。名前と番号のマッピングは、インスタンス グループのバックエンドごとに個別に行われます。

  • バックエンド サービスで、ポート名(--port-name)のみを使用して単一の名前付きポートを指定します。

インスタンス グループのバックエンドごとに、バックエンド サービスはポート名をポート番号に変換します。インスタンス グループの名前付きポートがバックエンド サービスの --port-name と一致すると、バックエンド サービスは、このポート番号をインスタンス グループの VM との通信に使用します。

たとえば、インスタンス グループに my-service-name という名前の名前付きポートとポート 8888 を設定できます。

gcloud compute instance-groups unmanaged set-named-ports my-unmanaged-ig \
    --named-ports=my-service-name:8888

次に、バックエンド サービスの --port-namemy-service-name に設定して、バックエンド サービス構成の名前付きポートを参照します。

gcloud compute backend-services update my-backend-service \
    --port-name=my-service-name

各インスタンス グループが同じポート名に異なるポート番号を指定している場合は、バックエンド サービスが異なるインスタンス グループの VM と通信するときに、別のポート番号を使用できます。

プロキシ ロードバランサのバックエンド サービスが使用する解決済みのポート番号は、ロードバランサの転送ルールで使用されるポート番号と一致する必要はありません。プロキシ ロードバランサは、転送ルールの IP アドレスと宛先ポートに送信された TCP 接続をリッスンします。プロキシはバックエンドへの 2 つ目の TCP 接続を開くため、2 つ目の TCP 接続の宛先ポートは異なる場合があります。

名前付きポートは、インスタンス グループのバックエンドにのみ適用されます。GCE_VM_IP_PORT エンドポイントを持つゾーン NEG、NON_GCP_PRIVATE_IP_PORT エンドポイントを持つハイブリッド NEG、インターネット NEG は異なるメカニズムを使用してポートを定義します(つまりエンドポイント自体にポートを定義します)。

内部パススルー ネットワーク ロードバランサと外部パススルー ネットワーク ロードバランサは、名前付きポートを使用しません。これは、新しい接続を作成するのではなく、接続をバックエンドに直接ルーティングするパススルー ロードバランサであるためです。パケットはバックエンドに配信され、ロードバランサの転送ルールの宛先 IP アドレスとポートが保持されます。

名前付きポートの作成方法については、次の手順をご覧ください。

インスタンス グループに関する制限とガイダンス

ロードバランサのインスタンス グループを作成する際は、次の制限とガイダンスに留意してください。

  • ロードバランスされた複数のインスタンス グループに VM を配置しないでください。VM が 2 つ以上の非マネージド インスタンス グループのメンバー、または 1 つのマネージド インスタンス グループと 1 つ以上の非マネージド インスタンス グループのメンバーである場合、 Trusted Cloudでは、一度に特定のバックエンド サービスのバックエンドとして使用できるのは、これらのインスタンス グループの 1 つに制限されます。

    VM が複数のロードバランサに参加する必要がある場合は、同じインスタンス グループを各バックエンド サービスのバックエンドとして使用する必要があります。

  • プロキシ ロードバランサの場合、トラフィックを異なるポートに分散するときには、1 つのインスタンス グループに必要な名前付きポートを指定し、各バックエンド サービスが一意の名前付きポートをサブスクライブするように設定します。

  • 同じインスタンス グループを複数のバックエンド サービスのバックエンドとして使用できます。この場合、バックエンドで互換性のある分散モードを使用する必要があります。互換性とは、バランシング モードが同じか、互換性のあるバランシング モードの組み合わせ(CONNECTIONRATE など)でなければなりません。

    互換性のないバランシング モードの組み合わせは次のとおりです。

    • UTILIZATIONCONNECTION
    • UTILIZATIONRATE
    • UTILIZATIONCUSTOM_METRICS
    • RATECUSTOM_METRICS
    • CUSTOM_METRICSCONNECTION

    次のような例を考えてみましょう。

    • 2 つのバックエンド サービスがあります。external-https-backend-service は外部アプリケーション ロードバランサ用、internal-tcp-backend-service は内部パススルー ネットワーク ロードバランサ用です。
    • internal-tcp-backend-serviceinstance-group-a というインスタンス グループを使用しています。
    • 内部パススルー ネットワーク ロードバランサは CONNECTION バランシング モードのみをサポートするため、internal-tcp-backend-service では CONNECTION バランシング モードを適用する必要があります。
    • external-https-backend-serviceRATE バランシング モードを適用する場合は、external-https-backend-serviceinstance-group-a を使用することもできます。
    • UTILIZATION 分散モードを使用する external-https-backend-service の場合は、instance-group-a を使用できません
  • 複数のバックエンド サービスのバックエンドとして機能するインスタンス グループの負荷分散モードを変更するには:

    • 1 つを除くすべてのバックエンド サービスからインスタンス グループを削除します。
    • 残り 1 つのバックエンド サービスのバックエンドの負荷分散モードを変更します。
    • 残りのバックエンド サービスが新しい負荷分散モードをサポートしている場合は、インスタンス グループをバックエンドとして再度バックエンド サービスに追加します。
  • インスタンス グループが複数のバックエンド サービスに関連付けられている場合、各バックエンド サービスは、インスタンス グループの同じ名前付きポートまたは異なる名前付きポートを参照できます。

  • 自動スケーリングされたマネージド インスタンス グループを複数のバックエンド サービスに追加しないことをおすすめします。これを行うと、特に HTTP 負荷分散使用率の自動スケーリング指標を使用する場合に、グループ内のインスタンスが予測不能かつ不必要にスケーリングされる可能性があります。

    • 自動スケーリング指標が CPU 使用率またはロードバランサの処理能力に関係のない Cloud Monitoring 指標の場合、このシナリオが機能する可能性がありますが、これはおすすめしません。これらの自動スケーリング指標のいずれかを使用すると、不安定なスケーリングを防止できます。

ゾーン ネットワーク エンドポイント グループ

ネットワーク エンドポイントは、インスタンス グループ内の VM を参照するのではなく、IP アドレスまたは IP アドレスとポートの組み合わせによってサービスを表します。ネットワーク エンドポイント グループ(NEG)は、ネットワーク エンドポイントの論理的なグループです。

ゾーン ネットワーク エンドポイント グループ(NEG)は、1 つのサブネット内の Trusted Cloud リソース用の IP アドレスまたは IP アドレス / ポートの組み合わせをまとめたゾーンリソースです。

ゾーン NEG をバックエンドとして使用するバックエンド サービスは、VM 内で実行されているアプリケーションやコンテナ間でトラフィックを分散します。

ゾーン NEG で使用できるネットワーク エンドポイントには次の 2 種類があります。

  • GCE_VM_IP エンドポイント(内部パススルー ネットワーク ロードバランサとバックエンド サービスベースの外部パススルー ネットワーク ロードバランサでのみサポートされます)。
  • GCE_VM_IP_PORT エンドポイント。

ゾーン NEG バックエンドをサポートするプロダクトを確認するには、表: バックエンド サービスとサポートされているバックエンド タイプをご覧ください。

詳細については、ゾーン NEG の概要をご覧ください。

インターネット ネットワーク エンドポイント グループ

インターネット NEG は、グローバル外部バックエンドを定義するグローバル リソースです。外部バックエンドは、オンプレミス インフラストラクチャ内またはサードパーティによって提供されるインフラストラクチャ内でホストされるバックエンドです。

インターネット NEG は、ホスト名または IP アドレスとポート(オプション)の組み合わせです。インターネット NEG で使用できるネットワーク エンドポイントには、INTERNET_FQDN_PORTINTERNET_IP_PORT の 2 種類があります。

インターネット NEG はリージョン スコープで使用できます。インターネット NEG バックエンドをサポートするプロダクトを確認するには、表: バックエンド サービスとサポートされているバックエンド タイプをご覧ください。

詳細については、インターネット ネットワーク エンドポイント グループの概要をご覧ください。

バックエンドの混在

1 つのバックエンド サービスに異なるタイプのバックエンドを追加する場合、次の使用上の考慮事項が適用されます。

  • 1 つのバックエンド サービスで、インスタンス グループとゾーン NEG の両方を同時に使用することはできません。
  • 同じバックエンド サービスで異なる種類のインスタンス グループを組み合わせて使用できます。たとえば、1 つのバックエンド サービスは、マネージド インスタンス グループと非マネージド インスタンス グループの両方の組み合わせを参照できます。互換性があるバックエンドとバックエンド サービスの組み合わせについては、前のセクションの表をご覧ください。
  • 特定のプロキシ ロードバランサでは、ゾーン NEG(GCE_VM_IP_PORT エンドポイントを含む)とハイブリッド接続 NEG(NON_GCP_PRIVATE_IP_PORT エンドポイントを含む)の組み合わせを使用して、ハイブリッド ロード バランシングを構成できます。この機能を持つロードバランサを確認するには、表: バックエンド サービスとサポートされているバックエンド タイプをご覧ください。

バックエンドへのプロトコル

バックエンド サービスを作成する場合は、バックエンドとの通信に使用するプロトコルを指定する必要があります。指定できるプロトコルはバックエンド サービスごとに 1 つのみです。フォールバックとして使用するセカンダリ プロトコルを指定することはできません。

有効なプロトコルは、ロードバランサの種類によって異なります。

表: バックエンドへのプロトコル
プロダクト バックエンド サービスのプロトコル オプション
アプリケーション ロードバランサ HTTP、HTTPS、HTTP/2
プロキシ ネットワーク ロードバランサ

TCP または SSL

リージョン プロキシ ネットワーク ロードバランサは、TCP のみをサポートします。

パススルー ネットワーク ロードバランサ TCP、UDP、または UNSPECIFIED

バックエンド サービスのプロトコルを変更すると、ロードバランサ経由でバックエンドに数分間アクセスできなくなります。

ロードバランサとバックエンド間の暗号化

ロードバランサとバックエンド間の暗号化については、バックエンドへの暗号化をご覧ください。

トラフィック分散

バックエンドの動作は、バックエンド サービス リソースの以下のフィールドの値で決まります。

  • バランシング モードは、ロードバランサが新しいリクエストまたは新しい接続のバックエンドの準備状況を測定する方法を定義します。
  • ターゲット容量は、ターゲットの最大接続数、ターゲットの最大レート、またはターゲットの最大 CPU 使用率を定義します。
  • 容量スケーラーは、ターゲット容量を変更せずに使用可能な容量全体を調整するために使用できます。

分散モード

バランシング モードでは、ロードバランサ のバックエンドが追加のトラフィックを処理できるかどうか、または完全に読み込まれるかどうかを判別します。

Trusted Cloud には次の 4 つのバランシング モードがあります。

  • CONNECTION: バックエンドが処理できる接続の合計数に基づいて負荷をどのように分散するかを決定します。
  • RATE: 1 秒あたりのリクエスト(クエリ)の目標最大数(RPS、QPS)。すべてのバックエンドが容量を超えると、目標最大 RPS / QPS を超過する場合があります。
  • UTILIZATION: インスタンス グループ内のインスタンスの使用率に基づいて負荷をどのように分散するかを決定します。
  • CUSTOM_METRICS: ユーザー定義のカスタム指標に基づいて負荷をどのように分散するかを決定します。

各ロードバランサで使用できるバランシング モード

バックエンド サービスにバックエンドを追加する際に、バランシング モードを設定します。ロードバランサで使用できるバランシング モードは、ロードバランサの種類とバックエンドの種類によって異なります。

パススルー ネットワーク ロードバランサには CONNECTION バランシング モードが必要ですが、ターゲット容量の設定はサポートされていません。

アプリケーション ロードバランサは、インスタンス グループ バックエンドに対して RATEUTILIZATION、または CUSTOM_METRICS バランシング モードをサポートします。ゾーン NEG(GCE_VM_IP_PORT エンドポイント)とハイブリッド NEG(NON_GCP_PRIVATE_IP_PORT エンドポイント)に対しては、RATE または CUSTOM_METRICS バランシング モードをサポートします。サポートされている他の種類のバックエンドの場合は、バランシング モードを省略する必要があります。

  • リージョン外部アプリケーション ロードバランサ リージョン内部アプリケーション ロードバランサの場合、バランシング モードのターゲット容量はリージョン内の各バックエンド(インスタンスグループまたは NEG)に送信するリクエスト数の比率を計算するために使用されます。各インスタンス グループまたは NEG 内では、ロード バランシング ポリシー(LocalityLbPolicy)により、グループ内のインスタンスまたはエンドポイントにトラフィックを分散する方法が決まります。

プロキシ ネットワーク ロードバランサは、VM インスタンス グループ バックエンドに対して CONNECTION または UTILIZATION バランシング モードをサポートします。GCE_VM_IP_PORT エンドポイントを含むゾーン NEG には CONNECTION バランシング モードを、ハイブリッド NEG(NON_GCP_PRIVATE_IP_PORT エンドポイント)に対しては CONNECTION バランシング モードをサポートします。サポートされている他の種類のバックエンドの場合は、バランシング モードを省略する必要があります。

  • リージョン外部プロキシ ネットワーク ロードバランサとリージョン内部プロキシ ネットワーク ロードバランサの場合、ロード バランシング モードのターゲット容量を使用して、各バックエンド(インスタンス グループまたは NEG)に送信するリクエスト数の比率が計算されます。各インスタンス グループまたは NEG 内では、ロード バランシング ポリシー(localityLbPolicy)により、グループ内のインスタンスまたはエンドポイントにトラフィックを分散する方法が決まります。

次の表は、各ロードバランサとバックエンドの組み合わせで使用可能なロード バランシング モードをまとめたものです。

表: 各ロードバランサで使用できるバランシング モード
ロードバランサ バックエンド 使用可能なバランシング モード
アプリケーション ロードバランサ インスタンス グループ RATEUTILIZATION または CUSTOM_METRICS
ゾーン NEG(GCE_VM_IP_PORT エンドポイント) RATE または CUSTOM_METRICS
ハイブリッド NEG(NON_GCP_PRIVATE_IP_PORT エンドポイント) RATE または CUSTOM_METRICS

プロキシ ネットワーク ロードバランサ

  • リージョン外部プロキシ ネットワーク ロードバランサ
  • リージョン内部プロキシ ネットワーク ロードバランサ
インスタンス グループ CONNECTION または UTILIZATION
ゾーン NEG(GCE_VM_IP_PORT エンドポイント) CONNECTION

ハイブリッド NEG(NON_GCP_PRIVATE_IP_PORT エンドポイント)

CONNECTION
パススルー ネットワーク ロードバランサ インスタンス グループ CONNECTION
ゾーン NEG(GCE_VM_IP エンドポイント) CONNECTION

バックエンド サービスに関連付けられているすべての VM の平均使用率が 10% 未満の場合、 Trusted Cloud は特定のゾーンを優先する場合があります。リージョン マネージド インスタンス グループ、異なるゾーンのゾーン マネージド インスタンス グループ、ゾーン非マネージド インスタンス グループを使用すると、この状況が発生することがあります。このゾーン間の不均衡は、ロードバランサに送信されるトラフィックが増加するにつれて自動的に解決されます。

詳細については、gcloud compute backend-services add-backend をご覧ください。

ターゲット容量

各分散モードには、対応するターゲット容量があり、次のターゲット上限のいずれかを定義します。

  • 接続の数
  • 料金
  • CPU 使用率

どの負荷分散モードでも、ターゲット容量はサーキット ブレーカーではありません。ロードバランサは、特定の条件下で最大値を超えることがあります(たとえば、すべてのバックエンド VM またはエンドポイントが上限に達した場合)。

接続バランシング モード

CONNECTION バランシング モードの場合、ターゲット容量によって、開いているターゲット接続の最大数を定義します。内部パススルー ネットワーク ロードバランサと外部パススルー ネットワーク ロードバランサを除き、次のいずれかの設定を使用して、ターゲットの最大接続数を指定する必要があります。

  • max-connections-per-instance(VM あたり): VM ごとの接続の目標平均数。
  • max-connections-per-endpoint(ゾーン NEG のエンドポイントごと): エンドポイントごとの接続の目標平均数。
  • max-connections(ゾーン NEG ごと、ゾーン インスタンス グループの場合): NEG またはインスタンス グループ全体の接続の目標平均数。リージョン マネージド インスタンス グループの場合は、代わりに max-connections-per-instance を使用してください。

次の表は、ターゲット容量パラメータで定義される容量を示します。

  • バックエンド全体のターゲット容量
  • 各インスタンスまたはエンドポイントに想定されるターゲット容量
表: CONNECTION バランシング モードを使用するバックエンドのターゲット容量
バックエンド タイプ ターゲット容量
指定するパラメータ バックエンド全体の容量 インスタンスごと、またはエンドポイントの容量あたり
インスタンス グループ
N インスタンス、
H 正常
max-connections-per-instance=X X × N (X × N)/H
ゾーン NEG
N エンドポイント、
H 正常
max-connections-per-endpoint=X X × N (X × N)/H
インスタンス グループ
(リージョン マネージド インスタンス グループを除く)

H 正常なインスタンス
max-connections=Y Y Y/H

max-connections-per-instancemax-connections-per-endpoint の設定は、VM インスタンス グループ全体またはゾーン NEG 全体の接続の目標最大数を計算するためのプロキシです。

  • N インスタンスのある VM インスタンス グループでは、max-connections-per-instance=X の設定は、max-connections=X × N を設定する場合と同じになります。
  • N エンドポイントを含むゾーン NEG では、max-connections-per-endpoint=X の設定は、max-connections=X × N を設定する場合と同じになります。

レート分散モード

RATE 分散モードでは、次のいずれかのパラメータを使用して、ターゲット容量を定義する必要があります。

  • max-rate-per-instance(VM あたり): VM ごとの HTTP リクエストの目標平均レートを指定します。
  • max-rate-per-endpoint(ゾーン NEG 内のエンドポイントごと): エンドポイントごとの HTTP リクエストの目標平均レートを指定します。
  • max-rate(ゾーン NEG ごと、ゾーン インスタンス グループ): NEG またはインスタンス グループ全体の HTTP リクエストの平均目標レートを指定します。リージョン マネージド インスタンス グループの場合は、代わりに max-rate-per-instance を使用してください。

次の表は、ターゲット容量パラメータで定義される容量を示します。

  • バックエンド全体のターゲット容量
  • 各インスタンスまたはエンドポイントに想定されるターゲット容量
表: RATE バランシング モードを使用するバックエンドのターゲット容量
バックエンド タイプ ターゲット容量
指定するパラメータ バックエンド全体の容量 インスタンスごと、またはエンドポイントの容量あたり
インスタンス グループ
N インスタンス、
H 正常
max-rate-per-instance=X X × N (X × N)/H
ゾーン NEG
N エンドポイント、
H 正常
max-rate-per-endpoint=X X × N (X × N)/H
インスタンス グループ
(リージョン マネージド インスタンス グループを除く)

H 正常なインスタンス
max-rate=Y Y Y/H

max-rate-per-instancemax-rate-per-endpoint の設定は、インスタンス グループ全体またはゾーン NEG 全体の HTTP リクエストの目標最大レートを計算するプロキシです。

  • N インスタンスのあるインスタンス グループでは、max-rate-per-instance=X の設定は、max-rate=X × N を設定する場合と同じになります。
  • N エンドポイントを含むゾーン NEG では、max-rate-per-endpoint=X の設定は、max-rate=X × N を設定する場合と同じになります。

使用率分散モード

UTILIZATION バランシング モードでは、ターゲット容量を定義する必要はありません。次のセクションの表で説明するように、バックエンドのタイプに依存するオプションを使用できます。

max-utilization ターゲット容量はインスタンス グループ単位でのみ指定できます。グループ内の特定の VM に適用することはできません。

UTILIZATION バランシング モードでは、ターゲット容量を定義する必要はありません。 Trusted Cloud コンソールでバックエンド インスタンス グループをバックエンド サービスに追加するときに、UTILIZATION バランシング モードが選択されていると、Trusted Cloud コンソールでは max-utilization の値が 0.8(80%)に設定されます。次のセクションの表に示すように、UTILIZATION バランシング モードでは、max-utilization に加えてより複雑なターゲット容量もサポートされます。

カスタム指標のバランシング モード

CUSTOM_METRICS バランシング モードを使用すると、負荷をどのように分散するかを決定するために使用できる独自のカスタム指標を定義できます。カスタム指標を使用すると、Trusted Cloudの標準の使用率またはレートベースの指標ではなく、アプリケーションまたはインフラストラクチャの要件に固有の指標に基づいて、ロードバランサのトラフィック分配動作を構成できます。

詳細については、アプリケーション ロードバランサのカスタム指標をご覧ください。

ロードバランサのバランシング モードの変更

一部のロードバランサまたはロードバランサの構成では、バックエンド サービスに使用可能なバランシング モードが 1 つしかないため、バランシング モードを変更できません。その他のロードバランサについては、バックエンド サービスに応じて複数のモードを使用できるため、使用するバックエンドに応じてバランシング モードを変更できます。

各ロードバランサでサポートされているバランシング モードを確認するには、表: 各ロードバランサで使用できるバランシング モードをご覧ください。

バランシング モードとターゲット容量の設定

ターゲット容量の仕様をサポートするプロダクトの場合、ターゲット容量はサーキット ブレーカーではありません。特定のゾーンで構成されたターゲット容量の最大値に達すると、新しいリクエストまたは接続は、ターゲット容量でリクエストまたは接続を処理していない他のゾーンに分散されます。すべてのゾーンが目標容量に達した場合、新しいリクエストまたは接続はオーバーフローによって分散されます。

アプリケーション ロードバランサと Cloud Service Mesh

次の表に、アプリケーション ロードバランサと Cloud Service Mesh で使用可能なバランシング モードとターゲット容量の組み合わせを示します。

表: アプリケーション ロードバランサと Cloud Service Mesh のバランシング モードとターゲット容量の組み合わせ
バックエンド タイプ 分散モード ターゲット容量の仕様
インスタンス グループ
  • ゾーン、非マネージド
  • ゾーン、マネージド
  • リージョン、マネージド
RATE 次のいずれかを指定する必要があります。
  • max-rate
    (ゾーン インスタンス グループでのみサポート)
  • max-rate-per-instance
    (すべてのインスタンス グループでサポート)
UTILIZATION 必要に応じて、次のいずれかを指定できます。
  • (1)max-utilization
  • (2)max-rate
    (ゾーン インスタンス グループでのみサポート)
  • (3)max-rate-per-instance
    (すべてのインスタンス グループでサポート)
  • (1)と(2)を同時に指定
  • (1)と(3)を同時に指定
CUSTOM_METRICS 必要に応じて、次のいずれかを指定できます。
  • (1)指標の max-utilization(指標の backends[].customMetrics[].maxUtilization フィールド)
  • (2)max-rate
    (ゾーン インスタンス グループでのみサポート)
  • (3)max-rate-per-instance
    (すべてのインスタンス グループでサポート)
  • (1)と(2)を同時に指定
  • (1)と(3)を同時に指定
バックエンドごとの max-utilization はサポートされていません。

ゾーン NEG

  • GCP_VM_IP_PORT

ハイブリッド NEG

  • NON_GCP_PRIVATE_IP_PORT
RATE 次のいずれかを指定する必要があります。
  • ゾーン NEG あたりの max-rate
  • max-rate-per-endpoint
CUSTOM_METRICS 必要に応じて、次のいずれかを指定できます。
  • (1)指標の max-utilization(指標の backends[].customMetrics[].maxUtilization フィールド)
  • (2)ゾーン NEG あたりの max-rate
  • (3)max-rate-per-endpoint
  • (1)と(2)を同時に指定
  • (1)と(3)を同時に指定
バックエンドごとの max-utilization はサポートされていません。

プロキシ ネットワーク ロードバランサ

次の表に、プロキシ ネットワーク ロードバランサで使用可能なバランシング モードとターゲット容量の組み合わせを示します。

表: プロキシ ネットワーク ロードバランサのバランシング モードとターゲット容量の組み合わせ
バックエンド タイプ 分散モード ターゲット容量の仕様
インスタンス グループ
  • ゾーン、非マネージド
  • ゾーン、マネージド
  • リージョン、マネージド
CONNECTION 次のいずれかを指定する必要があります。
  • max-connections
    (ゾーン インスタンス グループでのみサポート)
  • max-rate-per-instance
    (すべてのインスタンス グループでサポート)
UTILIZATION 必要に応じて、次のいずれかを指定できます。
  • (1)max-utilization
  • (2)max-connections
    (ゾーン インスタンス グループでのみサポート)
  • (3)max-connections-per-instance
    (すべてのインスタンス グループでサポート)
  • (1)と(2)を同時に指定
  • (1)と(3)を同時に指定

ゾーン NEG

  • GCP_VM_IP_PORT

ハイブリッド NEG

  • NON_GCP_PRIVATE_IP_PORT
CONNECTION 次のいずれかを指定する必要があります。
  • ゾーン NEG あたりの max-connections
  • max-connections-per-endpoint

パススルー ネットワーク ロードバランサ

次の表に、パススルー ネットワーク ロードバランサで使用可能なバランシング モードとターゲット容量の組み合わせを示します。

表: パススルー ネットワーク ロードバランサのバランシング モードとターゲット容量の組み合わせ
バックエンド タイプ 分散モード ターゲット容量の仕様
インスタンス グループ
  • ゾーン、非マネージド
  • ゾーン、マネージド
  • リージョン、マネージド
CONNECTION ターゲットの最大接続数は指定できません。
ゾーン NEG
  • GCP_VM_IP
CONNECTION ターゲットの最大接続数は指定できません。

容量スケーラー

ターゲット容量を変更せずにターゲット容量(最大使用率、最大レート、または最大接続数)をスケーリングするには、容量スケーラーを使用します。

Trusted Cloud リファレンス ドキュメントについては、以下をご覧ください。

容量スケーラーを調整すると、いずれかの --max-* パラメータを明示的に変更しなくても、有効なターゲット容量をスケーリングできます。

容量スケーラーは、次のいずれかの値に設定できます。

  • デフォルト値は 1 です。これは、構成した容量の最大 100%(balancingMode によって異なります)がグループによって処理されることを意味します。
  • 0 は、グループが完全にドレインされていて、使用可能な容量の 0% を提供していることを意味します。バックエンド サービスに接続されているバックエンドが 1 つだけの場合は、0 の設定を構成できません。
  • 0.1(10%)~1.0(100%)の値です。

次に、容量スケーラーとターゲット容量設定の関係を示します。

  • バランシング モードが RATEmax-rate80 RPS に設定され、容量スケーラーが 1.0 の場合、使用可能な容量も 80 RPS になります。

  • バランシング モードが RATEmax-rate80 RPS に設定され、容量スケーラーが 0.5 の場合、使用可能な容量は 40 RPS(0.5 times 80)になります。

  • バランシング モードが RATEmax-rate80 RPS に設定され、容量スケーラーが 0.0 の場合、使用可能な容量はゼロ(0)になります。

サービス ロード バランシング ポリシー

サービス ロード バランシング ポリシー(serviceLbPolicy)は、ロードバランサのバックエンド サービスに関連付けられたリソースです。これにより、バックエンド サービスに関連付けられたバックエンド内でのトラフィックの分散方法に影響するパラメータをカスタマイズできます。

  • リージョンまたはゾーン全体でのトラフィックの分散方法を決めるロード バランシング アルゴリズムをカスタマイズします。
  • ロードバランサが正常でないバックエンドからトラフィックを迅速にドレインできるように、自動容量ドレインを有効にします。

特定のバックエンドを優先バックエンドとして指定することもできます。これらのバックエンドが容量(バックエンドのバランシング モードで指定されたターゲット容量)に達するまで使用されると、残りのバックエンドにリクエストが送信されます。

詳細については、サービス ロード バランシング ポリシーを使用した高度なロード バランシング最適化をご覧ください。

ロード バランシングの局所性ポリシー

バックエンド サービスの場合、トラフィック分散はバランシング モードとロード バランシングの局所性ポリシーに基づいて行われます。分散モードでは、各バックエンド(インスタンス グループまたは NEG)に送信するトラフィックの割合を決定します。ロード バランシング局所性ポリシー(LocalityLbPolicy)により、各ゾーン内のインスタンスまたはエンドポイントにトラフィックを分散する方法が決まります。リージョン マネージド インスタンス グループの場合、局所性ポリシーは各構成ゾーンに適用されます。

ロード バランシング局所性ポリシーは、バックエンド サービスごとに構成されます。次の設定を使用できます。

  • ROUND_ROBIN(デフォルト): これは、ロードバランサが正常なバックエンドをラウンドロビン順に選択する、デフォルトのロード バランシング局所性ポリシー設定です。

  • LEAST_REQUEST: ロードバランサが正常なホストをランダムに 2 つ選択し、アクティブなリクエストが少ないホストを選択する O(1) アルゴリズム。

  • RING_HASH: このアルゴリズムは、バックエンドにコンシステント ハッシュ法を実装します。このアルゴリズムには、N 個のホストセットに対して 1 個のホストを追加または削除しても、リクエストの 1/N にしか影響しないという特性があります。

  • RANDOM: ロードバランサが正常なホストをランダムに選択します。

  • ORIGINAL_DESTINATION: ロードバランサは、クライアント接続メタデータに基づいてバックエンドを選択します。リクエストがロードバランサにリダイレクトされる前に、受信したクライアント リクエストで指定された元の宛先 IP アドレスへの接続が開かれます。

    ORIGINAL_DESTINATION は、グローバル外部アプリケーション ロードバランサとリージョン外部アプリケーション ロードバランサではサポートされていません。

  • MAGLEV: バックエンドにコンシステント ハッシュ法を実装し、RING_HASH ポリシーの代わりに使用できます。Maglev は RING_HASH ほど安定していませんが、テーブル検索のビルド時間とホスト選択時間が短縮されます。Maglev の詳細については、Maglev のホワイトペーパーをご覧ください。

  • WEIGHTED_MAGLEV: ヘルスチェックによって報告された重みを使用して、インスタンスごとの重み付きロード バランシングを実装します。このポリシーを使用する場合、バックエンド サービスは以前のものではない HTTP ベースのヘルスチェックを構成する必要があります。ヘルスチェック レスポンスには、インスタンスごとの重みを指定する標準以外の HTTP レスポンス ヘッダー フィールド X-Load-Balancing-Endpoint-Weight が含まれていることが想定されます。すべてのインスタンスが有効な重みを報告するか、UNAVAILABLE_WEIGHT を報告している限り、ロード バランシングの決定は、最後に処理されたヘルスチェック レスポンスで報告されたインスタンスごとの重みに基づいて行われます。それ以外の場合、ロード バランシングは等重量のままになります。

    WEIGHTED_MAGLEV は、外部パススルー ネットワーク ロードバランサでのみサポートされます。例については、外部パススルー ネットワーク ロードバランサの重み付きロード バランシングを設定するをご覧ください。

ロード バランシング局所性ポリシーの構成は、次のロードバランサで使用されるバックエンド サービスでのみサポートされます。

  • グローバル外部アプリケーション ロードバランサ
  • リージョン外部アプリケーション ロードバランサ
  • クロスリージョン内部アプリケーション ロードバランサ
  • リージョン内部アプリケーション ロードバランサ
  • 外部パススルー ネットワーク ロードバランサ

ロード バランシングの局所性ポリシー(localityLbPolicy)の有効なデフォルト値は、セッション アフィニティの設定に応じて変わります。セッション アフィニティが構成されていない場合(セッション アフィニティがデフォルト値の NONE のままの場合)、localityLbPolicy のデフォルト値は ROUND_ROBIN です。セッション アフィニティが NONE 以外の値に設定されている場合、localityLbPolicy のデフォルト値は MAGLEV です。

ロード バランシングの局所性ポリシーを構成するには、Trusted Cloud コンソール、gcloud(--locality-lb-policy)、または API(localityLbPolicy)を使用します。

バックエンドのサブセット化

バックエンドのサブセット化は、各プロキシ インスタンスにバックエンドのサブセットを割り当てることで、パフォーマンスとスケーラビリティを向上させるオプションの機能です。

バックエンドのサブセット化は、以下でサポートされています。

  • リージョン内部アプリケーション ロードバランサ
  • 内部パススルー ネットワーク ロードバランサ

リージョン内部アプリケーション ロードバランサのバックエンドのサブセット化

リージョン内部アプリケーション ロードバランサの場合、バックエンドのサブセット化は、リージョン バックエンド サービス内のバックエンドのサブセットのみを各プロキシ インスタンスに自動的に割り当てます。デフォルトでは、各プロキシ インスタンスはバックエンド サービス内のすべてのバックエンドとの接続を開始します。プロキシ インスタンスの数とバックエンドの数が両方とも多いときに、すべてのバックエンドと接続を開始すると、パフォーマンスの問題が発生する可能性があります。

サブセット化を有効にすると、各プロキシはバックエンドのサブセットへの接続のみを開始するため、各バックエンドに対して開始する接続の数が少なくなります。各バックエンドに対して同時に開始する接続数を減らすと、バックエンドとプロキシの両方のパフォーマンスが向上します。

次の図は、2 つのプロキシがあるロードバランサを示しています。バックエンドのサブセット化がない場合、両方のプロキシからのトラフィックがバックエンド サービス 1 のすべてのバックエンドに分散されます。バックエンドのサブセット化を有効にすると、各プロキシからのトラフィックがバックエンドのサブセットに分散されます。プロキシ 1 からのトラフィックはバックエンド 1 と 2 に分散され、プロキシ 2 からのトラフィックはバックエンド 3 と 4 に分散されます。

内部アプリケーション ロードバランサでバックエンドのサブセット化を有効にした場合と無効にした場合の比較。
内部アプリケーション ロードバランサでバックエンドのサブセット化を有効にした場合と無効にした場合の比較(クリックして拡大)。

localityLbPolicy ポリシーを設定すると、バックエンドへのロード バランシング トラフィックを細かく調整できます。詳細については、トラフィック ポリシーをご覧ください。

内部アプリケーション ロードバランサのバックエンドのサブセット化の設定については、バックエンド サブセットの構成をご覧ください。

内部アプリケーション ロードバランサのバックエンドのサブセット化に関連する注意事項
  • バックエンドのサブセット化は、すべてのバックエンド インスタンスが適切に利用されるように設計されていますが、各バックエンドが受信するトラフィック量にある程度のバイアスが生じる可能性があります。バックエンドの負荷のバランスが重要となるバックエンド サービスには、localityLbPolicyLEAST_REQUEST に設定することをおすすめします。
  • サブセットの有効化または無効化により、既存の接続が切断されます。
  • バックエンドのサブセット化では、セッション アフィニティが NONE(5-tuple ハッシュ)である必要があります。他のセッション アフィニティ オプションは、バックエンドのサブセット化が無効になっている場合にのみ使用できます。--subsetting-policy フラグと --session-affinity フラグのデフォルト値はどちらも NONE です。異なる値を設定できるのは一度に 1 つだけです。

内部パススルー ネットワーク ロードバランサのバックエンドのサブセット化

内部パススルー ネットワーク ロードバランサのバックエンドのサブセット化を使用すると、内部パススルー ネットワーク ロードバランサをスケーリングし、内部バックエンド サービスごとに多数のバックエンド VM インスタンスをサポートできます。

サブセット化がこの制限に与える影響については、ロード バランシング リソースの割り当てと上限の「バックエンド サービス」をご覧ください。

デフォルトではサブセット化が無効になるため、バックエンド サービスは最大で 250 のバックエンド インスタンスまたはエンドポイントに制限されます。バックエンド サービスが 250 を超えるバックエンドをサポートする必要がある場合は、サブセット化を有効にできます。サブセットが有効になっている場合、クライアント接続ごとにバックエンド インスタンスのサブセットが選択されます。

次の図は、この 2 つの動作モードの違いを簡単なモデルで示しています。

内部パススルー ネットワーク ロードバランサのサブセット化を有効にした場合と無効にした場合の比較。
内部パススルー ネットワーク ロードバランサのサブセット化を有効にした場合と無効にした場合の比較(クリックして拡大)

サブセット化しないと、正常なバックエンドの完全なセットの使用率が上がり、新しいクライアント接続はトラフィック分散に従ってすべての正常なバックエンド間で分散されます。サブセット化すると、負荷分散の制限は生じませんが、ロードバランサは 250 以上のバックエンドをサポートできます。

構成手順については、サブセット化の設定をご覧ください。

内部パススルー ネットワーク ロードバランサのバックエンドのサブセット化に関連する注意事項
  • サブセット化が有効になっている場合、バックエンドの数が少ない場合でも、すべてのバックエンドが特定の送信者からトラフィックを受信するわけではありません。
  • サブセット化が有効な場合のバックエンド インスタンスの最大数については、[割り当て] ページをご覧ください。
  • サブセットをサポートしているのは、5 タプルのセッション アフィニティのみです。
  • サブセット化で Packet Mirroring はサポートされていません。
  • サブセットの有効化または無効化により、既存の接続が切断されます。
  • オンプレミス クライアントが内部パススルー ネットワーク ロードバランサにアクセスする必要がある場合、サブセット化により、オンプレミス クライアントからの接続を受信するバックエンドの数を大幅に削減できます。これは、Cloud VPN トンネルまたは Cloud Interconnect VLAN アタッチメントのリージョンによってロードバランサのバックエンドのサブセットが決まるためです。特定のリージョンのすべての Cloud VPN エンドポイントと Cloud Interconnect エンドポイントで、同じサブセットが使用されます。リージョンごとに異なるサブセットが使用されます。

バックエンドのサブセット化の料金

バックエンドのサブセット化の使用に料金はかかりません。詳しくは、ネットワーキングのすべての料金をご覧ください。

セッション アフィニティ

セッション アフィニティを使用すると、正常なバックエンドの数が一定である限り、予測可能な方法でロードバランサが新しい接続にバックエンドを選択する方法を制御できます。これは、特定のユーザーからの複数のリクエストを同じバックエンドまたはエンドポイントに転送する必要があるアプリケーションに役立ちます。このようなアプリケーションとしては、広告配信、ゲーム、または内部キャッシュが頻繁に行われるサービスで使用されるステートフル サーバーなどがあります。

Trusted Cloud ロードバランサは、ベスト エフォート ベースでセッション アフィニティを実現します。バックエンドの追加や削除、バックエンド ウェイトの変更(重み付きバランシングを有効または無効にすることを含む)、バランシング モードで測定されるバックエンド使用率の変化などの要因により、セッション アフィニティが失われる可能性があります。

セッション アフィニティによるロード バランシングは、一意の接続が適切な規模で分散されている場合にうまく機能します。適切な規模とは、バックエンド数の少なくとも数倍を意味します。接続数が少ない状態でロードバランサをテストしても、バックエンド間でのクライアント接続の分散を正確に表すことはできません。

デフォルトでは、すべての Trusted Cloud ロードバランサは、次のように 5 タプルハッシュ(--session-affinity=NONE)を使用してバックエンドを選択します。

  • パケットの送信元 IP アドレス
  • パケットの送信元ポート(パケットのヘッダーにある場合)
  • パケットの宛先 IP アドレス
  • パケットの宛先ポート(パケットのヘッダーにある場合)
  • パケットのプロトコル

パススルー ロードバランサの場合、新しい接続は正常なバックエンド インスタンスまたはエンドポイントに分散されます(フェイルオーバー ポリシーが構成されている場合は、アクティブ プール内)。次のことを制御できます。

プロキシベースのロードバランサの場合、正常なバックエンド インスタンスまたはエンドポイントの数が一定であり、以前に選択したバックエンド インスタンスまたはエンドポイントの容量が上限に達していない限り、後続のリクエストまたは接続は、同じバックエンド VM またはエンドポイントに送信されます。バランシング モードのターゲット容量により、バックエンドの容量が上限に達するタイミングが判断されます。

次の表に、各プロダクトでサポートされるセッション アフィニティのオプションを示します。

表: サポートされているセッション アフィニティの設定
プロダクト セッション アフィニティのオプション
  • なし(NONE
  • クライアント IP(CLIENT_IP
  • 生成した Cookie(GENERATED_COOKIE
  • ヘッダー フィールド(HEADER_FIELD
  • HTTP Cookie(HTTP_COOKIE
  • ステートフル Cookie ベース アフィニティ(STRONG_COOKIE_AFFINITY

また、次の点にもご注意ください。

  • ロード バランシングの局所性ポリシー(localityLbPolicy)の有効なデフォルト値は、セッション アフィニティの設定に応じて変わります。セッション アフィニティが構成されていない場合(セッション アフィニティがデフォルト値の NONE のままの場合)、localityLbPolicy のデフォルト値は ROUND_ROBIN です。セッション アフィニティが NONE 以外の値に設定されている場合、localityLbPolicy のデフォルト値は MAGLEV です。
  • なし(NONE
  • クライアント IP(CLIENT_IP
  • 生成した Cookie(GENERATED_COOKIE
  • ヘッダー フィールド(HEADER_FIELD
  • HTTP Cookie(HTTP_COOKIE
  • ステートフル Cookie ベース アフィニティ(STRONG_COOKIE_AFFINITY

また、次の点にもご注意ください。

  • ロード バランシングの局所性ポリシー(localityLbPolicy)の有効なデフォルト値は、セッション アフィニティの設定に応じて変わります。セッション アフィニティが構成されていない場合(セッション アフィニティがデフォルト値の NONE のままの場合)、localityLbPolicy のデフォルト値は ROUND_ROBIN です。セッション アフィニティが NONE 以外の値に設定されている場合、localityLbPolicy のデフォルト値は MAGLEV です。
  • 内部アプリケーション ロードバランサの場合、重み付けによるトラフィック分割を使用する場合は、セッション アフィニティを構成しないでください。セッション アフィニティを構成した場合、重み付けトラフィック分割構成が優先されます。
内部パススルー ネットワーク ロードバランサ
  • なし(NONE
  • クライアント IP、宛先なし(CLIENT_IP_NO_DESTINATION
  • クライアント IP、宛先 IP(CLIENT_IP
  • クライアント IP、宛先 IP、プロトコル(CLIENT_IP_PROTO
  • クライアント IP、クライアント ポート、宛先 IP、宛先ポート、プロトコル(CLIENT_IP_PORT_PROTO

内部パススルー ネットワーク ロードバランサとセッション アフィニティの具体的な情報については、内部パススルー ネットワーク ロードバランサの概要をご覧ください。

外部パススルー ネットワーク ロードバランサ*
  • なし(NONE
  • クライアント IP、宛先 IP(CLIENT_IP
  • クライアント IP、宛先 IP、プロトコル(CLIENT_IP_PROTO
  • クライアント IP、クライアント ポート、宛先 IP、宛先ポート、プロトコル(CLIENT_IP_PORT_PROTO

外部パススルー ネットワーク ロードバランサとセッション アフィニティの具体的な情報については、外部 TCP / UDP 外部パススルー ネットワーク ロードバランサの概要をご覧ください。

  • リージョン外部プロキシ ネットワーク ロードバランサ
  • リージョン内部プロキシ ネットワーク ロードバランサ
  • なし(NONE
  • クライアント IP(CLIENT_IP

* この表は、バックエンド サービスベースの外部パススルー ネットワーク ロードバランサでサポートされているセッション アフィニティを示しています。ターゲット プールベースの外部パススルー ネットワーク ロードバランサは、バックエンド サービスを使用しません。代わりに、ターゲット プールsessionAffinity パラメータを通じて、外部パススルー ネットワーク ロードバランサのセッション アフィニティを設定します。

セッション アフィニティを構成する際は、次の点に留意してください。

  • 認証やセキュリティを目的としてセッション アフィニティに依存しないでください。ステートフル Cookie ベースのセッション アフィニティを除き、セッション アフィニティは、サービスの数と正常なバックエンドの数が変わるたびに失われるように設計されています。詳細については、セッション アフィニティの喪失をご覧ください。

  • --session-affinity フラグと --subsetting-policy フラグのデフォルト値はどちらも NONE です。異なる値を設定できるのは一度に 1 つだけです。

セッション アフィニティのタイプ

次のセクションでは、さまざまなタイプのセッション アフィニティについて説明します。

クライアント IP、宛先なしアフィニティ

「クライアント IP、宛先なしセッション アフィニティ(CLIENT_IP_NO_DESTINATION)」は、受信した各パケットの送信元 IP アドレスのみに基づく 1 タプルハッシュです。このセッション アフィニティは、内部パススルー ネットワーク ロードバランサでのみ使用できます。

このオプションは、パケットの宛先 IP アドレスに関係なく、パケットの送信元 IP アドレスのみに基づいて、クライアントからのすべてのパケットを同じバックエンド VM で処理する必要がある場合に便利です。このような状況は通常、内部パススルー ネットワーク ロードバランサが静的ルートのネクストホップである場合に発生します。詳細については、セッション アフィニティとネクストホップの内部パススルー ネットワーク ロードバランサをご覧ください。

クライアント IP アフィニティ

「クライアント IP セッション アフィニティ(CLIENT_IP)」は、パケットの送信元 IP アドレスと宛先 IP アドレスから作成された 2 タプルハッシュです。クライアント IP セッション アフィニティは、バックエンド サービスを使用するすべての Trusted Cloud ロードバランサで使用できます。外部パススルー ネットワーク ロードバランサでは、このセッション アフィニティ オプションは「クライアント IP、宛先 IP」になります。

クライアント IP アフィニティを使用する場合は、次の点に留意してください。

  • パケットがロードバランサに直接送信される場合、パケットの宛先 IP アドレスはロードバランサの転送ルールの IP アドレスと同じになります。

  • 静的ルートによってネクストホップの内部パススルー ネットワーク ロードバランサに転送されるパケットの宛先 IP アドレスは、ロードバランサの転送ルールの IP アドレスと一致しません。重要な情報については、セッション アフィニティとネクストホップの内部パススルー ネットワーク ロードバランサをご覧ください。

  • パケットが Trusted Cloud ロードバランサに配信される前に中間 NAT またはプロキシ システムによって処理されると、パケットの送信元 IP アドレスが元のクライアントに関連付けられた IP アドレスと一致しないことがあります。多くのクライアントが同じ有効な送信元 IP アドレスを共有する場合、一部のバックエンド VM は他の VM よりも多くの接続またはリクエストを受信する可能性があります。

生成された Cookie ベースのアフィニティを使用する場合、ロードバランサは最初の HTTP リクエストに応答して Set-Cookie ヘッダーに HTTP Cookie を含めます。

生成される Cookie の名前は、ロードバランサのタイプによって異なります。生成された Cookie は、次のプロダクトでサポートされています。

プロダクト Cookie 名
グローバル外部アプリケーション ロードバランサ GCLB
従来のアプリケーション ロードバランサ GCLB
リージョン外部アプリケーション ロードバランサ GCILB
クロスリージョン内部アプリケーション ロードバランサ GCILB
リージョン内部アプリケーション ロードバランサ GCILB
Cloud Service Mesh GCILB

生成された Cookie のパス属性は常にスラッシュ(/)になります。他のバックエンド サービスも生成された Cookie アフィニティを使用している場合、同じ URL マップ上のすべてのバックエンド サービスに適用されます。

affinityCookieTtlSec バックエンド サービス パラメータを使用して、Cookie の有効期間(TTL)値を 01,209,600 秒の範囲(両端を含む)で構成できます。affinityCookieTtlSec が指定されていない場合、デフォルトの TTL 値は 0 です。

クライアントが、HTTP リクエストの Cookie リクエスト ヘッダーに生成されたセッション アフィニティ Cookie を含めると、ロードバランサは、セッション アフィニティ Cookie が有効である限り、それらのリクエストを同じバックエンド インスタンスまたはエンドポイントに転送します。これを行うには、Cookie 値を、特定のバックエンド インスタンスまたはエンドポイントを参照するインデックスにマッピングし、生成された Cookie のセッション アフィニティ要件を満たすようにします。

生成された Cookie アフィニティを使用するには、次のバランシング モードと localityLbPolicy 設定を構成します。

  • バックエンド インスタンス グループの場合は、RATE バランシング モードを使用します。
  • バックエンド サービスの localityLbPolicy には、RING_HASH または MAGLEV を使用します。localityLbPolicy を明示的に設定しない場合、ロードバランサは暗黙のデフォルトとして MAGLEV を使用します。

詳細については、セッション アフィニティの喪失をご覧ください。

ヘッダー フィールド アフィニティ

ヘッダー フィールド アフィニティでは、バックエンド サービスの consistentHash.httpHeaderName フィールドの HTTP ヘッダーの値に基づいて、リクエストがバックエンドにルーティングされます。使用可能なすべてのバックエンドにリクエストを分散するには、各クライアントで異なる HTTP ヘッダー値を使用する必要があります。

次のロードバランサは、ヘッダー フィールド アフィニティを使用します。

* リージョン外部アプリケーション ロードバランサ * リージョン内部アプリケーション ロードバランサ

ヘッダー フィールド アフィニティは、次の条件を満たす場合にサポートされます。

  • ロード バランシングの局所性ポリシーが RING_HASH または MAGLEV である。
  • バックエンド サービスの consistentHash が、HTTP ヘッダーの名前(httpHeaderName)を指定する。

ヘッダー フィールド アフィニティをサポートするサービスについては、表: サポートされているセッション アフィニティの設定をご覧ください。

HTTP Cookie ベースのアフィニティを使用する場合、ロードバランサは最初の HTTP リクエストに応答して Set-Cookie ヘッダーに HTTP Cookie を含めます。Cookie の名前、パス、有効期間(TTL)を指定します。

HTTP Cookie ベースのアフィニティをサポートするプロダクトは次のとおりです。

  • すべてのアプリケーション ロードバランサ
  • Cloud Service Mesh

Cookie の TTL 値は、次のバックエンド サービス パラメータと有効な値を使用して、秒、秒未満(ナノ秒単位)、秒と秒未満(ナノ秒単位)のいずれかで構成できます。

  • consistentHash.httpCookie.ttl.seconds は、0315576000000 の値に設定できます(両端を含む)。
  • consistentHash.httpCookie.ttl.nanos は、0999999999 の値に設定できます(両端を含む)。単位はナノ秒であるため、999999999.999999999 秒を意味します。

consistentHash.httpCookie.ttl.secondsconsistentHash.httpCookie.ttl.nanos の両方が指定されていない場合は、代わりに affinityCookieTtlSec バックエンド サービス パラメータの値が使用されます。affinityCookieTtlSec が指定されていない場合、デフォルトの TTL 値は 0 です。

クライアントが、HTTP リクエストの Cookie リクエスト ヘッダーに HTTP セッション アフィニティ Cookie を含めると、ロードバランサは、セッション アフィニティ Cookie が有効である限り、それらのリクエストを同じバックエンド インスタンスまたはエンドポイントに転送します。これを行うには、Cookie 値を、特定のバックエンド インスタンスまたはエンドポイントを参照するインデックスにマッピングし、生成された Cookie のセッション アフィニティ要件を満たすようにします。

HTTP Cookie アフィニティを使用するには、次のバランシング モードと localityLbPolicy 設定を構成します。

  • バックエンド インスタンス グループの場合は、RATE バランシング モードを使用します。
  • バックエンド サービスの localityLbPolicy には、RING_HASH または MAGLEV を使用します。localityLbPolicy を明示的に設定しない場合、ロードバランサは暗黙のデフォルトとして MAGLEV を使用します。

詳細については、セッション アフィニティの喪失をご覧ください。

ステートフル Cookie ベース セッション アフィニティ

ステートフル Cookie ベースのアフィニティを使用する場合、ロードバランサは最初の HTTP リクエストに応答して Set-Cookie ヘッダーに HTTP Cookie を含めます。Cookie の名前、パス、有効期間(TTL)を指定します。

次のロードバランサは、ステートフル Cookie ベース アフィニティをサポートしています。

  • リージョン外部アプリケーション ロードバランサ
  • リージョン内部アプリケーション ロードバランサ

Cookie の TTL 値は、秒、秒未満(ナノ秒単位)、秒と秒未満(ナノ秒単位)のいずれかで構成できます。strongSessionAffinityCookie.ttl で表される期間は、2 週間を超える値(1,209,600 秒)には設定できません。

Cookie の値は、選択したバックエンド インスタンスまたはエンドポイントを値自体にエンコードすることで識別します。Cookie が有効である限り、クライアントが後続の HTTP リクエストの Cookie リクエスト ヘッダーにセッション アフィニティ Cookie を含めると、ロードバランサは、選択したバックエンド インスタンスまたはエンドポイントにリクエストを転送します。

他のセッション アフィニティ方法とは異なり、

  • ステートフル Cookie ベース アフィニティには、バランシング モードやロード バランシング局所性ポリシー(localityLbPolicy)に関する特定の要件はありません。

  • 自動スケーリングによってマネージド インスタンス グループに新しいインスタンスが追加されても、ステートフル Cookie ベース アフィニティは影響を受けません。

  • 選択したインスタンスが削除されない限り、自動スケーリングによってマネージド インスタンス グループからインスタンスが削除されても、ステートフル Cookie ベース アフィニティは影響を受けません。

  • 選択したインスタンスが削除されない限り、自動修復によってマネージド インスタンス グループからインスタンスが削除されても、ステートフル Cookie ベース アフィニティは影響を受けません。

詳細については、セッション アフィニティの喪失をご覧ください。

Cookie ベースのアフィニティの TTL がゼロの場合の意味

生成された Cookie アフィニティ、HTTP Cookie アフィニティ、ステートフル Cookie ベースのアフィニティなど、すべての Cookie ベースのセッション アフィニティには TTL 属性があります。

TTL が 0 秒の場合、ロードバランサは Cookie に Expires 属性を割り当てません。この場合、クライアントは Cookie をセッション Cookie として扱います。セッションの定義は、クライアントによって異なります。

  • ウェブブラウザなどの一部のクライアントは、ブラウジング セッション全体で Cookie を保持します。つまり、Cookie はアプリケーションが閉じられるまで複数のリクエストにわたって保持されます。

  • 他のクライアントは、セッションを単一の HTTP リクエストとして扱い、直後に Cookie を破棄します。

セッション アフィニティの喪失

アプリケーション ロードバランサとプロキシ ネットワーク ロードバランサのすべてのセッション アフィニティ オプションには、次の要件があります。

  • 選択したバックエンド インスタンスまたはエンドポイントは、バックエンドとして構成されたままにする必要があります。セッション アフィニティは、次のいずれかのイベントが発生すると破棄される可能性があります。

    • 選択したインスタンスをインスタンス グループから削除します。

    • マネージド インスタンス グループの自動スケーリングまたは自動修復により、選択したインスタンスがマネージド インスタンス グループから削除されます。

    • 選択したエンドポイントを NEG から削除します。

    • 選択したインスタンスまたはエンドポイントを含むインスタンス グループまたは NEG をバックエンド サービスから削除します。

  • 選択したバックエンド インスタンスまたはエンドポイントは正常な状態を維持する必要があります。選択したインスタンスまたはエンドポイントでヘルスチェックが失敗すると、セッション アフィニティが破棄される可能性があります。

  • グローバル外部アプリケーション ロードバランサ、従来のアプリケーション ロードバランサ、グローバル外部プロキシ ネットワーク ロードバランサ、従来のプロキシ ネットワーク ロードバランサの場合、ルーティング パスの変更後に、後続のリクエストまたは接続に別の第 1 レイヤの Google Front End(GFE)が使用されると、セッション アフィニティが破棄される可能性があります。インターネット上のクライアントから Google へのルーティング パスがリクエストまたは接続によって異なる場合は、別の第 1 レイヤの GFE が選択される可能性があります。

ステートフル Cookie ベースのセッション アフィニティを除き、アプリケーション ロードバランサとプロキシ ネットワーク ロードバランサのすべてのセッション アフィニティ オプションには、次の追加要件があります。

  • 選択したインスタンスまたはエンドポイントを含むインスタンス グループまたは NEG は、ターゲット容量で定義されている容量を満たしてはなりません。(リージョン マネージド インスタンス グループの場合、選択したインスタンスを含むインスタンス グループのゾーン コンポーネントがいっぱいになっていないこと)。インスタンス グループまたは NEG がいっぱいで、他のインスタンス グループまたは NEG がいっぱいでない場合は、セッション アフィニティが破棄される可能性があります。UTILIZATION バランシング モードを使用すると、満杯状態が予測できない方法で変化する可能性があるため、RATE バランシング モードまたは CONNECTION バランシング モードを使用して、セッション アフィニティが破損する可能性のある状況を最小限に抑える必要があります。

  • 構成されたバックエンド インスタンスまたはエンドポイントの合計数は一定にする必要があります。次のいずれかのイベントが 1 つ以上発生すると、構成されたバックエンド インスタンスまたはエンドポイントの数が変わり、セッション アフィニティが破損する可能性があります。

    • 新しいインスタンスまたはエンドポイントを追加する:

      • バックエンド サービスで、既存のインスタンス グループにインスタンスを追加します。
      • マネージド インスタンス グループの自動スケーリングでは、バックエンド サービスのマネージド インスタンス グループにインスタンスが追加されます。
      • バックエンド サービスで、既存の NEG にエンドポイントを追加します。
      • 空ではないインスタンス グループまたは NEG をバックエンド サービスに追加します。
    • 選択したインスタンスまたはエンドポイントだけでなく、インスタンスまたはエンドポイントを削除する:

      • インスタンス グループのバックエンドからインスタンスを削除した場合。
      • マネージド インスタンス グループの自動スケーリングまたは自動修復により、マネージド インスタンス グループのバックエンドからインスタンスが削除されます。
      • NEG バックエンドからエンドポイントを削除します。
      • 空ではない既存のバックエンド インスタンス グループまたは NEG をバックエンド サービスから削除します。
  • 正常なバックエンド インスタンスまたはエンドポイントの合計数は一定にする必要があります。次のいずれかのイベントが 1 つ以上発生すると、正常なバックエンド インスタンスまたはエンドポイントの数が変わり、セッション アフィニティが破損する可能性があります。

    • インスタンスまたはエンドポイントがヘルスチェックに合格し、異常な状態から正常な状態に変わります。
    • インスタンスまたはエンドポイントがヘルスチェックに失敗し、正常な状態から異常な状態に移行するか、タイムアウトします。

バックエンド サービスのタイムアウト

ほとんどの Trusted Cloud ロードバランサには、バックエンド サービスのタイムアウトがあります。デフォルト値は 30 秒です。指定できるタイムアウト値の範囲は 1~2,147,483,647 秒です。

  • HTTP、HTTPS、または HTTP/2 プロトコルを使用する外部アプリケーション ロードバランサと内部アプリケーション ロードバランサの場合、バックエンド サービスのタイムアウトは、HTTP(S) トラフィックのリクエストとレスポンスのタイムアウトになります。

    各ロードバランサのバックエンド サービスのタイムアウトの詳細については、以下をご覧ください。

  • 外部プロキシ ネットワーク ロードバランサの場合、タイムアウトはアイドル タイムアウトです。接続が削除されるまでの時間を変更するには、タイムアウト値を変更します。このアイドル タイムアウトは WebSocket 接続にも使用されます。

  • 内部パススルー ネットワーク ロードバランサと外部パススルー ネットワーク ロードバランサの場合、gcloud または API を使用してバックエンド サービス タイムアウトの値を設定できますが、値は無視されます。バックエンド サービスのタイムアウトは、これらのパススルー ロードバランサにとって意味がありません。

ヘルスチェック

バックエンドがインスタンス グループまたはゾーン NEG である各バックエンド サービスには、ヘルスチェックを関連付ける必要があります。

Trusted Cloud コンソールを使用してロードバランサを作成する場合は、必要に応じて、ロードバランサの作成時にヘルスチェックを作成するか、既存のヘルスチェックを参照できます。

Google Cloud CLI または API で、インスタンス グループまたはゾーン NEG バックエンドを使用してバックエンド サービスを作成する場合は、既存のヘルスチェックを参照する必要があります。必要なヘルスチェックの種類と範囲については、ヘルスチェックの概要のロードバランサ ガイドを参照してください。

詳細については、次のドキュメントをご覧ください。

IAP

IAP を使用すると、HTTPS によってアクセスされるアプリケーションの一元的な認可レイヤを確立できるため、ネットワーク レベルのファイアウォールに依存せずにアプリケーション レベルのアクセス制御モデルを使用できます。IAP は、特定の Application Load Balancer でサポートされています。

IAP は Cloud CDN と互換性がありません。同じバックエンド サービスで有効にすることはできません。

高度なトラフィック管理機能

ロードバランサに関連付けられたバックエンド サービスと URL マップで構成される高度なトラフィック管理機能については、以下をご覧ください。

API と gcloud リファレンス

バックエンド サービス リソースのプロパティの詳細については、次のリファレンスをご覧ください。

次のステップ

ロードバランサでバックエンド サービスを使用する方法については、次のドキュメントをご覧ください。