ハイブリッド接続でクロスリージョン内部プロキシ ネットワーク ロードバランサを設定する

このページでは、クロスリージョン内部プロキシ ネットワーク ロードバランサをデプロイして、オンプレミスまたは他のパブリック クラウドにあり、ハイブリッド接続経由で到達可能なネットワーク エンドポイントにトラフィックをロード バランシングする方法について説明します。

まだ行っていない場合は、ハイブリッド接続 NEG の概要を確認して、ハイブリッド ロード バランシングを設定するためのネットワーク要件を把握してください。

設定の概要

この例では、次の図に示すように、ゾーンとハイブリッド接続の NEG バックエンドが混在する環境用にクロスリージョン内部プロキシ ネットワーク ロードバランサを設定します。

ゾーン接続とハイブリッド接続の NEG バックエンドが混在するクロスリージョン内部プロキシ ネットワーク ロードバランサの例。
ゾーン接続とハイブリッド接続の NEG バックエンドが混在するクロスリージョン内部プロキシ ネットワーク ロードバランサの例(クリックして拡大)。

ハイブリッド ロード バランシングのデプロイメントを設定する前に、ハイブリッド接続を構成する必要があります。選択したハイブリッド接続プロダクトに応じて、Cloud VPN または Cloud Interconnect(Dedicated または Partner)のいずれかを使用します。

権限

ハイブリッド ロード バランシングを設定するには、次の権限が必要です。

  • Google Cloud

    • Google Cloud とオンプレミス環境または他のクラウド環境との間のハイブリッド接続を確立する権限。必要な権限の一覧については、関連する Network Connectivity プロダクトのドキュメントをご覧ください。
    • ハイブリッド接続 NEG とロードバランサを作成する権限。このガイドで説明するタスクの実行に必要な権限は、Compute ロードバランサ管理者のロールroles/compute.loadBalancerAdmin)に含まれています。
  • オンプレミス環境または Google Cloud 以外のクラウド環境

    • IP:Port の組み合わせで Google Cloud からオンプレミス環境または他のクラウド環境のサービスに到達できるように、ネットワーク エンドポイントを構成する権限。詳細については、お使いの環境のネットワーク管理者に問い合わせてください。
    • Google のヘルスチェック プローブがエンドポイントに到達することを許可するように、ファイアウォール ルールをオンプレミス環境または他のクラウド環境に作成する権限。

さらに、このページの手順を完了するには、ハイブリッド接続 NEG、ロードバランサ、ゾーン NEG(およびそれらのエンドポイント)を作成して、ロードバランサの Google Cloud ベースのバックエンドとして機能させる必要があります。

そのためには、プロジェクトのオーナーまたは編集者であるか、次の Compute Engine IAM のロールが必要です。

タスク 必要なロール
ネットワーク、サブネット、ロードバランサ コンポーネントの作成 Compute ネットワーク管理者roles/compute.networkAdmin
ファイアウォール ルールの追加と削除 Compute セキュリティ管理者roles/compute.securityAdmin
インスタンスの作成 Compute インスタンス管理者roles/compute.instanceAdmin

ハイブリッド接続を確立する

オンプレミス環境または他のクラウド環境と Google Cloud を接続するには、Cloud Router とともに Cloud Interconnect VLAN アタッチメントまたは Cloud VPN トンネルを使用して、ハイブリッド接続を確立する必要があります。高可用性接続の使用をおすすめします。

グローバル動的ルーティングが有効になっている Cloud Router は、Border Gateway Protocol(BGP)を介して特定のエンドポイントを学習し、Google Cloud VPC ネットワークにプログラムします。リージョン動的ルーティングはサポートされていません。静的ルートもサポートされていません。

Cloud Interconnect と Cloud VPN のいずれかの構成に使用する VPC ネットワークは、ハイブリッド ロード バランシングのデプロイに使用するものと同じネットワークです。VPC ネットワークのサブネットの CIDR 範囲がリモートの CIDR 範囲と競合しないようにしてください。IP アドレスが重複する場合、リモート接続よりもサブネット ルートが優先されます。

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

Google Cloud の外部にある環境を設定する

