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

ゾーン ネットワーク エンドポイント グループ(NEG)は、バックエンド サービスのバックエンドとして使用できます。この構成の主なユースケースは、コンテナを VM にデプロイしてコンテナ内でサービスを実行できるようにすることです。VM 上で実行されるアプリケーションに細かくトラフィックを分散させることもできます。

このドキュメントでは、次の種類のロードバランサを介して、ゾーン ネットワーク エンドポイント グループを使用する方法について説明します。

次の種類のロードバランサでは、ゾーン NEG をバックエンドとして使用することはできません。

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

サーバーレス NEG については、サーバーレス ネットワーク エンドポイント グループの概要をご覧ください。

概要

ゾーン ネットワーク エンドポイント グループ(NEG)は、1 つのサブネット内の Google Cloud リソースの IP アドレスとポートの組み合わせのコレクションに相当するゾーンのリソースです。IP アドレスとポートの組み合わせは、ネットワーク エンドポイントと呼ばれます。

ゾーン ネットワーク エンドポイント グループは、HTTP(S)、内部 HTTP(S) の負荷分散や、TCP プロキシおよび SSL プロキシのロードバランサのバックエンド サービスのバックエンドとして使用できます。ゾーン NEG は内部 TCP / UDP ロードバランサのバックエンドとしては使用できません。ゾーン NEG バックエンドでは IP アドレスとポートを指定できるため、VM インスタンス内で実行中のアプリケーションやコンテナ間で細かくトラフィックを分散できます。

エンドポイントの関係

ネットワーク エンドポイント グループを作成する際には、ゾーン、ネットワーク、サブネットを選択します。すべてのエンドポイント IP アドレスは、ゾーン NEG と同じサブネット内に存在する必要があります。

選択したネットワークが自動モードのネットワークである場合は、サブネットの指定を省略できます。ただし、サブネットのゾーン NEG への関連付けはそのまま保持されます。ゾーン NEG を作成する際に自動モードのネットワークを指定して、サブネットを指定しない場合、使用されるサブネットは、ゾーン NEG に選択したゾーンを含むリージョンに自動的に作成されます。

ネットワーク エンドポイント グループは、現在のところ GCE_VM_IP_PORT タイプのみをサポートしています。つまり、個々のエンドポイントには Google Cloud VM に関連付けられている IP アドレスが必要です。エンドポイントをゾーン NEG に追加するときは、次の条件を満たす必要があります。

  • VM インスタンスの名前を指定する必要があります。VM インスタンスはゾーン NEG と同じゾーンにある必要があり、VPC ネットワーク内のネットワーク インターフェースは、そのゾーンを含む同じリージョンのサブネット内にある必要があります。

  • 1 つのゾーン NEG には最大 10,000 のエンドポイントを設定できます。10,000 のエンドポイントはすべて同じ VM 上に存在させることができます。各エンドポイントは、既存のゾーン NEG にエンドポイントを追加するときに VM を参照して作成されます。複数のゾーン NEG で作成されたエンドポイントが同一の VM を指し示すことができます。

    • VM インスタンスの指定に加えて、IP アドレスや、IP アドレスとポートの組み合わせを指定できます。指定する IP アドレスは、VM のプライマリ内部 IP アドレスか、ゾーン NEG と同じサブネット内の VM のエイリアス IP のいずれかです。

    • エンドポイントを追加するときに IP アドレスを指定しない場合は、VPC ネットワーク内の VM のプライマリ内部 IP アドレスが使用されます。

    • エンドポイントを追加するときにポートを指定しない場合は、ゾーン NEG にデフォルト ポートを定義しておく必要があります。エンドポイントでは、独自のポートを指定しない限り、デフォルトのポートが使用されます。つまり、ゾーン NEG の作成時にデフォルト ポートを指定するか、追加するエンドポイントごとにポートを指定する必要があります。

    • 1 つのゾーン NEG 内のエンドポイントはすべて、一意の IP アドレスとポートの組み合わせが必要です。ポートが IP アドレスに指定されていない場合、IP とデフォルト ポートを使用して組み合わせが作成されます。

