負荷分散におけるネットワーク エンドポイント グループのコンセプト

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

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

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

概要

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

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

エンドポイントの関係

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

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

ネットワーク エンドポイント グループは、現在のところ GCE_VM_IP_PORT タイプのみをサポートしています。 つまり、個々のエンドポイントには GCP 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 などのその他のオーケストレータによって管理されるマイクロサービス(GCP 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 には最大で 10,000 のエンドポイントを組み込むことができます。
  • プロジェクトあたりの NEG の最大数は 100 です。この上限を増やす必要がある場合は、GCP セールスチームにお問い合わせください。
  • NEG をバックエンドとして使用するバックエンド サービスの場合は、バックエンドとしてインスタンス グループを使用できません。
  • 各バックエンド サービスには最大 50 個の NEG を組み込むことができます。NEG は、同じゾーン内にも、異なる複数のゾーンにも配置できます。
  • NEG には現在、内部 IP アドレス(RFC 1918)のみを追加できます。

トラブルシューティング

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

サービスが構成されると、通常、新しいエンドポイントは 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 --zone=ZONE

次のステップ