次の手順で、ハイブリッド ロード バランシング用のオンプレミス環境またはその他のクラウド環境を設定します。

  • オンプレミス サービスを Google Cloud(IP:Port)に公開するようにネットワーク エンドポイントを構成します。
  • オンプレミス環境または他のクラウド環境でファイアウォール ルールを構成します。
  • プライベート環境への特定の必要なルートをアドバタイズするように Cloud Router を構成します。

ネットワーク エンドポイントを設定する

ハイブリッド接続を設定したら、オンプレミス環境または他のクラウド環境内に、IP:port の組み合わせを使用して Cloud Interconnect または Cloud VPN 経由で到達可能なネットワーク エンドポイントを構成します。この IP:port の組み合わせは、このプロセスの後半で Google Cloud で作成されるハイブリッド接続 NEG の 1 つ以上のエンドポイントとして構成されます。

IP エンドポイントへのパスが複数ある場合、ルーティングは Cloud Router の概要で説明されているように動作します。

ファイアウォール ルールを設定する

オンプレミス環境またはその他のクラウド環境に、次のファイアウォール ルールを作成する必要があります。

  • オンプレミス環境またはその他のクラウド環境で上り(内向き)許可ファイアウォール ルールを作成して、リージョンのプロキシ専用サブネットからのトラフィックがエンドポイントに到達できるようにします。
  • ハイブリッド NEG では、Google のヘルスチェック プローブ範囲を許可リストに登録する必要はありません。ただし、1 つのバックエンド サービスでハイブリッド NEG とゾーン NEG の組み合わせを使用している場合は、ゾーン NEG の Google ヘルスチェック プローブ範囲を許可リストに登録する必要があります。

オンプレミス環境またはその他のクラウド環境に次のカスタム IP 範囲をアドバタイズするように、Cloud Router を構成します。

  • リージョンのプロキシ専用サブネットの範囲。

Google Cloud 環境を設定する

以降のステップでは、環境間のハイブリッド接続の構成に使用した VPC ネットワーク(この手順では NETWORK)を使用します。

また、使用するリージョン(この手順では REGION1REGION2)が Cloud VPN トンネルまたは Cloud Interconnect VLAN の作成に使用したリージョンと同じであることを確認します。

バックエンド サブネットを構成する

このサブネットは、ロードバランサのゾーン NEG バックエンドの作成に使用します。

コンソール

  1. Google Cloud コンソールの [VPC ネットワーク] ページに移動します。

    [VPC ネットワーク] に移動

  2. 環境間のハイブリッド接続の構成に使用されたネットワークに移動します。

  3. [サブネット] セクションで次の設定を行います。

    • [サブネット作成モード] を [カスタム] に設定します。
    • [新しいサブネット] セクションに、次の情報を入力します。
      • 名前: LB_SUBNET_NAME1
      • リージョン: REGION1
      • IP アドレス範囲: LB_SUBNET_RANGE1
    • [完了] をクリックします。
  4. [作成] をクリックします。

  5. 上記の手順を繰り返し、REGION2 に別のサブネット LB_SUBNET_NAME2 を作成します。

gcloud

  1. 環境間のハイブリッド接続の構成に使用したネットワークにサブネットを作成します。

    gcloud compute networks subnets create LB_SUBNET_NAME1 \
        --network=NETWORK \
        --range=LB_SUBNET_RANGE \
        --region=REGION1
    
    gcloud compute networks subnets create LB_SUBNET_NAME2 \
        --network=NETWORK \
        --range=LB_SUBNET_RANGE2 \
        --region=REGION2
    

次のように置き換えます。

  • LB_SUBNET_NAME1LB_SUBNET_NAME2: サブネットの名前
  • LB_SUBNET_RANGE1LB_SUBNET_RANGE2: サブネットの IP アドレス範囲
  • REGION1REGION2: ロードバランサを構成したリージョン

プロキシ専用サブネットを構成する

プロキシ専用サブネットには、Google がユーザーに代わって Envoy プロキシを実行する際に使用する一連の IP アドレスが用意されています。このプロキシは、クライアントからの接続を終端し、バックエンドへの新しい接続を作成します。

このプロキシ専用サブネットは、VPC ネットワークの同じリージョン内のすべての Envoy ベースのロードバランサで使用されます。特定の目的では、リージョンごと、ネットワークごとにアクティブなプロキシ専用サブネットが 1 つだけの場合があります。