エンドポイント、コンテナ、サービス

VM 内で実行するコンテナまたはアプリケーションに独自のネットワーク エンドポイントを作成するには、エイリアス IP アドレス機能を使用して、VM のプライマリ IP アドレスまたは VM に割り当てられたセカンダリ IP アドレスを使用する必要があります。VM で実行中のコンテナまたはアプリケーションで実行されているソフトウェアは、ネットワーク エンドポイントで使用される IP アドレスにバインドするように構成する必要があります。

NEG は特に GKE で活用できます。GKE でゾーン NEG を使用する方法については、コンテナ ネイティブの負荷分散を使用するをご覧ください。

NEG は、VM 全体ではなく、ソフトウェア サービスを表す IP アドレスとポートの論理グループを作成できる点でも有益です。Apache MesosCloud Foundry などのその他のオーケストレーターによって管理されるマイクロサービス(Google Cloud VM で実行)の IP アドレスをエンドポイントにできます。

負荷分散

バックエンド サービス

ゾーン NEG は、ロードバランサのバックエンド サービスのバックエンドとして使用できます。ゾーン NEG をバックエンド サービスのバックエンドとして使用する場合、そのバックエンド サービスのその他のすべてのバックエンドもゾーン NEG でなければなりません。インスタンス グループとゾーン NEG を同じバックエンド サービスのバックエンドとして使用することはできません。

同じネットワーク エンドポイント(IP アドレスとポートの組み合わせ)を複数のゾーン NEG に追加できます。複数のバックエンド サービスのバックエンドとして、同じゾーン NEG を使用できます。

ゾーン NEG をバックエンドに使用するバックエンド サービスで使用できる分散モードは、RATECONNECTION のみです。ゾーン NEG をバックエンドとして使用するバックエンド サービスには、UTILIZATION の分散モードを使用できません

HTTP(S)、内部 HTTP(S)、TCP プロキシ、SSL プロキシの負荷分散

スタンダード ティアまたはプレミアム ティアのネットワーク サービスを使用して、ロードバランサのゾーン ネットワーク エンドポイント グループを使用できます。

次の図は、ゾーン NEG がバックエンドである場合の、HTTP(S) ロードバランサ、TCP / SSL プロキシ ロードバランサ、内部 HTTP(S) ロードバランサの構成要素を示しています。

  • 各プレミアム ティア HTTP(S)、SSL プロキシ、および TCP プロキシのロードバランサには、適切なターゲット プロキシ オブジェクトにトラフィックを転送する独自のグローバル外部転送ルールがあります。

  • 各スタンダード ティア HTTP(S)、SSL プロキシ、および TCP プロキシのロードバランサには、適切なターゲット プロキシ オブジェクトにトラフィックを転送する独自のリージョン外部転送ルールがあります。

  • 各内部 HTTP(S) ロードバランサには、適切なターゲット プロキシ オブジェクトにトラフィックを転送する独自のリージョンの内部マネージド転送ルールがあります。

  • ターゲット HTTP(S) プロキシの場合、使用されるバックエンド サービスは、URL マップでリクエストのホスト名とパスを確認して決定されます。外部 HTTP(S) ロードバランサと内部 HTTP(S) ロードバランサには、URL マップから参照される複数のバックエンド サービスを設定できます。

  • ターゲット TCP またはターゲット SSL プロキシには、バックエンド サービスを 1 つのみ定義できます。

  • バックエンド サービスによってバックエンド ゾーン NEG にトラフィックが転送されます。リクエストごとに、ロードバランサはゾーン NEG の 1 つからネットワーク エンドポイントを選択し、トラフィックを送信します。

負荷分散のゾーン ネットワーク エンドポイント グループ(クリックして拡大)
負荷分散のゾーン ネットワーク エンドポイント グループ(クリックして拡大)

コンテナを使用した負荷分散