gcloud

gcloud compute networks subnets create コマンドを使用して、プロキシ専用サブネットを作成します。

    gcloud beta compute networks subnets create PROXY_ONLY_SUBNET_NAME \
        --purpose=GLOBAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=REGION1 \
        --network=NETWORK \
        --range=PROXY_ONLY_SUBNET_RANGE1
    
    gcloud beta compute networks subnets create PROXY_ONLY_SUBNET_NAME1 \
        --purpose=GLOBAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=REGION2 \
        --network=NETWORK \
        --range=PROXY_ONLY_SUBNET_RANGE2
    

次のように置き換えます。

  • PROXY_ONLY_SUBNET_NAMEPROXY_ONLY_SUBNET_NAME1: プロキシ専用サブネットの名前
  • PROXY_ONLY_SUBNET_RANGE1PROXY_ONLY_SUBNET_RANGE2: プロキシ専用サブネットの IP アドレス範囲
  • REGION1REGION2: ロードバランサを構成したリージョン

API

subnetworks.insert メソッドを使用してプロキシ専用サブネットを作成します。PROJECT_ID は実際のプロジェクト ID に置き換えます。

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION1/subnetworks

    {
      "name": "PROXY_ONLY_SUBNET_NAME",
      "ipCidrRange": "PROXY_ONLY_SUBNET_RANGE1",
      "network": "projects/PROJECT_ID/global/networks/NETWORK",
      "region": "projects/PROJECT_ID/regions/REGION1",
      "purpose": "GLOBAL_MANAGED_PROXY",
      "role": "ACTIVE"
    }
  
    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION2/subnetworks

    {
      "name": "PROXY_ONLY_SUBNET_NAME1",
      "ipCidrRange": "PROXY_ONLY_SUBNET_RANGE2",
      "network": "projects/PROJECT_ID/global/networks/NETWORK",
      "region": "projects/PROJECT_ID/regions/REGION2",
      "purpose": "GLOBAL_MANAGED_PROXY",
      "role": "ACTIVE"
    }
  

ファイアウォール ルールを作成する

この例では、Google Cloud 上のゾーン NEG バックエンド用に次のファイアウォール ルールを作成します。

  • fw-allow-health-check: ロードバランスされているインスタンスに適用される上り(内向き)ルール。Google Cloud ヘルスチェック システム(130.211.0.0/2235.191.0.0/16)からのトラフィックを許可します。この例では、ターゲットタグ allow-health-check を使用して、適用するゾーン NEG を識別します。
  • fw-allow-ssh: 任意のアドレスから TCP ポート 22 への SSH 受信接続を許可する上り(内向き)ルール。このルールには、送信元の IP 範囲をより限定的に指定できます。たとえば、SSH セッションを開始するシステムの IP 範囲を指定できます。この例では、ターゲットタグ allow-ssh を使用して、適用する VM を識別させています。
  • fw-allow-proxy-only-subnet: プロキシ専用サブネットからの接続がゾーン NEG バックエンドに到達することを許可する上り(内向き)ルール。

コンソール

  1. Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。

    [ファイアウォール ポリシー] に移動

  2. [ファイアウォール ルールを作成] をクリックして、ヘルスチェック プローブからのトラフィックを許可するルールを作成します。

    1. [名前] に「fw-allow-health-check」と入力します。
    2. [ネットワーク] で NETWORK を選択します。
    3. [ターゲット] で [指定されたターゲットタグ] を選択します。
    4. [ターゲットタグ] フィールドに「allow-health-check」を入力します。
    5. [ソースフィルタ] を [IPv4 範囲] に設定します。
    6. [送信元 IPv4 範囲] を 130.211.0.0/2235.191.0.0/16 に設定します。
    7. [プロトコルとポート] で [指定したプロトコルとポート] を選択します。
    8. [TCP] を選択し、ポート番号に「80」と入力します。
    9. [作成] をクリックします。
  3. [ファイアウォール ルールを作成] を再度クリックして、SSH 接続の受信を許可するルールを作成します。

    1. 名前: fw-allow-ssh
    2. ネットワーク: NETWORK
    3. 優先度: 1000
    4. トラフィックの方向: 上り(内向き)
    5. 一致したときのアクション: 許可
    6. ターゲット: 指定されたターゲットタグ
    7. ターゲットタグ: allow-ssh
    8. ソースフィルタ: IPv4 の範囲
    9. 送信元 IPv4 範囲: 0.0.0.0/0
    10. プロトコルとポート: [指定したプロトコルとポート] を選択します。
    11. [TCP] を選択し、ポート番号に「22」と入力します。
    12. [作成] をクリックします。
  4. [ファイアウォール ルールを作成] を再度クリックして、プロキシ専用サブネットからの受信接続を許可するルールを作成します。

    1. 名前: fw-allow-proxy-only-subnet
    2. ネットワーク: NETWORK
    3. 優先度: 1000
    4. トラフィックの方向: 上り(内向き)
    5. 一致したときのアクション: 許可
    6. ターゲット: 指定されたターゲットタグ
    7. ターゲットタグ: allow-proxy-only-subnet
    8. ソースフィルタ: IPv4 の範囲
    9. 送信元 IPv4 範囲: PROXY_ONLY_SUBNET_RANGE1PROXY_ONLY_SUBNET_RANGE2
    10. プロトコルとポート: [指定したプロトコルとポート] を選択します。
    11. [TCP] を選択し、ポート番号に「80」と入力します。
    12. [作成] をクリックします。

gcloud

  1. Google Cloud ヘルスチェックが TCP ポート 80 でバックエンド インスタンスに到達できるように fw-allow-health-check-and-proxy ルールを作成します。

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=NETWORK \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp:80
    
  2. ネットワーク タグ allow-ssh を使用して、VM との SSH 接続を許可する fw-allow-ssh ファイアウォール ルールを作成します。source-ranges を省略すると、Google Cloud は任意の送信元を対象とするものとしてルールを解釈します。

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=NETWORK \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. ロードバランサが TCP ポート 80 でバックエンド インスタンスと通信することを許可するプロキシ専用サブネットの上り(内向き)許可ファイアウォール ルールを作成します。

    gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
        --network=NETWORK \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-proxy-only-subnet \
        --source-ranges=PROXY_ONLY_SUBNET_RANGE1,PROXY_ONLY_SUBNET_RANGE2 \
        --rules=tcp:80
    

ゾーン NEG を設定する

Google Cloud ベースのバックエンドの場合は、ハイブリッド接続を構成したリージョンに複数のゾーン NEG を構成することをおすすめします。

この例では、REGION1 にゾーン NEG を設定します(GCE_VM_IP_PORT タイプのエンドポイント)。まず、NEG_ZONE1 ゾーンに VM を作成します。次に、NEG_ZONE2 にゾーン NEG を作成し、VM のネットワーク エンドポイントを NEG に追加します。高可用性をサポートするために、REGION2 リージョンに同様のゾーン NEG を設定します。一方のリージョンのバックエンドが停止した場合、トラフィックはもう一方のリージョンにフェイルオーバーされます。

VM を作成する

コンソール

  1. Google Cloud コンソールで [VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. 次の名前とゾーンの組み合わせを使用して、VM ごとに手順 3 から 8 を繰り返します。

    • vm-a1 の名前:
      • ゾーン: NEG_ZONE1(リージョン REGION1 内)
      • サブネット: LB_SUBNET_NAME1
    • vm-b1 の名前:
      • ゾーン: NEG_ZONE2(リージョン REGION2 内)
      • サブネット: LB_SUBNET_NAME2
  3. [インスタンスを作成] をクリックします。

  4. 前の手順で示したように名前を設定します。

  5. [リージョン] で、前の手順で示したように選択します。

  6. [ゾーン] で、前の手順で示したように選択します。

  7. [ブートディスク] セクションで、ブートディスク オプションに Debian オペレーティング システムと 10(buster)バージョンが選択されていることを確認します。必要に応じてイメージを変更するには、[選択] をクリックします。

  8. [詳細オプション] セクションで、[ネットワーキング] を開いて次の操作を行います。

    • ネットワーク タグallow-sshallow-health-checkallow-proxy-only-subnet)を追加します。
    • [ネットワーク インターフェース] セクションで、[ネットワーク インターフェースを追加] をクリックし、次のように変更してから、[完了] をクリックします。
      • ネットワーク: NETWORK
      • サブネットワーク: 前の手順と同じ。
      • プライマリ内部 IP: エフェメラル(自動)
      • 外部 IP: エフェメラル
    • [管理] を開きます。次のスクリプトの内容を [自動化] フィールドにコピーして貼り付けます。スクリプトの内容はすべての VM で同じです。

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
      
  9. [作成] をクリックします。