次の例は、VM のコンテナ内で実行されるマイクロサービス間でトラフィックがどのように分散されるかを示しています。VM は、サブネットのエイリアス IP 範囲を使用するように設定され、コンテナによって使用されるアドレスです。HTTP(S)、内部 HTTP(S)、TCP プロキシ、または SSL プロキシ負荷分散のいずれかが使用されます。

コンテナを使用したゾーン ネットワーク エンドポイント グループの負荷分散(クリックして拡大)
コンテナを使用したゾーン ネットワーク エンドポイント グループの負荷分散(クリックして拡大)

この例は、次のように設定できます。

  1. VM 上のコンテナまたはサービスを構成します。複数のコンテナを各 VM で実行する場合や、コンテナの IP アドレスが必要な場合は、VM のエイリアス IP アドレスを構成します。サービスを構成する場合、少なくともポート番号が異なるようにして、2 つ以上のサービスを同じ VM 上で実行する必要があります。
  2. ゾーン ネットワーク エンドポイント グループを作成します。Kubernetes または Google Kubernetes Engine を使用している場合、Ingress コントローラがゾーン NEG を作成するため、この手順は不要です。
  3. ネットワーク エンドポイントをゾーン ネットワーク エンドポイント グループに追加します。
  4. ヘルスチェックを作成します。
  5. バックエンド サービスを作成します。
  6. HTTP(S) 負荷分散の場合は、URL マップを作成し、バックエンド サービスを接続します。
  7. ターゲット HTTP プロキシ、ターゲット HTTPS プロキシ、ターゲット SSL プロキシ、ターゲット TCP プロキシなど、適切な種類のターゲット プロキシを作成します。ターゲット プロキシを URL マップ(HTTP(S) 負荷分散の場合)またはバックエンド サービス(TCP プロキシおよび SSL プロキシの負荷分散の場合)にリンクします。
  8. 転送ルールを作成し、ターゲット プロキシにリンクします。

gcloud コマンドライン ツールを使用した構成例については、負荷分散ゾーン ネットワーク エンドポイント グループの例をご覧ください。

制限事項

  • ゾーン NEG はレガシー ネットワークでは使用できません。
  • ネットワーク エンドポイントの IP アドレスには、指定した VM インスタンスに属するプライマリ IP またはエイリアス IP を指定する必要があります。

上限

  • ゾーン NEG は、ロードバランサのバックエンドとしてのみ使用できます。外部 HTTP(S)、内部 HTTP(S)、TCP プロキシ、SSL プロキシなどの種類のロードバランサはゾーン NEG に対応しています。
  • HTTP(S) 負荷分散の場合は RATE 分散モードのみがサポートされ、TCP / SSL 負荷分散の場合は CONNECTION がサポートされます。使用率ベースの負荷分散はサポートされていません。
  • NEG をバックエンドとして使用するバックエンド サービスの場合は、バックエンドとしてインスタンス グループを使用できません。
  • ゾーン NEG には現在、内部 IP アドレス(RFC 1918)のみを追加できます。
  • プロジェクトごとの NEG、バックエンド サービスごとの NEG、NEG ごとのエンドポイントなどの NEG 割り当てについては、負荷分散の割り当てページをご覧ください。

トラブルシューティング

トラフィックがエンドポイントに到達しない

サービスが構成されると、通常、新しいエンドポイントはゾーン NEG に接続後にヘルスチェックに応答できれば到達可能になります。

トラフィックがエンドポイントに到達できず、HTTP(S) で 502 エラーコードが生成されるか、TCP / SSL ロードバランサで接続が拒否される場合は、次の点を確認してください。

  • ファイアウォール ルールで、エンドポイントへの TCP トラフィックの受信を、130.211.0.0/2235.191.0.0/16 の範囲で許可します。
  • エンドポイントが正常であることを確認するには、以下のように gcloud を使用するか、showHealth パラメータ セットを SHOW に設定してバックエンド サービス リソースの getHealth API またはゾーン NEG の listEndpoints API を呼び出します。次の gcloud コマンドによって、ネットワーク エンドポイント別に正常性の情報が表示されます。
gcloud compute network-endpoint-groups list-network-endpoints NAME \
    --zone=ZONE

次のステップ