gcloud

VM とそのゾーンの名前にこれらの組み合わせを使用して、次のコマンドを実行して VM を作成します。スクリプトの内容は両方の VM で同じです。

  • vm-a1VM_NAME
    • ゾーン GCP_NEG_ZONE(リージョン REGION1NEG_ZONE1 として)
    • サブネット LB_SUBNET_NAMELB_SUBNET_NAME1 として)
  • vm-b1VM_NAME

    • ゾーン GCP_NEG_ZONE(リージョン REGION2NEG_ZONE2 として)
    • サブネット LB_SUBNET_NAMELB_SUBNET_NAME2 として)
    gcloud compute instances create VM_NAME \
        --zone=GCP_NEG_ZONE \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check,allow-proxy-only-subnet \
        --subnet=LB_SUBNET_NAME \
        --metadata=startup-script='#! /bin/bash
          apt-get update
          apt-get install apache2 -y
          a2ensite default-ssl
          a2enmod ssl
          vm_hostname="$(curl -H "Metadata-Flavor:Google" \
          http://metadata.google.internal/computeMetadata/v1/instance/name)"
          echo "Page served from: $vm_hostname" | \
          tee /var/www/html/index.html
          systemctl restart apache2'
    

ゾーン NEG を作成する

コンソール

ゾーン ネットワーク エンドポイント グループを作成するには:

  1. Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。

    [ネットワーク エンドポイント グループ] に移動

  2. 次の名前とゾーンの組み合わせを使用して、ゾーン NEG ごとに手順 3 から 8 を繰り返します。

    • 名前: neg-1
      • ゾーン: NEG_ZONE1(リージョン REGION1 内)
      • サブネット: LB_SUBNET_NAME1
    • 名前: neg-2
      • ゾーン: NEG_ZONE2(リージョン REGION2 内)
      • サブネット: LB_SUBNET_NAME2
  3. [ネットワーク エンドポイント グループを作成] をクリックします。

  4. 前の手順で示したように名前を設定します。

  5. [ネットワーク エンドポイント グループの種類] で [ネットワーク エンドポイント グループ(ゾーン)] を選択します。

  6. [ネットワーク] で NETWORK を選択します。

  7. 前の手順で示したサブネットワークを選択します。

  8. 前の手順で示したゾーンを選択します。

  9. [デフォルト ポート] で「80」と入力します。

  10. [作成] をクリックします。

エンドポイントをゾーン NEG に追加します。

  1. Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。

    [ネットワーク エンドポイント グループ] に移動

  2. 前の手順で作成したネットワーク エンドポイント グループの名前をクリックします。[ネットワーク エンドポイント グループの詳細] ページが表示されます。

  3. [このグループのネットワーク エンドポイント] セクションで [ネットワーク エンドポイントを追加] をクリックします。[ネットワーク エンドポイントの追加] ページが表示されます。

  4. [VM インスタンス] を選択して、ネットワーク エンドポイントとして内部 IP アドレスを追加します。[ネットワーク インターフェース] セクションに、VM の名前、ゾーン、サブネットが表示されます。

  5. 新しいネットワーク エンドポイントの IP アドレスを入力します。

  6. ポートタイプを選択します。

    1. [デフォルト] を選択すると、エンドポイントはネットワーク エンドポイント グループのすべてのエンドポイントにデフォルト ポート 80 を使用します。この例では、Apache サーバーがポート 80 でリクエストを配信しているため、これで十分です。
    2. [カスタム] を選択した場合は、使用するエンドポイントのポート番号を入力します。
  7. 他のエンドポイントを追加するには、[ネットワーク エンドポイントを追加] をクリックし、前の手順を繰り返します。

  8. すべてのエンドポイントを追加したら、[作成] をクリックします。

gcloud

  1. 名前、ゾーン、サブネットの組み合わせを使用して、(GCE_VM_IP_PORT エンドポイントを含む)ゾーン NEG を作成します。gcloud compute network-endpoint-groups create コマンドを使用します。

    • 名前: neg-1
      • ゾーン GCP_NEG_ZONE: リージョン REGION1NEG_ZONE1
      • サブネット LB_SUBNET_NAME: LB_SUBNET_NAME1
    • 名前: neg-2
      • ゾーン GCP_NEG_ZONE: リージョン REGION2NEG_ZONE2
      • サブネット LB_SUBNET_NAME: LB_SUBNET_NAME2
    gcloud compute network-endpoint-groups create GCP_NEG_NAME \
        --network-endpoint-type=GCE_VM_IP_PORT \
        --zone=GCP_NEG_ZONE \
        --network=NETWORK \
        --subnet=LB_SUBNET_NAME
    

    次の手順で説明するように、NEG の作成時に --default-port オプションを使用してポートを指定するか、各エンドポイントのポート番号を指定します。

  2. エンドポイントを neg1neg2 に追加します。

    gcloud compute network-endpoint-groups update neg1 \
        --zone=NEG_ZONE1 \
        --add-endpoint='instance=vm-a1,port=80'
    
    gcloud compute network-endpoint-groups update neg2 \
        --zone=NEG_ZONE2 \
        --add-endpoint='instance=vm-b1,port=80'
    

ハイブリッド接続 NEG を設定する

NEG を作成するときは、Google Cloud とオンプレミスまたは他のクラウド環境との間の地理的距離を最小限に抑えるゾーンを使用します。たとえば、ドイツのフランクフルトのオンプレミス環境にサービスをホストする場合、NEG を作成するときに europe-west3-a Google Cloud ゾーンを指定できます。

また、Cloud Interconnect を使用している場合は、NEG の作成に使用するゾーンは、Cloud Interconnect アタッチメントが構成されているリージョンに存在しています。

ハイブリッド NEG は、分散 Envoy ヘルスチェックのみをサポートします。

コンソール

ハイブリッド接続ネットワーク エンドポイント グループを作成するには:

  1. Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。

    [ネットワーク エンドポイント グループ] に移動

  2. [ネットワーク エンドポイント グループを作成] をクリックします。

  3. 次の名前とゾーンの組み合わせを使用して、ハイブリッド NEG ごとに手順 4~9 を繰り返します。

    • 名前 ON_PREM_NEG_NAME: hybrid-1
      • ゾーン: ON_PREM_NEG_ZONE1
      • サブネット: LB_SUBNET_NAME1
    • 名前 ON_PREM_NEG_NAME: hybrid-2
      • ゾーン: ON_PREM_NEG_ZONE2
      • サブネット: LB_SUBNET_NAME2
  4. 前の手順で示したように名前を設定します。

  5. ネットワーク エンドポイント グループの種類として [ハイブリッド接続ネットワーク エンドポイント グループ(ゾーン)] を選択します。

  6. [ネットワーク] で NETWORK を選択します。

  7. [サブネット] で、前の手順で示したように選択します。

  8. [ゾーン] で、前の手順で示したように選択します。

  9. デフォルト ポートを入力します。

  10. [作成] をクリックします。

ハイブリッド接続 NEG にエンドポイントを追加します。

  1. Google Cloud コンソールで、[ネットワーク エンドポイント グループ] ページに移動します。

    [ネットワーク エンドポイント グループ] に移動

  2. 前の手順で作成したネットワーク エンドポイント グループの名前をクリックします。[ネットワーク エンドポイント グループの詳細] ページが表示されます。

  3. [このグループのネットワーク エンドポイント] セクションで [ネットワーク エンドポイントを追加] をクリックします。[ネットワーク エンドポイントの追加] ページが表示されます。

  4. 新しいネットワーク エンドポイントの IP アドレスを入力します。

  5. ポートタイプを選択します。

    1. [デフォルト] を選択すると、エンドポイントはネットワーク エンドポイント グループのすべてのエンドポイントにデフォルト ポートを使用します。
    2. [カスタム] を選択すると、使用するエンドポイントに異なるポート番号を入力できます。
  6. 他のエンドポイントを追加するには、[ネットワーク エンドポイントを追加] をクリックし、前の手順を繰り返します。

  7. Google Cloud 以外のエンドポイントをすべて追加したら、[作成] をクリックします。

gcloud

  1. 次の名前の組み合わせを使用してハイブリッド接続 NEG を作成します。gcloud compute network-endpoint-groups create コマンドを使用します。

    • 名前 ON_PREM_NEG_NAME: hybrid-1
      • ゾーン ON_PREM_NEG_ZONE: ON_PREM_NEG_ZONE1
    • 名前 ON_PREM_NEG_NAME: hybrid-2
      • ゾーン GCP_NEG_ZONE: ON_PREM_NEG_ZONE2
    gcloud compute network-endpoint-groups create ON_PREM_NEG_NAME \
        --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
        --zone=ON_PREM_NEG_ZONE \
        --network=NETWORK
    
  2. オンプレミス バックエンド VM のエンドポイントを ON_PREM_NEG_NAME に追加します。

    gcloud compute network-endpoint-groups update ON_PREM_NEG_NAME \
        --zone=ON_PREM_NEG_ZONE \
        --add-endpoint="ip=ON_PREM_IP_ADDRESS_1,port=PORT_1" \
        --add-endpoint="ip=ON_PREM_IP_ADDRESS_2,port=PORT_2"
    

このコマンドを使用すると、オンプレミスまたはクラウド環境で構成したネットワーク エンドポイントを追加できます。--add-endpoint を必要な回数だけ繰り返します。

ロードバランサを構成する

コンソール

gcloud

  1. gcloud compute health-checks create tcp コマンドを使用して TCP ヘルスチェックを定義します。

    gcloud compute health-checks create tcp gil4-basic-check \
       --use-serving-port \
       --global
    
  2. gcloud compute backend-services create コマンドを実行し、バックエンド サービスを作成してロギングを有効にします。

    gcloud compute backend-services create BACKEND_SERVICE \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=TCP \
      --enable-logging \
      --logging-sample-rate=1.0 \
      --health-checks=gil4-basic-check \
      --global-health-checks \
      --global
    
  3. gcloud compute backend-services add-backend コマンドを使用して、バックエンド サービスにバックエンドを追加します。

    gcloud compute backend-services add-backend BACKEND_SERVICE \
      --global \
      --balancing-mode=CONNECTION \
      --max-connections-per-endpoint=MAX_CONNECTIONS \
      --network-endpoint-group=neg1 \
      --network-endpoint-group-zone=NEG_ZONE1 \
      --network-endpoint-group=neg2 \
      --network-endpoint-group-zone=NEG_ZONE2
    

    バランシング モードの構成の詳細については、gcloud CLI のドキュメントで --max-connections-per-endpoint フラグをご覧ください。MAX_CONNECTIONS には、バックエンドで処理する最大同時接続数を入力します。

  4. ハイブリッド NEG をバックエンドとしてバックエンド サービスに追加します。

    gcloud compute backend-services add-backend BACKEND_SERVICE \
      --global \
      --balancing-mode=CONNECTION \
      --max-connections-per-endpoint=MAX_CONNECTIONS \
      --network-endpoint-group=hybrid1 \
      --network-endpoint-group-zone=ON_PREM_NEG_ZONE1 \
      --network-endpoint-group=hybrid2 \
      --network-endpoint-group-zone=ON_PREM_NEG_ZONE2 \
    

    バランシング モードの構成の詳細については、gcloud CLI のドキュメントで --max-connections-per-endpoint パラメータをご覧ください。MAX_CONNECTIONS には、バックエンドで処理する最大同時接続数を入力します。

  5. ターゲット プロキシを作成します。

    gcloud compute target-tcp-proxies create コマンドを使用して、ターゲット プロキシを作成します。

    gcloud compute target-tcp-proxies create gil4-tcp-proxy \
      --url-map=gil4-map \
      --global
    
  6. 2 つの転送ルールを作成します。1 つのルールでは、REGION1 の VIP IP_ADDRESS1 を使用します。もう 1 つのルールでは、REGION2 の VIP IP_ADDRESS2 を使用します。転送ルールの IP アドレスには、LB_SUBNET_RANGE1 または LB_SUBNET_RANGE2 の IP アドレス範囲を使用します。プロキシ専用サブネットを使用すると、転送ルールの作成に失敗します。

    カスタム ネットワークでは、転送ルールでサブネットを参照する必要があります。このサブネットは、VM サブネットでありプロキシ専用サブネットではありません。

    適切なフラグを設定して gcloud compute forwarding-rules create コマンドを実行します。

    gcloud compute forwarding-rules create gil4-forwarding-rule-a \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=NETWORK \
      --subnet=LB_SUBNET_NAME1 \
      --subnet-region=REGION1 \
      --address=IP_ADDRESS1 \
      --ports=80 \
      --target-tcp-proxy=gil4-tcp-proxy \
      --global
    
    gcloud compute forwarding-rules create gil4-forwarding-rule-b \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=NETWORK \
      --subnet=LB_SUBNET_NAME2 \
      --subnet-region=REGION2 \
      --address=IP_ADDRESS2 \
      --ports=80 \
      --target-tcp-proxy=gil4-tcp-proxy \
      --global
    

ロードバランサをテストする

VM インスタンスを作成して接続をテストする

  1. クライアント VM を REGION1REGION2、リージョンに作成します。

    gcloud compute instances create l4-ilb-client-us-west1-a \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --network=NETWORK \
        --subnet=LB_SUBNET_NAME1 \
        --zone=NEG_ZONE1 \
        --tags=allow-ssh
    
    gcloud compute instances create l4-ilb-client-us-east1-b \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --network=NETWORK \
        --subnet=LB_SUBNET_NAME2 \
        --zone=NEG_ZONE2 \
        --tags=allow-ssh
    
  2. SSH を使用して各クライアント インスタンスに接続します。

    gcloud compute ssh l4-ilb-client-us-west1-a \
       --zone=NEG_ZONE1
    
    gcloud compute ssh l4-ilb-client-us-east1-b \
       --zone=NEG_ZONE2
    
  3. IP アドレスがホスト名を提供していることを確認します。

    • クライアント VM が両方の IP アドレスに到達できることを確認します。コマンドが成功し、リクエストを処理したバックエンド VM の名前が返されます。

      curl IP_ADDRESS1
      
      curl IP_ADDRESS2
      

100 件のリクエストを実行する

100 件の curl リクエストを実行し、ロードバランスされていることをレスポンスから確認します。

  • クライアント VM が両方の IP アドレスに到達できることを確認します。コマンドが成功し、リクエストを処理したバックエンド VM の名前が返されます。

    {
      RESULTS=
      for i in {1..100}
      do
        RESULTS="$RESULTS:$(curl --silent IP_ADDRESS1)"
      done
      echo "***"
      echo "*** Results of load-balancing to IP_ADDRESS1: "
      echo "***"
      echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
      echo
    }
    
    {
      RESULTS=
      for i in {1..100}
      do
        RESULTS="$RESULTS:$(curl --silent IP_ADDRESS2)"
      done
      echo "***"
      echo "*** Results of load-balancing to IP_ADDRESS2: "
      echo "***"
      echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
      echo
    }
    

フェイルオーバーをテストする

  1. REGION2 のバックエンドが異常な状態またはアクセス不能になった場合は、REGION1 リージョンのバックエンドへのフェイルオーバーを確認します。REGION2 からすべてのバックエンドを削除してシミュレーションを行います。

    gcloud compute backend-services remove-backend BACKEND_SERVICE \
       --balancing-mode=CONNECTION \
       --network-endpoint-group=neg2 \
       --network-endpoint-group-zone=NEG_ZONE2
    
  2. SSH を使用して、REGION2 のクライアント VM に接続します。

    gcloud compute ssh l4-ilb-client-us-east1-b \
       --zone=NEG_ZONE2
    
  3. REGION2 リージョンのロード バランシングされた IP アドレスにリクエストを送信します。コマンド出力に、REGION1 のバックエンド VM からのレスポンスが表示されます。

    {
    RESULTS=
    for i in {1..100}
    do
      RESULTS="$RESULTS:$(curl -k -s 'https://test.example.com:443' --connect-to test.example.com:443:IP_ADDRESS2:443)"
    done
    echo "***"
    echo "*** Results of load-balancing to IP_ADDRESS2: "
    echo "***"
    echo "$RESULTS" | tr ':' '\n' | grep -Ev "^$" | sort | uniq -c
    echo
    }
    

次のステップ