VM インスタンス グループのバックエンドを使用して内部パススルー ネットワーク ロードバランサを設定する

このガイドでは、サンプルを示しながら、Google Cloud 内部パススルー ネットワーク ロードバランサの基礎について説明します。このガイドに進む前に、次の内容を理解しておいてください。


このタスクを Google Cloud コンソールで直接行う際の順を追ったガイダンスについては、「ガイドを表示」をクリックしてください。

ガイドを表示


権限

このガイドを使用する前に、インスタンスを作成し、プロジェクト内のネットワークを変更しておく必要があります。そのためにはプロジェクトのオーナーまたは編集者であるか、次の Compute Engine IAM のロールがすべて必要です。

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

詳細については、次のガイドをご覧ください。

シングルスタック サブネットを使用してロードバランサを設定する

このガイドでは、内部パススルー ネットワーク ロードバランサを構成してテストする方法を説明します。このセクションでは、以下の構成方法について説明します。

  1. lb-network という名前のカスタムモードの VPC ネットワークを使用する例。
  2. IPv4 トラフィックに必要なシングル スタック サブネット(stack-typeIPv4 に設定)。カスタムモードの VPC ネットワークでシングルスタック サブネットを作成する場合は、サブネットに IPv4 サブネット範囲を選択します。
  3. バックエンド VM への受信接続を許可するファイアウォール ルール。
  4. バックエンド インスタンス グループ。この例では、次のリージョンとサブネットにあります。
    • リージョン: us-west1
    • サブネット: lb-subnet(プライマリ IPv4 アドレス範囲は 10.1.2.0/24)。
  5. 4 つのバックエンド VM: ゾーン us-west1-a の非マネージド インスタンス グループ内の 2 つの VM と、ゾーン us-west1-c の非マネージド インスタンス グループ内の 2 つの VM。グローバル アクセスを示すために、この例では別のリージョンとサブネットに 2 つ目のテスト クライアント VM を作成します。
    • リージョン: europe-west1
    • サブネット: europe-subnet(プライマリ IP アドレス範囲は 10.3.4.0/24
  6. 接続のテストに使用する 1 台のクライアント VM。
  7. 次の内部パススルー ネットワーク ロードバランサのコンポーネント:
    • バックエンド サービスのヘルスチェック。
    • us-west1 リージョンの内部バックエンド サービス。2 つのゾーン インスタンス グループへの接続分散を管理します。
    • ロードバランサのフロントエンドの内部転送ルールと内部 IP アドレス。

この例のアーキテクチャは次のようになります。

内部パススルー ネットワーク ロードバランサの構成例。
内部パススルー ネットワーク ロードバランサの構成例(クリックして拡大)

ネットワーク、リージョン、サブネットを構成する

サンプルのネットワークとサブネットを作成する手順は次のとおりです。

コンソール

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

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

  2. [VPC ネットワークを作成] をクリックします。

  3. [名前] に「lb-network」と入力します。

  4. [サブネット] セクションで、次の操作を行います。

    1. [サブネット作成モード] を [カスタム] に設定します。
    2. [新しいサブネット] セクションに、次の情報を入力します。
      • 名前: lb-subnet
      • リージョン: us-west1
      • IP スタックタイプ: IPv4(シングルスタック)
      • IP アドレス範囲: 10.1.2.0/24
    3. [完了] をクリックします。
    4. [サブネットを追加] をクリックして、次の情報を入力します。
      • 名前: europe-subnet
      • リージョン: europe-west1
      • IP スタックタイプ: IPv4(シングルスタック)
      • IP アドレス範囲: 10.3.4.0/24
    5. [完了] をクリックします。
  5. [作成] をクリックします。

gcloud

  1. カスタム VPC ネットワークを作成します。

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. lb-network ネットワークで us-west1 リージョンのバックエンドのサブネットを作成します。

    gcloud compute networks subnets create lb-subnet \
      --network=lb-network \
      --range=10.1.2.0/24 \
      --region=us-west1
    
  3. lb-network ネットワークで europe-west1 リージョンのグローバル アクセスをテストするための別のサブネットを作成します。

    gcloud compute networks subnets create europe-subnet \
      --network=lb-network \
      --range=10.3.4.0/24 \
      --region=europe-west1
    

API

networks.insert メソッドPOST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks

{
 "routingConfig": {
   "routingMode": "REGIONAL"
 },
 "name": "lb-network",
 "autoCreateSubnetworks": false
}

subnetworks.insert メソッドに 2 つの POST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks

{
 "name": "lb-subnet",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "ipCidrRange": "10.1.2.0/24",
 "privateIpGoogleAccess": false
}
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/europe-west1/subnetworks

{
 "name": "europe-subnet",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
  "ipCidrRange": "10.3.4.0/24",
  "privateIpGoogleAccess": false
}

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

この例では、次のファイアウォール ルールを使用します。

  • fw-allow-lb-access: VPC ネットワーク内のすべてのターゲットに適用される上り(内向き)ルールで、10.1.2.0/2410.3.4.0/24 の範囲にある送信元からのトラフィックを許可します。このルールでは、2 つのサブネットのいずれかにあるクライアントからの受信トラフィックを許可します。これにより、後でグローバル アクセスを構成してテストできます。

  • fw-allow-ssh: ロードバランスされたインスタンスに適用される上り(内向き)ルール。任意のアドレスから TCP ポート 22 への SSH 接続が許可されます。このルールには、送信元 IP 範囲をより限定的に指定できます。たとえば、SSH セッションを開始するシステムの IP 範囲のみを許可するように指定できます。この例では、ターゲットタグ allow-ssh を使用して、適用する VM を識別させています。

  • fw-allow-health-check: ロードバランスされているインスタンスに適用される上り(内向き)ルール。Google Cloud ヘルスチェック システム(130.211.0.0/2235.191.0.0/16)からのトラフィックを許可します。この例では、ターゲットタグ allow-health-check を使用して、適用するインスタンスを識別します。

これらのファイアウォール ルールがない場合は、デフォルトの上り(内向き)拒否ルールによってバックエンド インスタンスへの受信トラフィックがブロックされます。

コンソール

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

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

  2. サブネット トラフィックを許可するには、[ファイアウォール ルールを作成] をクリックし、次の情報を入力します。

    • 名前: fw-allow-lb-access
    • ネットワーク: lb-network
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • [ターゲット]: ネットワーク上のすべてのインスタンス
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 10.1.2.0/24
    • プロトコルとポート: すべて許可
  3. [作成] をクリックします。

  4. 受信 SSH 接続を許可するには、もう一度 [ファイアウォール ルールを作成] をクリックして、次の情報を入力します。

    • 名前: fw-allow-ssh
    • ネットワーク: lb-network
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-ssh
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 0.0.0.0/0
    • プロトコルとポート: [指定したプロトコルとポート] を選択して、[TCP] チェックボックスをオンにし、[ポート] に「22」と入力します。
  5. [作成] をクリックします。

  6. Google Cloud ヘルスチェックを許可するには、[ファイアウォール ルールを作成] をもう一度クリックして、次の情報を入力します。

    • 名前: fw-allow-health-check
    • ネットワーク: lb-network
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-health-check
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 130.211.0.0/2235.191.0.0/16
    • プロトコルとポート: すべて許可
  7. [作成] をクリックします。

gcloud

  1. fw-allow-lb-access ファイアウォール ルールを作成して、サブネットとの通信を許可します。

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

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. Google Cloud ヘルスチェックを許可する fw-allow-health-check ルールを作成します。

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    

API

firewalls.insert メソッドPOST リクエストを送信して、fw-allow-lb-access ファイアウォール ルールを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-lb-access",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "priority": 1000,
 "sourceRanges": [
   "10.1.2.0/24", "10.3.4.0/24"
 ],
 "allowed": [
   {
     "IPProtocol": "tcp"
   },
   {
     "IPProtocol": "udp"
   },
   {
     "IPProtocol": "icmp"
   }
 ],
 "direction": "INGRESS",
 "logConfig": {
   "enable": false
 },
 "disabled": false
}

firewalls.insert メソッドPOST リクエストを送信して、fw-allow-ssh ファイアウォール ルールを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-ssh",
      "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "priority": 1000,
 "sourceRanges": [
   "0.0.0.0/0"
 ],
 "targetTags": [
   "allow-ssh"
 ],
 "allowed": [
  {
    "IPProtocol": "tcp",
    "ports": [
      "22"
    ]
  }
 ],
"direction": "INGRESS",
"logConfig": {
  "enable": false
},
"disabled": false
}

firewalls.insert メソッドPOST リクエストを送信して、fw-allow-health-check ファイアウォール ルールを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls

{
 "name": "fw-allow-health-check",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "priority": 1000,
 "sourceRanges": [
   "130.211.0.0/22",
   "35.191.0.0/16"
 ],
 "targetTags": [
   "allow-health-check"
 ],
 "allowed": [
   {
     "IPProtocol": "tcp"
   },
   {
     "IPProtocol": "udp"
   },
   {
     "IPProtocol": "icmp"
   }
 ],
 "direction": "INGRESS",
 "logConfig": {
   "enable": false
 },
 "disabled": false
}

バックエンド VM とインスタンス グループを作成する

この例では、2 つのバックエンド(サーバー)VM を持つ 2 つの非マネージド インスタンスを使用しています。内部パススルー ネットワーク ロードバランサのリージョン特性を示すために、2 つのインスタンス グループが別々のゾーン(us-west1-aus-west1-c)に配置されています。

  • インスタンス グループ ig-a には、次の 2 つの VM が含まれています。
    • vm-a1
    • vm-a2
  • インスタンス グループ ig-c には、次の 2 つの VM が含まれています。
    • vm-c1
    • vm-c2

4 つのバックエンド VM へのトラフィックがすべてロードバランスされます。

この例と追加の構成オプションをサポートするために、4 つの VM はそれぞれ、TCP ポート 80、8008、8080、8088、443、8443 をリッスンする Apache ウェブサーバーを実行します。

lb-subnet の内部 IP アドレスと外部(公開)エフェメラル IP アドレスがそれぞれの VM に割り当てられます。外部 IP アドレスは後で削除できます。

バックエンド VM がインターネットから Apache をダウンロードでき、また SSH 経由で接続できるため、この例ではバックエンド VM の外部 IP アドレスを使用していますが、これは必須ではありません。

デフォルトでは、Apache は任意の IP アドレスにバインドされます。内部パススルー ネットワーク ロードバランサは、宛先 IP を保持してパケットを配信します。バックエンド VM で実行中のサーバー ソフトウェアが、ロードバランサの内部転送ルールの IP アドレスをリッスンしていることを確認してください。複数の内部転送ルールを構成している場合、ソフトウェアによってそれぞれに関連付けられた内部 IP アドレスがリッスンされます。内部パススルー ネットワーク ロードバランサによってバックエンド VM に配信されるパケットの宛先 IP アドレスは、転送ルールの内部 IP アドレスです。

説明を簡単にするため、これらのバックエンド VM では Debian GNU/Linux 10 を実行します。

Console

バックエンド VM の作成

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

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

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

    • 名前: vm-a1、ゾーン: us-west1-a
    • 名前: vm-a2、ゾーン: us-west1-a
    • 名前: vm-c1、ゾーン: us-west1-c
    • 名前: vm-c2、ゾーン: us-west1-c
  3. [インスタンスを作成] をクリックします。

  4. ステップ 2 に示したように [名前] を設定します。

  5. [リージョン] に us-west1 を選択して、ステップ 2 に示したゾーンを選択します。

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

  7. [詳細オプション] をクリックします。

  8. [ネットワーキング] をクリックして次のフィールドを構成します。

    1. [ネットワーク タグ] に「allow-ssh」と「allow-health-check」を入力します。
    2. [ネットワーク インターフェース] で、次のように選択します。
      • ネットワーク: lb-network
      • サブネット: lb-subnet
      • IP スタックタイプ: IPv4(シングルスタック)
      • プライマリ内部 IPv4 アドレス: エフェメラル(自動)
      • 外部 IPv4 アドレス: エフェメラル
  9. [管理] をクリックし、[起動スクリプト] フィールドに次のスクリプトを入力します。スクリプトの内容は 4 つの VM ですべて同じです。

    
    #! /bin/bash
    if [ -f /etc/startup_script_completed ]; then
    exit 0
    fi
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    file_ports="/etc/apache2/ports.conf"
    file_http_site="/etc/apache2/sites-available/000-default.conf"
    file_https_site="/etc/apache2/sites-available/default-ssl.conf"
    http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
    http_vh_prts="*:80 *:8008 *:8080 *:8088"
    https_listen_prts="Listen 443\nListen 8443"
    https_vh_prts="*:443 *:8443"
    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
    prt_conf="$(cat "$file_ports")"
    prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
    prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
    echo "$prt_conf" | tee "$file_ports"
    http_site_conf="$(cat "$file_http_site")"
    http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
    echo "$http_site_conf_2" | tee "$file_http_site"
    https_site_conf="$(cat "$file_https_site")"
    https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
    echo "$https_site_conf_2" | tee "$file_https_site"
    systemctl restart apache2
    touch /etc/startup_script_completed
    
  10. [作成] をクリックします。

インスタンス·グループの作成

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

    [インスタンス グループ] に移動

  2. 次の手順を繰り返し、それぞれ 2 つの VM を持つ 2 つの非マネージド インスタンス グループを作成します。以下の組み合わせを使用します。

    • インスタンス グループ名: ig-a、ゾーン: us-west1-a、VM: vm-a1vm-a2
    • インスタンス グループ名: ig-c、ゾーン: us-west1-c、VM: vm-c1vm-c2
  3. [インスタンス グループの作成] をクリックします。

  4. [新しい非マネージド インスタンス グループ] をクリックします。

  5. ステップ 2 に示したように [名前] を設定します。

  6. [ロケーション] セクションで、[リージョン] に us-west1 を選択し、ステップ 2 で説明したように [ゾーン] を選択します。

  7. [ネットワーク] で [lb-network] を選択します。

  8. [サブネットワーク] で [lb-subnet] を選択します。

  9. [VM インスタンス] セクションに、ステップ 2 で示した VM を追加します。

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

gcloud

  1. 次の [VM-NAME][ZONE] の 4 つの組み合わせを使用して、下のコマンドを 4 回実行して 4 つの VM を作成します。スクリプトの内容は 4 つの VM ですべて同じです。

    • VM-NAME: vm-a1ZONE: us-west1-a
    • VM-NAME: vm-a2ZONE: us-west1-a
    • VM-NAME: vm-c1ZONE: us-west1-c
    • VM-NAME: vm-c2ZONE: us-west1-c
    gcloud compute instances create VM-NAME \
        --zone=ZONE \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=lb-subnet \
        --metadata=startup-script='#! /bin/bash
    if [ -f /etc/startup_script_completed ]; then
    exit 0
    fi
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    file_ports="/etc/apache2/ports.conf"
    file_http_site="/etc/apache2/sites-available/000-default.conf"
    file_https_site="/etc/apache2/sites-available/default-ssl.conf"
    http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
    http_vh_prts="*:80 *:8008 *:8080 *:8088"
    https_listen_prts="Listen 443\nListen 8443"
    https_vh_prts="*:443 *:8443"
    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
    prt_conf="$(cat "$file_ports")"
    prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
    prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
    echo "$prt_conf" | tee "$file_ports"
    http_site_conf="$(cat "$file_http_site")"
    http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
    echo "$http_site_conf_2" | tee "$file_http_site"
    https_site_conf="$(cat "$file_https_site")"
    https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
    echo "$https_site_conf_2" | tee "$file_https_site"
    systemctl restart apache2
    touch /etc/startup_script_completed'
    
  2. 各ゾーンに次の 2 つの非マネージド インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create ig-a \
        --zone=us-west1-a
    gcloud compute instance-groups unmanaged create ig-c \
        --zone=us-west1-c
    
  3. 適切なインスタンス グループに VM を追加します。

    gcloud compute instance-groups unmanaged add-instances ig-a \
        --zone=us-west1-a \
        --instances=vm-a1,vm-a2
    gcloud compute instance-groups unmanaged add-instances ig-c \
        --zone=us-west1-c \
        --instances=vm-c1,vm-c2
    

API

4 つの VM に対して、次の VM 名とゾーンを使用します。

  • VM-NAME: vm-a1ZONE: us-west1-a
  • VM-NAME: vm-a2ZONE: us-west1-a
  • VM-NAME: vm-c1ZONE: us-west1-c
  • VM-NAME: vm-c2ZONE: us-west1-c

現在の DEBIAN_IMAGE_NAME を取得するには、次の gcloud コマンドを実行します。

gcloud compute images list \
 --filter="family=debian-10"

instances.insert メソッドに 4 つの POST リクエストを送信して、4 つのバックエンド VM を作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
 "name": "VM-NAME",
 "tags": {
   "items": [
     "allow-health-check",
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/[ZONE]/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "VM-NAME",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
       "diskType": "projects/PROJECT_ID/zones/zone/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "metadata": {
   "items": [
     {
       "key": "startup-script",
       "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nfile_ports=\"/etc/apache2/ports.conf\"\nfile_http_site=\"/etc/apache2/sites-available/000-default.conf\"\nfile_https_site=\"/etc/apache2/sites-available/default-ssl.conf\"\nhttp_listen_prts=\"Listen 80\\nListen 8008\\nListen 8080\\nListen 8088\"\nhttp_vh_prts=\"*:80 *:8008 *:8080 *:8088\"\nhttps_listen_prts=\"Listen 443\\nListen 8443\"\nhttps_vh_prts=\"*:443 *:8443\"\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nprt_conf=\"$(cat \"$file_ports\")\"\nprt_conf_2=\"$(echo \"$prt_conf\" | sed \"s|Listen 80|${http_listen_prts}|\")\"\nprt_conf=\"$(echo \"$prt_conf_2\" | sed \"s|Listen 443|${https_listen_prts}|\")\"\necho \"$prt_conf\" | tee \"$file_ports\"\nhttp_site_conf=\"$(cat \"$file_http_site\")\"\nhttp_site_conf_2=\"$(echo \"$http_site_conf\" | sed \"s|*:80|${http_vh_prts}|\")\"\necho \"$http_site_conf_2\" | tee \"$file_http_site\"\nhttps_site_conf=\"$(cat \"$file_https_site\")\"\nhttps_site_conf_2=\"$(echo \"$https_site_conf\" | sed \"s|_default_:443|${https_vh_prts}|\")\"\necho \"$https_site_conf_2\" | tee \"$file_https_site\"\nsystemctl restart apache2"
     }
   ]
 },
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

instanceGroups.insert メソッドPOST リクエストを送信して、2 つのインスタンス グループを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups

{
 "name": "ig-a",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups

{
 "name": "ig-c",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

instanceGroups.addInstances メソッドPOST リクエストを送信して、各インスタンス グループにインスタンスを追加します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2"
   }
 ]
}
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2"
   }
 ]
}

ロードバランサ コンポーネントを構成する

この手順では、ヘルスチェックとバックエンド サービス、フロントエンド コンポーネントなどの内部パススルー ネットワーク ロードバランサ コンポーネントを構成します。

  • ヘルスチェック: この例では、HTTP ヘルスチェックで HTTP 200(OK)レスポンスを確認します。詳細については、内部パススルー ネットワーク ロードバランサの概要のヘルスチェックのセクションをご覧ください。

  • バックエンド サービス: 内部ロードバランサを介して HTTP トラフィックを渡す必要があるため、UDP ではなく TCP を使用する必要があります。

  • 転送ルール: この例では、内部転送ルールを 1 つ作成します。

  • 内部 IP アドレス: この例では、転送ルールを作成する際に、内部 IP アドレス 10.1.2.99 を指定しています。

コンソール

  1. Google Cloud コンソールの [ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [ロードバランサを作成] をクリックします。

  3. [ネットワーク ロードバランサ(TCP/SSL)] カードで [構成を開始] をクリックします。
  4. [インターネット接続または内部専用] で [VM 間のみ] を選択します。

  5. [ロードバランサの種類] で [パススルー] を選択します。

  6. [続行] をクリックします。

  7. [Create internal passthrough Network Load Balancer] ページで、次の情報を入力します。

    • ロードバランサの名前: be-ilb
    • リージョン: us-west1
    • ネットワーク: lb-network

バックエンドを構成する

  1. [バックエンドの構成] をクリックします。
  2. IPv4 トラフィックのみを処理するには、[バックエンド] セクションの [新しいバックエンド] で、[IP スタックタイプ] に [IPv4(シングル スタック)] を選択します。
  3. [インスタンス グループ] で、ig-c インスタンス グループを選択し、[完了] をクリックします。
  4. [バックエンドを追加] をクリックし、この手順を繰り返して ig-a を追加します。
  5. [ヘルスチェック] リストから [ヘルスチェックを作成] を選択し、次の情報を入力して [保存] をクリックします。

    • 名前: hc-http-80
    • プロトコル: HTTP
    • ポート: 80
    • プロキシのプロトコル: NONE
    • リクエストパス: /

    Google Cloud コンソールを使用してロードバランサを作成すると、ヘルスチェックはグローバルになります。リージョン ヘルスチェックを作成する場合は、gcloud または API を使用します。

  6. 続行する前に、[バックエンドの構成] の隣に青いチェックマークがあることを確認します。

フロントエンドを構成する

  1. [フロントエンドの構成] をクリックします。
  2. [新しいフロントエンドの IP とポート] セクションで、次の操作を行います。
    1. [名前] に「fr-ilb」と入力します。
    2. [サブネットワーク] で [lb-subnet] を選択します。
    3. [内部 IP の目的] セクションで、[ IP アドレス] リストで [ IP アドレスを作成] を選択して、以下の情報を入力してから [予約] をクリックします。
      • 名前: ip-ilb
      • IP バージョン: IPv4
      • 静的 IP アドレス: ユーザー指定
      • カスタム IP アドレス: 10.1.2.99
    4. [ポート] で、[複数] を選択して、[ポート番号] に 80800880808088 を入力します。
    5. 続行する前に、[フロントエンドの構成] の隣に青いチェックマークがあることを確認します。

構成を確認する

  1. [確認と完了] をクリックします。
  2. ロードバランサの構成を確認します。
  3. 省略可: [同等のコード] をクリックして、ロードバランサの作成に使用する REST API リクエストを表示します。
  4. [作成] をクリックします。

gcloud

  1. 新しいリージョン HTTP ヘルスチェックを作成して、ポート 80 で VM との HTTP 接続をテストします。

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. HTTP トラフィックのバックエンド サービスを作成します。

    gcloud compute backend-services create be-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  3. バックエンド サービスに、2 つのインスタンス グループを追加します。

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-c \
        --instance-group-zone=us-west1-c
    
  4. バックエンド サービスの転送ルールを作成します。転送ルールを作成するときは、サブネット内の内部 IP アドレスに 10.1.2.99 を指定します。

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=10.1.2.99 \
        --ip-protocol=TCP \
        --ports=80,8008,8080,8088 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    

API

regionHealthChecks.insert メソッドPOST リクエストを送信してヘルスチェックを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks

{
"name": "hc-http-80",
"type": "HTTP",
"httpHealthCheck": {
  "port": 80
}
}

regionBackendServices.insert メソッドPOST リクエストを送信して、リージョン バックエンド サービスを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices

{
"name": "be-ilb",
"backends": [
  {
    "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
    "balancingMode": "CONNECTION"
  },
  {
    "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c",
    "balancingMode": "CONNECTION"
  }
],
"healthChecks": [
  "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
],
"loadBalancingScheme": "INTERNAL",
"connectionDraining": {
  "drainingTimeoutSec": 0
 }
}

forwardingRules.insert メソッドPOST リクエストを送信して転送ルールを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb",
"IPAddress": "10.1.2.99",
"IPProtocol": "TCP",
"ports": [
  "80", "8008", "8080", "8088"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
"networkTier": "PREMIUM"
}

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

これらのテストでは、ロードバランサの構成を検証し、想定される動作を確認する方法を示します。

クライアント VM を作成する

この例では、クライアント VM(vm-client)を、バックエンド(サーバー)VM と同じリージョンに作成します。クライアントを使用するのは、ロードバランサの構成を検証し、テストセクションで説明されている想定される動作を示すためです。

コンソール

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

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

  2. [インスタンスを作成] をクリックします。

  3. [名前] に「vm-client」と入力します。

  4. [リージョン] で us-west1 を選択します。

  5. [ゾーン] で us-west1-a を選択します。

  6. [詳細オプション] をクリックします。

  7. [ネットワーキング] をクリックして次のフィールドを構成します。

    1. [ネットワーク タグ] に「allow-ssh」と入力します。
    2. [ネットワーク インターフェース] で、次のように選択します。
      • ネットワーク: lb-network
      • サブネット: lb-subnet
  8. [作成] をクリックします。

gcloud

クライアント VM はロードバランサと同じリージョン内の任意のゾーンにあり、そのリージョン内の任意のサブネットを使用できます。この例では、クライアントは us-west1-a ゾーンにあり、バックエンド VM と同じサブネットを使用しています。

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

instances.insert メソッドPOST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances

{
 "name": "vm-client",
 "tags": {
   "items": [
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "vm-client",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
       "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

クライアント VM からの接続をテストする

このテストでは、ロードバランサのバックエンド VM からではなく、個別のクライアント VM からロードバランサに接続します。セッション アフィニティが設定されていないため、トラフィックは 4 つのバックエンド VM に分散されます。

  1. クライアント VM インスタンスに接続します。

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. curl を使用して IP アドレスに接続するロードバランサへのウェブ リクエストを作成します。レスポンスが異なるバックエンド VM から返ってくることを確認するために、このリクエストを繰り返します。レスポンスを生成する VM の名前が、各バックエンド VM 上で、/var/www/html/index.html のコンテンツによる HTML レスポンスのテキストとして表示されます。たとえば、想定されるレスポンスは Page served from: vm-a1Page served from: vm-a2 のようになります。

    curl http://10.1.2.99
    

    転送ルールは、ポート 80800880808088 を処理するように構成されています。その他のポートにトラフィックを送信するには、次のように、IP アドレスの後にコロン(:)とポート番号を追加します。

    curl http://10.1.2.99:8008
    

    内部転送ルールにサービスラベルを追加すると、内部 DNS サービス名を使用してロードバランサに接続できます。

      curl http://web-test.fr-ilb.il4.us-west1.lb.PROJECT_ID.internal
      

ロードバランサの IP アドレスに ping を実行する

このテストでは、ロードバランサの IP アドレスに対して ping を実行することはできません。このテストではこの想定される動作が示されます。これは、内部パススルー ネットワーク ロードバランサが、個別のデバイスではなく、仮想ネットワーク プログラミングで実装されているためです。

  1. クライアント VM インスタンスに接続します。

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. ロードバランサの IP アドレスに対して ping を試行します。レスポンスは返されません。この例では、10 秒後に ping コマンドがタイムアウトします。

    timeout 10 ping 10.1.2.99
    

ロードバランスされた VM からリクエストを送信する

このテストでは、バックエンド VM がロードバランサの転送ルールの IP アドレスにパケットを送信すると、リクエストがそれ自体にルーティングされることを示します。これは、バックエンド VM のヘルスチェック状態に関係なく発生します。

内部パススルー ネットワーク ロードバランサは、ゲスト OS の仮想ネットワーク プログラミングと VM 構成を使用して実装されます。Linux VM では、ゲスト環境によって、オペレーティング システムのローカル ルーティング テーブルにロードバランサの IP アドレスのルートが作成されます。

このローカルルートは VM 内にあるため(VPC ネットワーク内のルートではないため)、ロードバランサの IP アドレスに送信されたパケットは VPC ネットワークでは処理されません。ロードバランサの IP アドレスに送信されたパケットは、VM のオペレーティング システムに残ります。

  1. バックエンド VM に接続します(たとえば、vm-a1)。

    gcloud compute ssh vm-a1 --zone=us-west1-a
    
  2. IP アドレスまたはサービス名を指定し curl を使用して、ロードバランサにウェブ リクエストを送信します。レスポンスは、リクエストを行うバックエンド VM から送信されます。繰り返し行われるリクエストは、同じ方法で応答されます。vm-a1 からテストするときに想定されるレスポンスは常に次のとおりです。 Page served from: vm-a1

    curl http://10.1.2.99
    
  3. ローカルのルーティング テーブルを調べて、ロードバランサ自体の IP アドレス(10.1.2.99)に一致する宛先を探します。このルートは内部パススルー ネットワーク ロードバランサに必須の部分です。これにより、ロードバランサの背後にある VM からのリクエストが常に同じ VM によって応答される理由がわかります。

    ip route show table local | grep 10.1.2.99
    

内部パススルー ネットワーク ロードバランサのバックエンド VM がロードバランサの転送ルール IP アドレスにパケットを送信すると、パケットは常にリクエストを行った VM にルーティングされます。これは、内部パススルー ネットワーク ロードバランサがパススルー ロードバランサであり、このセクションで説明するように、VM のゲスト OS 内にロードバランサの IP アドレスのローカルルートを作成することによって実装されるからです。ロードバランスされたバックエンドがロードバランサの IP アドレスに TCP トラフィックを送信し、トラフィックをロードバランスされていないバックエンドから発信されたように分散する必要がある場合は、リージョン内部プロキシ ネットワーク ロードバランサの使用を検討してください。

詳細については、ネクストホップとしての内部パススルー ネットワーク ロードバランサをご覧ください。

デュアルスタック サブネットを使用してロードバランサを設定する

このガイドでは、内部パススルー ネットワーク ロードバランサを構成してテストする方法を説明します。このセクションでは、以下の構成方法について説明します。

  1. このページの例では、lb-network-dual-stack という名前のカスタムモードの VPC ネットワークを使用します。IPv6 トラフィックにはカスタムモードのサブネットが必要です。
  2. IPv6 トラフィックに必要なデュアルスタック サブネット(stack-typeIPv4_IPv6 に設定)。カスタムモードの VPC ネットワークでデュアルスタック サブネットを作成する場合は、サブネットに IPv6 アクセスタイプを選択します。この例では、サブネットの ipv6-access-type パラメータを INTERNAL に設定します。このサブネット上の新しい VM には、内部 IPv4 アドレスと内部 IPv6 アドレスの両方を割り当てることができます。手順については、VPC のドキュメントでデュアルスタック サブネットの追加に関する説明をご覧ください。
  3. バックエンド VM への受信接続を許可するファイアウォール ルール。
  4. バックエンド インスタンス グループ。この例では、次のリージョンとサブネットにあります。
    • リージョン: us-west1
    • サブネット: lb-subnet(プライマリ IPv4 アドレス範囲は 10.1.2.0/24)。サブネットに構成する IPv4 アドレス範囲を選択しますが、IPv6 アドレス範囲は自動的に割り当てられます。Google では、固定サイズ(/64)の IPv6 CIDR ブロックを提供しています。
  5. 4 つのバックエンド デュアルスタック VM: ゾーン us-west1-a の非マネージド インスタンス グループ内の 2 つの VM と、ゾーン us-west1-c の非マネージド インスタンス グループ内の 2 つの VM。グローバル アクセスを示すために、この例では別のリージョンとサブネットに 2 つ目のテスト クライアント VM を作成します。
    • リージョン: europe-west1
    • サブネット: europe-subnet(プライマリ IP アドレス範囲は 10.3.4.0/24
  6. 接続のテストに使用する 1 台のクライアント VM。
  7. 次の内部パススルー ネットワーク ロードバランサのコンポーネント:
    • バックエンド サービスのヘルスチェック。
    • us-west1 リージョンの内部バックエンド サービス。2 つのゾーン インスタンス グループへの接続分散を管理します。
    • ロードバランサのフロントエンド用の 2 つの内部転送ルール。

次の図は、この例のアーキテクチャを示しています。

2 つのゾーン インスタンス グループへの接続分散を管理するバックエンド サービスを使用したデュアル スタック VPC ネットワーク。
内部パススルー ネットワーク ロードバランサの構成例(クリックして拡大)

ネットワーク、リージョン、サブネットを構成する

このページで説明されているサンプルの内部パススルー ネットワーク ロードバランサは、lb-network-dual-stack という名前のカスタムモード VPC ネットワークで作成されています。

内部 IPv6 範囲を持つサブネットを構成するには、VPC ネットワーク ULA の内部 IPv6 範囲を有効にします。内部 IPv6 サブネット範囲は、この範囲から割り振られます。

コンソール

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

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

  2. [VPC ネットワークを作成] をクリックします。

  3. [名前] に「lb-network-dual-stack」と入力します。

  4. このネットワークのサブネットで内部 IPv6 アドレス範囲を構成する場合は、次の手順を完了します。

    1. [VPC ネットワーク ULA の内部 IPv6 範囲] で、[有効] を選択します。
    2. [ULA の内部 IPv6 範囲を割り当てる] で、[自動] または [手動] を選択します。
  5. [サブネット作成モード] で [カスタム] を選択します。

  6. [新しいサブネット] セクションで、サブネットに次の構成パラメータを指定します。

    • 名前: lb-subnet
    • リージョン: us-west1
    • IP スタックタイプ: IPv4 と IPv6(デュアルスタック)
    • IPv4 範囲: 10.1.2.0/24
    • IPv6 アクセスタイプ: 内部
  7. [完了] をクリックします。

  8. [サブネットを追加] をクリックして、次の情報を入力します。

    • 名前: europe-subnet
    • リージョン: europe-west1
    • IP スタックタイプ: IPv4(シングルスタック)
    • IP アドレス範囲: 10.3.4.0/24
  9. [完了] をクリックします。

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

gcloud

  1. 新しいカスタムモードの VPC ネットワークを作成するには、gcloud compute networks create コマンドを実行します。

    このネットワークのサブネットで内部 IPv6 範囲を構成するには、--enable-ula-internal-ipv6 フラグを使用します。このオプションでは、Google Cloud が内部 IPv6 サブネット範囲に使用する fd20::/20 範囲内の /48 ULA 接頭辞を割り当てます。割り当てられる /48 IPv6 範囲を選択する場合は、--internal-ipv6-range フラグを使用して範囲を指定します。

    gcloud compute networks create lb-network-dual-stack \
     --subnet-mode=custom \
     --enable-ula-internal-ipv6 \
     --internal-ipv6-range=ULA_IPV6_RANGE \
     --bgp-routing-mode=regional
    

    ULA_IPV6_RANGE は、Google が内部 IPv6 サブネット範囲に使用する fd20::/20 範囲内の /48 接頭辞に置き換えます。--internal-ipv6-range フラグを使用しない場合は、Google によってネットワークの /48 接頭辞(fd20:bc7:9a1c::/48 など)が選択されます。

  2. NETWORK ネットワーク内に、us-west1 リージョンのバックエンド用のサブネットと、europe-west1 リージョンのグローバル アクセスをテストするための別のサブネットを作成します。

    サブネットを作成するには、gcloud compute networks subnets create コマンドを実行します。

    gcloud compute networks subnets create lb-subnet \
     --network=lb-network-dual-stack \
     --range=10.1.2.0/24 \
     --region=us-west1 \
     --stack-type=IPV4_IPV6 \
     --ipv6-access-type=INTERNAL
    
    gcloud compute networks subnets create europe-subnet \
     --network=lb-network-dual-stack \
     --range=10.3.4.0/24 \
     --region=europe-west1 \
     --stack-type=IPV4_IPV6 \
     --ipv6-access-type=INTERNAL
    

API

新しいカスタムモードの VPC ネットワークを作成します。

このネットワークのサブネットで内部 IPv6 範囲を構成するには、enableUlaInternalIpv6 を true に設定します。このオプションは、Google が内部 IPv6 サブネット範囲に使用する fd20::/20 範囲内から /48 範囲を割り当てます。割り当てる /48 IPv6 範囲を選択する場合は、internalIpv6Range フィールドを使用して範囲も指定します。

 POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks
 {
   "autoCreateSubnetworks": false,
   "name": "lb-network-dual-stack",
   "mtu": MTU,
   "enableUlaInternalIpv6": true,
   "internalIpv6Range": "ULA_IPV6_RANGE",
   "routingConfig": {
   "routingMode": "DYNAMIC_ROUTING_MODE"
  }
 }
 

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

  • PROJECT_ID: VPC ネットワークが作成されているプロジェクトの ID。
  • MTU: ネットワークの最大伝送単位。MTU は、1460(デフォルト)または 1500 のいずれかです。MTU を 1500 に設定する前に、最大伝送単位の概要を確認してください。
  • ULA_IPV6_RANGE: Google が内部 IPv6 サブネット範囲に使用する fd20::/20 範囲内の /48 接頭辞。internalIpv6Range の値を指定しない場合、Google はネットワークの /48 接頭辞を選択します。
  • DYNAMIC_ROUTING_MODE: global または regional のいずれか。これは、ネットワーク内の Cloud Router のルート アドバタイズの動作を制御します。詳細については、動的ルーティング モードをご覧ください。

    詳細については、networks.insert メソッドをご覧ください。

subnetworks.insert メソッドに 2 つの POST リクエストを送信します。

 POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
 {
   "ipCidrRange": "10.1.2.0/24",
   "network": "lb-network-dual-stack",
   "name": "lb-subnet"
   "stackType": IPV4_IPV6,
   "ipv6AccessType": Internal
 }
 

 POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks
 {
   "ipCidrRange": "10.3.4.0/24",
   "network": "lb-network-dual-stack",
   "name": "europe-subnet"
   "stackType": IPV4_IPV6,
   "ipv6AccessType": Internal
 }
 

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

この例では、次のファイアウォール ルールを使用します。

  • fw-allow-lb-access: VPC ネットワーク内のすべてのターゲットに適用される上り(内向き)ルールで、10.1.2.0/2410.3.4.0/24 の範囲にある送信元からのトラフィックを許可します。このルールでは、2 つのサブネットのいずれかにあるクライアントからの受信トラフィックを許可します。後で、グローバル アクセスの構成とテストを行うことができます。

  • fw-allow-lb-access-ipv6: VPC ネットワーク内のすべてのターゲットに適用される上り(内向き)ルールであり、IPv6 の範囲の送信元からのトラフィックを許可するもの。このルールでは、2 つのサブネットのいずれかにあるクライアントからの受信 IPv6 トラフィックを許可します。後で、グローバル アクセスの構成とテストを行うことができます。

  • fw-allow-ssh: ロードバランスされたインスタンスに適用される上り(内向き)ルール。任意のアドレスから TCP ポート 22 への SSH 接続が許可されます。このルールには、送信元の IP 範囲をより限定的に指定できます。たとえば、SSH セッションを開始するシステムの IP 範囲を指定できます。この例では、ターゲットタグ allow-ssh を使用して、適用する VM を識別させています。

  • fw-allow-health-check: ロードバランスされているインスタンスに適用される上り(内向き)ルール。Google Cloud ヘルスチェック システム(130.211.0.0/2235.191.0.0/16)からのトラフィックを許可します。この例では、ターゲットタグ allow-health-check を使用して、適用するインスタンスを識別します。

  • fw-allow-health-check-ipv6: ロードバランスされているインスタンスに適用される上り(内向き)ルール。Google Cloud ヘルスチェック システム(2600:2d00:1:b029::/64)からのトラフィックを許可します。この例では、ターゲットタグ allow-health-check-ipv6 を使用して、適用するインスタンスを識別します。

これらのファイアウォール ルールがない場合は、デフォルトの上り(内向き)拒否ルールによってバックエンド インスタンスへの受信トラフィックがブロックされます。

コンソール

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

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

  2. サブネット トラフィックを許可するルールを作成するには、[ファイアウォール ルールを作成] をクリックして、次の情報を入力します。

    • 名前: fw-allow-lb-access
    • ネットワーク: lb-network-dual-stack
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • [ターゲット]: ネットワーク上のすべてのインスタンス
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 10.1.2.0/2410.3.4.0/24
    • プロトコルとポート: すべて許可
  3. [作成] をクリックします。

  4. IPv6 サブネット トラフィックを許可するには、もう一度 [ファイアウォール ルールを作成] をクリックして、次の情報を入力します。

    • 名前: fw-allow-lb-access-ipv6
    • ネットワーク: lb-network-dual-stack
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • [ターゲット]: ネットワーク上のすべてのインスタンス
    • ソースフィルタ: IPv6 範囲
    • 送信元 IPv6 範囲: lb-subnet に割り当てられた IPV6_ADDRESS
    • プロトコルとポート: すべて許可
  5. [作成] をクリックします。

  6. 受信 SSH 接続を許可するには、もう一度 [ファイアウォール ルールを作成] をクリックして、次の情報を入力します。

    • 名前: fw-allow-ssh
    • ネットワーク: lb-network-dual-stack
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-ssh
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 0.0.0.0/0
    • プロトコルとポート: [指定したプロトコルとポート] を選択して、[TCP] チェックボックスをオンにし、[ポート] に「22」と入力します。
  7. [作成] をクリックします。

  8. Google Cloud の IPv6 ヘルスチェックを許可するには、もう一度 [ファイアウォール ルールを作成] をクリックして、次の情報を入力します。

    • 名前: fw-allow-health-check-ipv6
    • ネットワーク: lb-network-dual-stack
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-health-check-ipv6
    • ソースフィルタ: IPv6 範囲
    • 送信元 IPv6 範囲: 2600:2d00:1:b029::/64
    • プロトコルとポート: すべて許可
  9. [作成] をクリックします。

  10. Google Cloud ヘルスチェックを許可するには、もう一度 [ファイアウォール ルールを作成] をクリックして、次の情報を入力します。

    • 名前: fw-allow-health-check
    • ネットワーク: lb-network-dual-stack
    • 優先度: 1000
    • トラフィックの方向: 上り(内向き)
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-health-check
    • ソースフィルタ: IPv4 の範囲
    • 送信元 IPv4 範囲: 130.211.0.0/2235.191.0.0/16
    • プロトコルとポート: すべて許可
  11. [作成] をクリックします。

gcloud

  1. fw-allow-lb-access ファイアウォール ルールを作成して、サブネットとの通信を許可します。

    gcloud compute firewall-rules create fw-allow-lb-access \
        --network=lb-network-dual-stack \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24,10.3.4.0/24 \
        --rules=all
    
  2. fw-allow-lb-access-ipv6 ファイアウォール ルールを作成して、サブネットとの通信を許可します。

    gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \
        --network=lb-network-dual-stack \
        --action=allow \
        --direction=ingress \
        --source-ranges=IPV6_ADDRESS \
        --rules=all
    

    IPV6_ADDRESS は、lb-subnet に割り当てられた IPv6 アドレスに置き換えます。

  3. ネットワーク タグ allow-ssh を使用して、VM との SSH 接続を許可する fw-allow-ssh ファイアウォール ルールを作成します。source-ranges を省略すると、Google Cloud は任意の送信元を対象とするものとしてルールを解釈します。

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network-dual-stack \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  4. Google Cloud IPv6 ヘルスチェックを許可する fw-allow-health-check-ipv6 ルールを作成します。

    gcloud compute firewall-rules create fw-allow-health-check-ipv6 \
        --network=lb-network-dual-stack \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check-ipv6 \
        --source-ranges=2600:2d00:1:b029::/64 \
        --rules=tcp,udp
    
  5. Google Cloud ヘルスチェックを許可する fw-allow-health-check ルールを作成します。

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network-dual-stack \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-health-check \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --rules=tcp,udp,icmp
    

API

  1. firewalls.insert メソッドPOST リクエストを送信して、fw-allow-lb-access ファイアウォール ルールを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    
    {
    "name": "fw-allow-lb-access",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack",
    "priority": 1000,
    "sourceRanges": [
      "10.1.2.0/24", "10.3.4.0/24"
    ],
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      },
      {
        "IPProtocol": "icmp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    
  2. firewalls.insert メソッドPOST リクエストを送信して、fw-allow-lb-access-ipv6 ファイアウォール ルールを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    
    {
     "name": "fw-allow-lb-access-ipv6",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack",
     "priority": 1000,
     "sourceRanges": [
       "IPV6_ADDRESS"
     ],
     "allowed": [
       {
          "IPProtocol": "tcp"
        },
        {
          "IPProtocol": "udp"
        },
        {
          "IPProtocol": "icmp"
        }
     ],
     "direction": "INGRESS",
     "logConfig": {
        "enable": false
     },
     "disabled": false
    }
    

    IPV6_ADDRESS は、lb-subnet に割り当てられた IPv6 アドレスに置き換えます。

  3. firewalls.insert メソッドPOST リクエストを送信して、fw-allow-ssh ファイアウォール ルールを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    
    {
    "name": "fw-allow-ssh",
         "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack",
    "priority": 1000,
    "sourceRanges": [
      "0.0.0.0/0"
    ],
    "targetTags": [
      "allow-ssh"
    ],
    "allowed": [
     {
       "IPProtocol": "tcp",
       "ports": [
         "22"
       ]
     }
    ],
    "direction": "INGRESS",
    "logConfig": {
     "enable": false
    },
    "disabled": false
    }
    
  4. firewalls.insert メソッドPOST リクエストを送信して、fw-allow-health-check-ipv6 ファイアウォール ルールを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    
    {
    "name": "fw-allow-health-check-ipv6",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack",
    "priority": 1000,
    "sourceRanges": [
      "2600:2d00:1:b029::/64"
    ],
    "targetTags": [
      "allow-health-check-ipv6"
    ],
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    
  5. firewalls.insert メソッドPOST リクエストを送信して、fw-allow-health-check ファイアウォール ルールを作成します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls
    
    {
    "name": "fw-allow-health-check",
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack",
    "priority": 1000,
    "sourceRanges": [
      "130.211.0.0/22",
      "35.191.0.0/16"
    ],
    "targetTags": [
      "allow-health-check"
    ],
    "allowed": [
      {
        "IPProtocol": "tcp"
      },
      {
        "IPProtocol": "udp"
      },
      {
        "IPProtocol": "icmp"
      }
    ],
    "direction": "INGRESS",
    "logConfig": {
      "enable": false
    },
    "disabled": false
    }
    

バックエンド VM とインスタンス グループを作成する

この例では、2 つのバックエンド(サーバー)VM を持つ 2 つの非マネージド インスタンスを使用しています。内部パススルー ネットワーク ロードバランサのリージョン特性を示すために、2 つのインスタンス グループが別々のゾーン(us-west1-aus-west1-c)に配置されています。

  • インスタンス グループ ig-a には、次の 2 つの VM が含まれています。
    • vm-a1
    • vm-a2
  • インスタンス グループ ig-c には、次の 2 つの VM が含まれています。
    • vm-c1
    • vm-c2

4 つのバックエンド VM へのトラフィックがすべてロードバランスされます。

この例と追加の構成オプションをサポートするために、4 つの VM はそれぞれ、TCP ポート 808008808080884438443 をリッスンする Apache ウェブサーバーを実行します。

lb-subnet の内部 IP アドレスと外部(公開)エフェメラル IP アドレスがそれぞれの VM に割り当てられます。外部 IP アドレスは後で削除できます。

バックエンド VM がインターネットから Apache をダウンロードでき、また SSH 経由で接続できるため、この例ではバックエンド VM の外部 IP アドレスを使用していますが、これは必須ではありません。

デフォルトでは、Apache は任意の IP アドレスにバインドされます。内部パススルー ネットワーク ロードバランサは、宛先 IP を保持してパケットを配信します。

バックエンド VM で実行中のサーバー ソフトウェアが、ロードバランサの内部転送ルールの IP アドレスをリッスンしていることを確認してください。複数の内部転送ルールを構成している場合、ソフトウェアによってそれぞれに関連付けられた内部 IP アドレスがリッスンされます。内部パススルー ネットワーク ロードバランサによってバックエンド VM に配信されるパケットの宛先 IP アドレスは、転送ルールの内部 IP アドレスです。

サブネットワークのスタックタイプが、マネージド インスタンス グループで使用されるインスタンス テンプレートのスタックタイプと一致していることを確認します。マネージド インスタンス グループがデュアルスタック インスタンス テンプレートを使用している場合は、サブネットワークをデュアルスタックにする必要があります。

説明を簡単にするため、これらのバックエンド VM では Debian GNU/Linux 10 を実行します。

コンソール

バックエンド VM を作成する

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

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

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

    • 名前: vm-a1、ゾーン: us-west1-a
    • 名前: vm-a2、ゾーン: us-west1-a
    • 名前: vm-c1、ゾーン: us-west1-c
    • 名前: vm-c2、ゾーン: us-west1-c
  3. [インスタンスを作成] をクリックします。

  4. ステップ 2 に示したように [名前] を設定します。

  5. [リージョン] に us-west1 を選択して、ステップ 2 に示したゾーンを選択します。

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

  7. [詳細オプション] をクリックします。

  8. [ネットワーキング] をクリックして次のフィールドを構成します。

    1. [ネットワーク タグ] に「allow-ssh」と「allow-health-check-ipv6」を入力します。
    2. [ネットワーク インターフェース] で、次のように選択します。
      • ネットワーク: lb-network-dual-stack
      • サブネット: lb-subnet
      • IP スタックタイプ: IPv4 と IPv6(デュアルスタック)
      • プライマリ内部 IPv4 アドレス: エフェメラル(自動)
      • 外部 IPv4 アドレス: エフェメラル
    3. [管理] をクリックし、[起動スクリプト] フィールドに次のスクリプトを入力します。スクリプトの内容は 4 つの VM ですべて同じです。

      #! /bin/bash
      if [ -f /etc/startup_script_completed ]; then
      exit 0
      fi
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      file_ports="/etc/apache2/ports.conf"
      file_http_site="/etc/apache2/sites-available/000-default.conf"
      file_https_site="/etc/apache2/sites-available/default-ssl.conf"
      http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
      http_vh_prts="*:80 *:8008 *:8080 *:8088"
      https_listen_prts="Listen 443\nListen 8443"
      https_vh_prts="*:443 *:8443"
      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
      prt_conf="$(cat "$file_ports")"
      prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
      prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
      echo "$prt_conf" | tee "$file_ports"
      http_site_conf="$(cat "$file_http_site")"
      http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
      echo "$http_site_conf_2" | tee "$file_http_site"
      https_site_conf="$(cat "$file_https_site")"
      https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
      echo "$https_site_conf_2" | tee "$file_https_site"
      systemctl restart apache2
      touch /etc/startup_script_completed
      
  9. [作成] をクリックします。

インスタンス·グループを作成する

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

    [インスタンス グループ] に移動

  2. 次の手順を繰り返し、それぞれ 2 つの VM を持つ 2 つの非マネージド インスタンス グループを作成します。以下の組み合わせを使用します。

    • インスタンス グループ名: ig-a、ゾーン: us-west1-a、VM: vm-a1vm-a2
    • インスタンス グループ名: ig-c、ゾーン: us-west1-c、VM: vm-c1vm-c2
  3. [インスタンス グループの作成] をクリックします。

  4. [新しい非マネージド インスタンス グループ] をクリックします。

  5. ステップ 2 に示したように [名前] を設定します。

  6. [ロケーション] セクションで、[リージョン] に us-west1 を選択し、ステップ 2 で示したように [ゾーン] を選択します。

  7. [ネットワーク] で [lb-network-dual-stack] を選択します。

  8. [サブネットワーク] で [lb-subnet] を選択します。

  9. [VM インスタンス] セクションに、ステップ 2 で示した VM を追加します。

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

gcloud

  1. 4 つの VM を作成するには、[VM-NAME][ZONE] にはこれらの 4 つの組み合わせを使用して、gcloud compute instances create コマンドを 4 回実行します。スクリプトの内容は 4 つの VM ですべて同じです。

    • VM-NAME: vm-a1ZONE: us-west1-a
    • VM-NAME: vm-a2ZONE: us-west1-a
    • VM-NAME: vm-c1ZONE: us-west1-c
    • VM-NAME: vm-c2ZONE: us-west1-c

      gcloud compute instances create VM-NAME \
        --zone=ZONE \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check-ipv6 \
        --subnet=lb-subnet \
        --stack-type=IPV4_IPV6 \
        --metadata=startup-script='#! /bin/bash
      if [ -f /etc/startup_script_completed ]; then
      exit 0
      fi
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      file_ports="/etc/apache2/ports.conf"
      file_http_site="/etc/apache2/sites-available/000-default.conf"
      file_https_site="/etc/apache2/sites-available/default-ssl.conf"
      http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
      http_vh_prts="*:80 *:8008 *:8080 *:8088"
      https_listen_prts="Listen 443\nListen 8443"
      https_vh_prts="*:443 *:8443"
      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
      prt_conf="$(cat "$file_ports")"
      prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
      prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
      echo "$prt_conf" | tee "$file_ports"
      http_site_conf="$(cat "$file_http_site")"
      http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
      echo "$http_site_conf_2" | tee "$file_http_site"
      https_site_conf="$(cat "$file_https_site")"
      https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
      echo "$https_site_conf_2" | tee "$file_https_site"
      systemctl restart apache2
      touch /etc/startup_script_completed'
      
  2. 各ゾーンに次の 2 つの非マネージド インスタンス グループを作成します。

    gcloud compute instance-groups unmanaged create ig-a \
        --zone=us-west1-a
    gcloud compute instance-groups unmanaged create ig-c \
        --zone=us-west1-c
    
  3. 適切なインスタンス グループに VM を追加します。

    gcloud compute instance-groups unmanaged add-instances ig-a \
        --zone=us-west1-a \
        --instances=vm-a1,vm-a2
    gcloud compute instance-groups unmanaged add-instances ig-c \
        --zone=us-west1-c \
        --instances=vm-c1,vm-c2
    

API

4 つの VM に対して、次の VM 名とゾーンを使用します。

  • VM-NAME: vm-a1ZONE: us-west1-a
  • VM-NAME: vm-a2ZONE: us-west1-a
  • VM-NAME: vm-c1ZONE: us-west1-c
  • VM-NAME: vm-c2ZONE: us-west1-c

現在の DEBIAN_IMAGE_NAME を取得するには、次の gcloud コマンドを実行します。

gcloud compute images list \
 --filter="family=debian-10"

instances.insert メソッドに 4 つの POST リクエストを送信して、4 つのバックエンド VM を作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances

{
 "name": "VM-NAME",
 "tags": {
   "items": [
     "allow-health-check-ipv6",
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/[ZONE]/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "stackType": "IPV4_IPV6",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "VM-NAME",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
       "diskType": "projects/PROJECT_ID/zones/zone/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "metadata": {
   "items": [
     {
       "key": "startup-script",
       "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nfile_ports=\"/etc/apache2/ports.conf\"\nfile_http_site=\"/etc/apache2/sites-available/000-default.conf\"\nfile_https_site=\"/etc/apache2/sites-available/default-ssl.conf\"\nhttp_listen_prts=\"Listen 80\\nListen 8008\\nListen 8080\\nListen 8088\"\nhttp_vh_prts=\"*:80 *:8008 *:8080 *:8088\"\nhttps_listen_prts=\"Listen 443\\nListen 8443\"\nhttps_vh_prts=\"*:443 *:8443\"\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://169.254.169.254/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nprt_conf=\"$(cat \"$file_ports\")\"\nprt_conf_2=\"$(echo \"$prt_conf\" | sed \"s|Listen 80|${http_listen_prts}|\")\"\nprt_conf=\"$(echo \"$prt_conf_2\" | sed \"s|Listen 443|${https_listen_prts}|\")\"\necho \"$prt_conf\" | tee \"$file_ports\"\nhttp_site_conf=\"$(cat \"$file_http_site\")\"\nhttp_site_conf_2=\"$(echo \"$http_site_conf\" | sed \"s|*:80|${http_vh_prts}|\")\"\necho \"$http_site_conf_2\" | tee \"$file_http_site\"\nhttps_site_conf=\"$(cat \"$file_https_site\")\"\nhttps_site_conf_2=\"$(echo \"$https_site_conf\" | sed \"s|_default_:443|${https_vh_prts}|\")\"\necho \"$https_site_conf_2\" | tee \"$file_https_site\"\nsystemctl restart apache2"
     }
   ]
 },
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

instanceGroups.insert メソッドPOST リクエストを送信して、2 つのインスタンス グループを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups

{
 "name": "ig-a",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups

{
 "name": "ig-c",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack",
 "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

instanceGroups.addInstances メソッドPOST リクエストを送信して、各インスタンス グループにインスタンスを追加します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2"
   }
 ]
}
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c/addInstances

{
 "instances": [
   {
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1",
     "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2"
   }
 ]
}

ロードバランサ コンポーネントを構成する

この手順では、ヘルスチェックとバックエンド サービス、フロントエンド コンポーネントなどの内部パススルー ネットワーク ロードバランサ コンポーネントを構成します。

  • ヘルスチェック: この例では、HTTP ヘルスチェックで HTTP 200(OK)レスポンスを確認します。詳細については、内部パススルー ネットワーク ロードバランサの概要のヘルスチェックのセクションをご覧ください。

  • バックエンド サービス: 内部ロードバランサを介して HTTP トラフィックを渡す必要があるため、UDP ではなく TCP を使用する必要があります。

  • 転送ルール: この例では、IPv4 と IPv6 のトラフィックの内部転送ルールを 2 つ作成します。

  • 内部 IP アドレス: この例では、IPv4 転送ルールを作成する際に、内部 IP アドレス 10.1.2.99 を指定しています。詳細については、内部 IP アドレスをご覧ください。構成する IPv4 アドレスを選択しますが、IPv6 アドレスは自動的に割り当てられます。

コンソール

  1. Google Cloud コンソールの [ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [ロードバランサを作成] をクリックします。

  3. [ネットワーク ロードバランサ(TCP/SSL)] カードで [構成を開始] をクリックします。
  4. [インターネット接続または内部専用] で [VM 間のみ] を選択します。

  5. [続行] をクリックします。

  6. [Create internal passthrough Network Load Balancer] ページで、次の情報を入力します。

    • ロードバランサの名前: be-ilb
    • リージョン: us-west1
    • ネットワーク: lb-network-dual-stack

バックエンドの構成

  1. [バックエンドの構成] をクリックします。
  2. [バックエンド] の [新しいバックエンド] セクションで、[IP スタックタイプ] に [IPv4 と IPv6(デュアルスタック)] を選択します。
  3. [インスタンス グループ] で、ig-a インスタンス グループを選択し、[完了] をクリックします。
  4. [バックエンドを追加] をクリックし、この手順を繰り返して ig-c を追加します。
  5. [ヘルスチェック] リストから [ヘルスチェックを作成] を選択し、次の情報を入力して [保存] をクリックします。
    • 名前: hc-http-80
    • 範囲: リージョン
    • プロトコル: HTTP
    • ポート: 80.
    • プロキシのプロトコル: NONE
    • リクエストパス: /
  6. [バックエンドの構成] の横に青いチェックマークが表示されていることを確認します。

フロントエンドの構成

  1. [フロントエンドの構成] をクリックします。[新しいフロントエンドの IP とポート] セクションで、次の操作を行います。
    1. [名前] に「fr-ilb-ipv6」と入力します。
    2. IPv6 トラフィックを処理する手順は次のとおりです。
      1. [IP バージョン] で [IPv6] を選択します。
      2. [サブネットワーク] で、[lb-subnet] を選択します。転送ルールの IPv6 アドレス範囲は常にエフェメラルです。
      3. [ポート] で [複数] を選択し、[ポート番号] フィールドに 80800880808088 と入力します。
      4. [完了] をクリックします。
    3. IPv4 トラフィックを処理する手順は次のとおりです。
      1. [フロントエンド IP とポートの追加] をクリックします。
      2. [名前] に「fr-ilb」と入力します。
      3. [サブネットワーク] で [lb-subnet] を選択します。
      4. [内部 IP の目的] セクションで、[ IP アドレス] リストで [ IP アドレスを作成] を選択して、以下の情報を入力してから [予約] をクリックします。
        • 名前: ip-ilb
        • IP バージョン: IPv4
        • 静的 IP アドレス: ユーザー指定
        • カスタム IP アドレス: 10.1.2.99
      5. [ポート] で、[複数] を選択して、[ポート番号] に 80800880808088 を入力します。
      6. [完了] をクリックします。
      7. 続行する前に、[フロントエンドの構成] の隣に青いチェックマークがあることを確認します。

構成を確認する

  1. [確認と完了] をクリックします。すべての設定を確認します。
  2. 設定が正しい場合は、[作成] をクリックします。内部パススルー ネットワーク ロードバランサが作成されるまでに数分かかります。

gcloud

  1. 新しいリージョン HTTP ヘルスチェックを作成して、ポート 80 で VM との HTTP 接続をテストします。

    gcloud compute health-checks create http hc-http-80 \
        --region=us-west1 \
        --port=80
    
  2. HTTP トラフィックのバックエンド サービスを作成します。

    gcloud compute backend-services create be-ilb \
        --load-balancing-scheme=internal \
        --protocol=tcp \
        --region=us-west1 \
        --health-checks=hc-http-80 \
        --health-checks-region=us-west1
    
  3. バックエンド サービスに、2 つのインスタンス グループを追加します。

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-c \
        --instance-group-zone=us-west1-c
    
  4. バックエンド サービスの転送ルールを 2 つ作成します。IPv4 転送ルールを作成するときに、IPv4 アドレス用のサブネット内の内部 IP アドレスに 10.1.2.99 を指定します。

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --subnet=lb-subnet \
        --address=10.1.2.99 \
        --ip-protocol=TCP \
        --ports=80,8008,8080,8088 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    
    gcloud compute forwarding-rules create fr-ilb-ipv6 \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --subnet=lb-subnet \
        --ip-protocol=TCP \
        --ports=80,8008,8080,8088 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1 \
        --ip-version=IPV6
    

API

regionHealthChecks.insert メソッドPOST リクエストを送信してヘルスチェックを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks

{
"name": "hc-http-80",
"type": "HTTP",
"httpHealthCheck": {
  "port": 80
}
}

regionBackendServices.insert メソッドPOST リクエストを送信して、リージョン バックエンド サービスを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices

{
"name": "be-ilb",
"backends": [
  {
    "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a",
    "balancingMode": "CONNECTION"
  },
  {
    "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c",
    "balancingMode": "CONNECTION"
  }
],
"healthChecks": [
  "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80"
],
"loadBalancingScheme": "INTERNAL",
"connectionDraining": {
  "drainingTimeoutSec": 0
 }
}

forwardingRules.insert メソッドPOST リクエストを送信して転送ルールを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb-ipv6",
"IPProtocol": "TCP",
"ports": [
  "80", "8008", "8080", "8088"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
"ipVersion": "IPV6",
"networkTier": "PREMIUM"
}

forwardingRules.insert メソッドPOST リクエストを送信して転送ルールを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb",
"IPAddress": "10.1.2.99",
"IPProtocol": "TCP",
"ports": [
  "80", "8008", "8080", "8088"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
"networkTier": "PREMIUM"
}

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

ロードバランサをテストするには、ロードバランサと同じリージョンにクライアント VM を作成し、クライアントからロードバランサにトラフィックを送信します。

クライアント VM を作成する

この例では、クライアント VM(vm-client)を、バックエンド(サーバー)VM と同じリージョンに作成します。クライアントを使用するのは、ロードバランサの構成を検証し、テストセクションで説明されている想定される動作を示すためです。

コンソール

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

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

  2. [インスタンスを作成] をクリックします。

  3. [名前] に「vm-client」と入力します。

  4. [リージョン] で us-west1 を選択します。

  5. [ゾーン] で us-west1-a を選択します。

  6. [詳細オプション] をクリックします。

  7. [ネットワーキング] をクリックして次のフィールドを構成します。

    1. [ネットワーク タグ] に「allow-ssh」と入力します。
    2. [ネットワーク インターフェース] で、次のように選択します。
      • ネットワーク: lb-network-dual-stack
      • サブネット: lb-subnet
      • IP スタックタイプ: IPv4 と IPv6(デュアルスタック)
      • プライマリ内部 IP: エフェメラル(自動)
      • 外部 IP: エフェメラル
    3. [完了] をクリックします。
  8. [作成] をクリックします。

gcloud

クライアント VM はロードバランサと同じリージョン内の任意のゾーンにあり、そのリージョン内の任意のサブネットを使用できます。この例では、クライアントは us-west1-a ゾーンにあり、バックエンド VM と同じサブネットを使用しています。

gcloud compute instances create vm-client \
    --zone=us-west1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --stack-type=IPV4_IPV6 \
    --tags=allow-ssh \
    --subnet=lb-subnet

API

instances.insert メソッドPOST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances

{
 "name": "vm-client",
 "tags": {
   "items": [
     "allow-ssh"
   ]
 },
 "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2",
 "canIpForward": false,
 "networkInterfaces": [
   {
     "stackType": "IPV4_IPV6",
     "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack",
     "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
     "accessConfigs": [
       {
         "type": "ONE_TO_ONE_NAT",
         "name": "external-nat",
         "networkTier": "PREMIUM"
       }
     ]
   }
 ],
 "disks": [
   {
     "type": "PERSISTENT",
     "boot": true,
     "mode": "READ_WRITE",
     "autoDelete": true,
     "deviceName": "vm-client",
     "initializeParams": {
       "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
       "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard",
       "diskSizeGb": "10"
     }
   }
 ],
 "scheduling": {
   "preemptible": false
 },
 "deletionProtection": false
}

接続をテストする

このテストでは、ロードバランサのバックエンド VM からではなく、個別のクライアント VM からロードバランサに接続します。想定される動作は、トラフィックは 4 つのバックエンド VM に分散されることです。

  1. クライアント VM インスタンスに接続します。

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. IPv6 転送ルール fr-ilb-ipv6 の説明を取得します。説明の IPV6_ADDRESS をメモします。

    gcloud compute forwarding-rules describe fr-ilb-ipv6 --region=us-west1
    
  3. IPv4 転送ルール fr-ilb の説明を取得します。

    gcloud compute forwarding-rules describe fr-ilb --region=us-west1
    
  4. IPv6 接続のクライアントから、次のコマンドを実行します。

    $ curl -m 10 -s http://IPV6_ADDRESS:80
    

    たとえば、割り当てられた IPv6 アドレスが [fd20:1db0:b882:802:0:46:0:0/96]:80 の場合、コマンドは次のようになります。

    $  curl -m 10 -s http://[fd20:1db0:b882:802:0:46:0:0]:80
    
  5. IPv4 接続のクライアントから、次のコマンドを実行します。

    $ curl -m 10 -s http://10.1.2.99:80
    

    プレースホルダを有効な値に置き換えます。

    • IPV6_ADDRESS は、fr-ilb-ipv6 転送ルールのエフェメラル IPv6 アドレスです。

追加の構成オプション

このセクションでは、代替および追加の構成オプションを提供する構成例を示します。これらのタスクはすべて省略可です。これらは任意の順序で実行できます。

グローバル アクセスを有効にする

サンプルの内部パススルー ネットワーク ロードバランサのグローバル アクセスを有効にすると、すべてのリージョンのクライアントがアクセスできるようになります。サンプルのロードバランサのバックエンドは、引き続き 1 つのリージョン(us-west1)に配置する必要があります。

グローバル アクセスを使用した内部パススルー ネットワーク ロードバランサ。
グローバル アクセスを構成した内部パススルー ネットワーク ロードバランサ(クリックして拡大)

グローバル アクセスを構成するには、次の変更を行います。

Console

ロードバランサの転送ルールを編集する

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [名前] 列で、内部パススルー ネットワーク ロードバランサをクリックします。サンプルのロードバランサの名前は be-ilb です。

  3. [フロントエンドの構成] をクリックします。

  4. [編集] をクリックします。

  5. [グローバル アクセス] で [有効] を選択します。

  6. [完了] をクリックします。

  7. [更新] をクリックします。

[ロードバランサの詳細] ページで、フロントエンドの構成がリージョン(REGION)で、グローバル アクセスが有効になっていることを確認します。

gcloud

  1. サンプルのロードバランサの転送ルール fr-ilb を更新して、--allow-global-access フラグを含めます。

    gcloud compute forwarding-rules update fr-ilb \
       --region=us-west1 \
       --allow-global-access
    
  2. forwarding-rules describe コマンドを使用すると、転送ルールでグローバル アクセスが有効になっているかどうかを確認できます。次に例を示します。

    gcloud compute forwarding-rules describe fr-ilb \
       --region=us-west1 \
       --format="get(name,region,allowGlobalAccess)"
    

    グローバル アクセスが有効になっている場合、転送ルールの名前とリージョンの出力の後に True という単語が表示されます。

API

forwardingRules/patch メソッドPATCH リクエストを送信します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb

{
"allowGlobalAccess": true
}

VM クライアントを作成してグローバル アクセスをテストする

コンソール

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

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

  2. [インスタンスを作成] をクリックします。

  3. [名前] を vm-client2 に設定します。

  4. [リージョン] を europe-west1 に設定します。

  5. [ゾーン] を europe-west1-b に設定します。

  6. [詳細オプション] をクリックします。

  7. [ネットワーキング] をクリックして次のフィールドを構成します。

    1. [ネットワーク タグ] に「allow-ssh」と入力します。
    2. [ネットワーク インターフェース] で、次のように選択します。
      • ネットワーク: lb-network
      • サブネット: europe-subnet
  8. [作成] をクリックします。

gcloud

クライアント VM はロードバランサと同じリージョン内の任意のゾーンにあり、そのリージョン内の任意のサブネットを使用できます。この例では、クライアントは europe-west1-b ゾーンにあり、バックエンド VM と同じサブネットを使用しています。

gcloud compute instances create vm-client2 \
    --zone=europe-west1-b \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --tags=allow-ssh \
    --subnet=europe-subnet

API

instances.insert メソッドPOST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/europe-west1-b/instances

{
"name": "vm-client2",
"tags": {
  "items": [
    "allow-ssh"
  ]
},
"machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/europe-west1-b/machineTypes/e2-standard-2",
"canIpForward": false,
"networkInterfaces": [
  {
    "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
    "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/europe-west1/subnetworks/europe-subnet",
    "accessConfigs": [
      {
        "type": "ONE_TO_ONE_NAT",
        "name": "external-nat",
        "networkTier": "PREMIUM"
      }
    ]
  }
],
"disks": [
  {
    "type": "PERSISTENT",
    "boot": true,
    "mode": "READ_WRITE",
    "autoDelete": true,
    "deviceName": "vm-client2",
    "initializeParams": {
      "sourceImage": "projects/debian-cloud/global/images/debian-image-name",
      "diskType": "projects/PROJECT_ID/zones/europe-west1-b/diskTypes/pd-standard",
      "diskSizeGb": "10"
    }
  }
],
"scheduling": {
  "preemptible": false
},
"deletionProtection": false
}

VM クライアントに接続して接続性をテストする

接続をテストするには、次のコマンドを実行します。

  gcloud compute ssh vm-client2 --zone=europe-west1-b
  

us-west1 リージョンの vm-client で実施したように、構成されたすべてのポートでロードバランサへの接続をテストします。転送ルールで構成された 4 つのポートで HTTP の接続性をテストします。

  curl http://10.1.2.99
  curl http://10.1.2.99:8008
  curl http://10.1.2.99:8080
  curl http://10.1.2.99:8088
  

マネージド インスタンス グループを構成する

この構成例では、非マネージド インスタンス グループが作成されています。内部パススルー ネットワーク ロードバランサのバックエンドとして、代わりにマネージド インスタンス グループ(ゾーンまたはリージョンのマネージド インスタンス グループなど)を使用できます。

マネージド インスタンス グループを使用するには、インスタンス テンプレートを作成する必要があります。この例では、ゾーンの 2 つの非マネージド インスタンス グループを 1 つのリージョン マネージド インスタンス グループに置き換える方法を示しています。リージョンのマネージド インスタンス グループは、複数のゾーンに VM を自動的に作成し、ゾーン間での本番環境トラフィックの分散を容易にします。

マネージド インスタンス グループは、自動スケーリング自動修復もサポートします。内部パススルー ネットワーク ロードバランサで自動スケーリングを使用する場合、ロード バランシングに基づいてスケーリングすることはできません。

この手順では、内部パススルー ネットワーク ロードバランサのバックエンド サービスを、リージョンのマネージド インスタンス グループを使用して変更する方法を示します。

コンソール

インスタンス テンプレート

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

    VM インスタンス テンプレートに移動

  2. [インスタンス テンプレートを作成] をクリックします。

  3. [名前] を template-vm-ilb に設定します。

  4. マシンタイプを選択します。

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

  6. [詳細オプション] をクリックします。

  7. [ネットワーキング] をクリックして次のフィールドを構成します。

    1. [ネットワーク タグ] に「allow-ssh」と「allow-health-check」を入力します。
    2. [ネットワーク インターフェース] で、次のように選択します。
      • ネットワーク: lb-network
      • サブネット: lb-subnet
  8. [管理] をクリックし、[起動スクリプト] フィールドに次のスクリプトを入力します。

    #! /bin/bash
    if [ -f /etc/startup_script_completed ]; then
    exit 0
    fi
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    file_ports="/etc/apache2/ports.conf"
    file_http_site="/etc/apache2/sites-available/000-default.conf"
    file_https_site="/etc/apache2/sites-available/default-ssl.conf"
    http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
    http_vh_prts="*:80 *:8008 *:8080 *:8088"
    https_listen_prts="Listen 443\nListen 8443"
    https_vh_prts="*:443 *:8443"
    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
    prt_conf="$(cat "$file_ports")"
    prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
    prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
    echo "$prt_conf" | tee "$file_ports"
    http_site_conf="$(cat "$file_http_site")"
    http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
    echo "$http_site_conf_2" | tee "$file_http_site"
    https_site_conf="$(cat "$file_https_site")"
    https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
    echo "$https_site_conf_2" | tee "$file_https_site"
    systemctl restart apache2
    touch /etc/startup_script_completed
    
  9. [作成] をクリックします。

マネージド インスタンス グループ

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

    [インスタンス グループ] に移動

  2. [インスタンス グループを作成] をクリックします。

  3. [名前] を ig-ilb に設定します。

  4. [ロケーション] で [マルチゾーン] を選択し、[リージョン] を us-west1 に設定します。

  5. [インスタンス テンプレート] を template-vm-ilb に設定します。

  6. 省略可: 自動スケーリングを構成します。インスタンス グループは内部パススルー ネットワーク ロードバランサのバックエンドであるため、HTTP ロード バランシングの使用に基づいたインスタンス グループの自動スケーリングはできません。

  7. [インスタンスの最小数] を 1、[インスタンスの最大数] を 6 にそれぞれ設定します。

  8. 省略可: 自動修復を構成します。自動修復を構成する場合、内部パススルー ネットワーク ロードバランサのバックエンド サービスで使用されるのと同じヘルスチェックを使用します。この例では、hc-http-80.を使用します。

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

gcloud

  1. インスタンス テンプレートを作成します。必要に応じて、その他のパラメータを設定します。たとえば、イメージ テンプレートには、マシンタイプを設定します。

    gcloud compute instance-templates create template-vm-ilb \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --tags=allow-ssh,allow-health-check \
        --subnet=lb-subnet \
        --region=us-west1 \
        --network=lb-network \
        --metadata=startup-script='#! /bin/bash
    if [ -f /etc/startup_script_completed ]; then
    exit 0
    fi
    apt-get update
    apt-get install apache2 -y
    a2ensite default-ssl
    a2enmod ssl
    file_ports="/etc/apache2/ports.conf"
    file_http_site="/etc/apache2/sites-available/000-default.conf"
    file_https_site="/etc/apache2/sites-available/default-ssl.conf"
    http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088"
    http_vh_prts="*:80 *:8008 *:8080 *:8088"
    https_listen_prts="Listen 443\nListen 8443"
    https_vh_prts="*:443 *:8443"
    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
    prt_conf="$(cat "$file_ports")"
    prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")"
    prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")"
    echo "$prt_conf" | tee "$file_ports"
    http_site_conf="$(cat "$file_http_site")"
    http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")"
    echo "$http_site_conf_2" | tee "$file_http_site"
    https_site_conf="$(cat "$file_https_site")"
    https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")"
    echo "$https_site_conf_2" | tee "$file_https_site"
    systemctl restart apache2
    touch /etc/startup_script_completed'
    
  2. 次のテンプレートを使用して、リージョンのマネージド インスタンス グループを 1 つ作成します。

    gcloud compute instance-groups managed create ig-ilb \
        --template=template-vm-ilb \
        --region=us-west1 \
        --size=6
    
  3. リージョンのマネージド インスタンス グループをバックエンドとして作成済みのバックエンド サービスに追加します。

    gcloud compute backend-services add-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-ilb \
        --instance-group-region=us-west1
    
  4. ゾーンの 2 つの非マネージド インスタンス グループをバックエンド サービスから切断します。

    gcloud compute backend-services remove-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-a \
        --instance-group-zone=us-west1-a
    gcloud compute backend-services remove-backend be-ilb \
        --region=us-west1 \
        --instance-group=ig-c \
        --instance-group-zone=us-west1-c
    

バックエンド VM から外部 IP アドレスを削除する

バックエンド VM を作成したときに、起動スクリプトを介して Apache をダウンロードできるように、それぞれにエフェメラル外部 IP アドレスが割り当てられました。バックエンド VM は、内部パススルー ネットワーク ロードバランサのみで使用されるため、外部 IP アドレスは削除できます。外部 IP アドレスを削除すると、バックエンド VM から直接インターネットにアクセスできなくなります。

コンソール

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

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

  2. 各バックエンド VM に対して以下の手順を繰り返します。

  3. バックエンド VM の名前(vm-a1 など)をクリックします。

  4. [編集] をクリックします。

  5. [ネットワーク インターフェース] セクションで、ネットワークをクリックします。

  6. [外部 IP] リストで [なし] を選択し、[完了] をクリックします。

  7. [保存] をクリックします。

gcloud

  1. インスタンスのゾーンを検索する。たとえば、リージョンのマネージド インスタンス グループを使用している場合、インスタンスごとに次のコマンドを実行してゾーンを判別します。[SERVER-VM] を検索する VM の名前に置き換えます。

    gcloud compute instances list --filter="name=[SERVER-VM]"
    
  2. 各バックエンド VM に対して次の手順を繰り返します。[SERVER-VM] を VM の名前、[ZONE] を VM のゾーンにそれぞれ置き換えます。

    gcloud compute instances delete-access-config [SERVER-VM] \
        --zone=[ZONE] \
        --access-config-name=external-nat
    

API

各バックエンド VM の instances.deleteAccessConfig メソッドPOST リクエストを送信します。vm-a1 は VM の名前、us-west1-a は VM のゾーンにそれぞれ置き換えます

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1/deleteAccessConfig?accessConfig=external-nat&networkInterface=None

予約済みの内部 IP アドレスを使用する

バックエンド VM とインスタンス グループを作成すると、VM インスタンスはエフェメラル内部 IPv4 または IPv6 アドレスを使用します。

以下の手順は、内部 IPv4 アドレスまたは IPv6 アドレスを静的内部 IPv4 アドレスまたは IPv6 アドレスに昇格させ、静的内部 IP アドレスを使用するように VM インスタンスを更新する方法を説明しています。

  1. 使用中のエフェメラル内部 IPv4 アドレスまたは IPv6 アドレスを静的アドレスに昇格させる
  2. 内部 IPv6 アドレスを既存のインスタンスに変更または割り当てる

また別の方法として、次の手順は、新しい静的内部 IPv4 アドレスまたは IPv6 アドレスを予約してから、静的内部 IP アドレスを使用するように VM インスタンスを更新する方法を示しています。

  1. 新しい静的内部 IPv4 または IPv6 アドレスを予約する

    内部 IPv4 の予約とは異なり、内部 IPv6 の予約では、サブネットワークからの特定の IP アドレスの予約をサポートしていません。代わりに、/96 の内部 IPv6 アドレス範囲は、サブネットの /64 の内部 IPv6 アドレス範囲から自動的に割り振られます。

  2. 内部 IPv6 アドレスを既存のインスタンスに変更または割り当てる

詳細については、静的内部 IP アドレスを予約する方法をご覧ください。

すべてのポートでトラフィックを受信する

ロードバランサがトラフィックを受け入れるポートは、バックエンド サービスではなくロードバランサの転送ルールによって決まります。各コンポーネントの目的については、コンポーネントをご覧ください。

このサンプルのロードバランサの転送ルールを作成したときに、ポート 80800880808088 を構成しました。Apache をインストールする起動スクリプトでも、ポート 443 および 8443 で HTTPS 接続を受け入れるように構成されます。

この 6 つのポートをサポートするには、すべてのポートでトラフィックを受け入れるように転送ルールを構成します。この方法では、バックエンド VM への受信接続を許可するファイアウォール ルールを特定のポートのみを許可するように構成することもできます。

この手順では、サンプルのロードバランサの転送ルールを、すべてのポートでトラフィックを受け入れるルールに置き換える方法を示します。

このセットアップを使用するタイミングの詳細については、共通の IP アドレスを使用した内部パススルー ネットワーク ロードバランサと転送ルールをご覧ください。

コンソール

転送ルールを削除して新しいルールを作成する

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. be-ilb ロードバランサをクリックして、[編集] をクリックします。

  3. [フロントエンドの構成] をクリックします。

  4. 10.1.2.9 転送ルールの上にポインタを置いて、[削除] をクリックします。

  5. [フロントエンド IP とポートの追加] をクリックします。

  6. [新しいフロントエンドの IP とポート] セクションで、次の情報を入力して [完了] をクリックします。

    • 名前: fr-ilb
    • サブネットワーク: lb-subnet
    • 内部 IP: ip-ilb
    • ポート: すべて
  7. 続行する前に、[フロントエンドの構成] の隣に青いチェックマークがあることを確認します。

  8. [確認と完了] をクリックして、ロードバランサの構成設定を確認します。

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

gcloud

  1. 既存の転送ルール fr-ilb を削除します。

    gcloud compute forwarding-rules delete fr-ilb \
        --region=us-west1
    
  2. ポート構成でキーワード ALL を使用する置換転送ルールを同じ名前で作成します。転送ルールのその他のパラメータは同じです。

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=10.1.2.99 \
        --ip-protocol=TCP \
        --ports=ALL \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    

API

forwardingRules.delete メソッドDELETE リクエストを送信して転送ルールを削除します。

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb

forwardingRules.insert メソッドPOST リクエストを送信して転送ルールを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb",
"IPAddress": "10.1.2.99",
"IPProtocol": "TCP",
"allPorts": true,
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
"networkTier": "PREMIUM"
}

すべてのポート設定でトラフィックをテストする

クライアント VM インスタンスに接続し、HTTP 接続と HTTPS 接続をテストします。

  • クライアント VM に接続します。

    gcloud compute ssh vm-client --zone=us-west1-a
    
  • 4 つのポートすべてで HTTP 接続をテストします。

    curl http://10.1.2.99
    curl http://10.1.2.99:8008
    curl http://10.1.2.99:8080
    curl http://10.1.2.99:8088
    
  • ポート 4438443 で HTTPS 接続をテストします。セットアップ例の各 Apache サーバーは自己署名証明書を使用するため、--insecure フラグが必要です。

    curl https://10.1.2.99 --insecure
    curl https://10.1.2.99:8443 --insecure
    

  • HTTP リクエスト(4 つのポートすべて)と HTTPS リクエスト(両方のポート)がすべてのバックエンド VM に分散されることを確認します。

2 つの転送ルールを使用して複数のポートでトラフィックを受信する

このサンプルのロードバランサの転送ルールを作成したときに、ポート 80800880808088 を構成しました。Apache をインストールする起動スクリプトでも、ポート 443 および 8443 で HTTPS 接続を受け入れるように構成されます。

すべてのポートでトラフィックを受け入れるように単一の転送ルールを構成するという戦略に代わる別の戦略では、それぞれ 5 つ以下のポートをサポートする複数の転送ルールを作成します。

この手順では、サンプルのロードバランサの転送ルールを 2 つの転送ルールに置き換える方法を示します。1 つはポート 80800880808088 でトラフィックを処理し、もう 1 つはポート 443 および 8443 でトラフィックを処理します。

このセットアップを使用するタイミングの詳細については、共通の IP アドレスを使用した内部パススルー ネットワーク ロードバランサと転送ルールをご覧ください。

コンソール

  1. Google Cloud コンソールで、[転送ルール] ページに移動します。

    [転送ルール] に移動

  2. [名前] 列で、[fr-ilb]、[削除] の順にクリックします。

  3. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  4. [名前] 列で [be-ilb] をクリックします。

  5. [編集] をクリックします。

  6. [フロントエンドの構成] をクリックします。

  7. [フロントエンド IP とポートの追加] をクリックします。

  8. [新しいフロントエンドの IP とポート] セクションで、次の操作を行います。

    1. [名前] に「fr-ilb-http」と入力します。
    2. [サブネットワーク] で [lb-subnet] を選択します。
    3. [内部 IP の目的] で [共有] を選択します。
    4. [IP アドレス] リストで [IP アドレスを作成] を選択し、次の情報を入力して [予約] をクリックします。
      • 名前: internal-10-1-2-99
      • 静的 IP アドレス: ユーザー指定
      • カスタム IP アドレス: 10.1.2.99
    5. [ポート] で、[複数] を選択して、[ポート番号] に 80800880808088 を入力します。
    6. [完了] をクリックします。
  9. [フロントエンド IP とポートの追加] をクリックします。

  10. [新しいフロントエンドの IP とポート] セクションで、次の操作を行います。

    1. [名前] に「fr-ilb-https」と入力します。
    2. [サブネットワーク] で [lb-subnet] を選択します。
    3. [内部 IP の目的] で [共有] を選択します。
    4. [IP アドレス] リストから [internal-10-1-2-99] を選択します。
    5. [ポート] で [複数] を選択し、[ポート番号] に 4438443 を入力します。
    6. [完了] をクリックします。
  11. [確認と完了] をクリックして、ロードバランサの構成設定を確認します。

  12. [更新] をクリックします。

gcloud

  1. 既存の転送ルール fr-ilb を削除します。

    gcloud compute forwarding-rules delete fr-ilb \
        --region=us-west1
    
  2. 10.1.2.99 の静的(予約済み)内部 IP アドレスを作成し、その --purpose フラグを SHARED_LOADBALANCER_VIP に設定します。2 つの内部転送ルールが同じ内部 IP アドレスを使用できるようにするには、--purpose フラグが必要です。

    gcloud compute addresses create internal-10-1-2-99 \
        --region=us-west1 \
        --subnet=lb-subnet \
        --addresses=10.1.2.99 \
        --purpose=SHARED_LOADBALANCER_VIP
    
    1. 次のパラメータを使用して 2 つの置換転送ルールを作成します。
    gcloud compute forwarding-rules create fr-ilb-http \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=10.1.2.99 \
        --ip-protocol=TCP \
        --ports=80,8008,8080,8088 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    
    gcloud compute forwarding-rules create fr-ilb-https \
        --region=us-west1 \
        --load-balancing-scheme=internal \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=10.1.2.99 \
        --ip-protocol=TCP \
        --ports=443,8443 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1
    

API

forwardingRules.delete メソッドDELETE リクエストを送信して転送ルールを削除します。

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb

10.1.2.99 の静的(予約済み)内部 IP アドレスを作成し、addresses.insert メソッドPOST リクエストを送信してそのアドレスの目的を SHARED_LOADBALANCER_VIP に設定します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/addresses

{
"name": "internal-10-1-2-99",
"address": "10.1.2.99",
"prefixLength": 32,
"addressType": INTERNAL,
"purpose": SHARED_LOADBALANCER_VIP,
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet"
}

forwardingRules.insert メソッドに 2 つの POST リクエストを送信して、2 つの転送ルールを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb-http",
"IPAddress": "10.1.2.99",
"IPProtocol": "TCP",
"ports": [
  "80", "8008", "8080",  "8088"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
"networkTier": "PREMIUM"
}
{
"name": "fr-ilb-https",
"IPAddress": "10.1.2.99",
"IPProtocol": "TCP",
"ports": [
  "443", "8443"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
"networkTier": "PREMIUM"
}

複数のポート設定でトラフィックをテストする

クライアント VM インスタンスに接続し、HTTP 接続と HTTPS 接続をテストします。

  • クライアント VM に接続します。

    gcloud compute ssh vm-client --zone=us-west1-a
    
  • 4 つのポートすべてで HTTP 接続をテストします。

    curl http://10.1.2.99
    curl http://10.1.2.99:8008
    curl http://10.1.2.99:8080
    curl http://10.1.2.99:8088
    
  • ポート 4438443 で HTTPS 接続をテストします。セットアップ例の各 Apache サーバーは自己署名証明書を使用するため、--insecure フラグが必要です。

    curl https://10.1.2.99 --insecure
    curl https://10.1.2.99:8443 --insecure
    
  • HTTP リクエスト(4 つのポートすべて)と HTTPS リクエスト(両方のポート)がすべてのバックエンド VM に分散されることを確認します。

セッション アフィニティを使用する

構成例では、バックエンド サービスをセッション アフィニティなしで作成しています。

この手順では、クライアントの IP アドレスとロードバランサの内部転送ルールの IP アドレスから作成されたハッシュに基づくセッション アフィニティを使用するように、サンプルの内部パススルー ネットワーク ロードバランサのバックエンド サービスを更新する方法を示します。

サポートされているセッション アフィニティのタイプについては、セッション アフィニティのオプションをご覧ください。

コンソール

  1. Google Cloud コンソールの [ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [be-ilb](この例で作成したバックエンド サービスの名前)をクリックして、[編集] をクリックします。

  3. [Edit internal passthrough Network Load Balancer] ページで、[バックエンドの構成] をクリックします。

  4. [セッション アフィニティ] リストから [クライアント IP] を選択します。

  5. [更新] をクリックします。

gcloud

クライアント IP セッション アフィニティを指定して、be-ilb バックエンド サービスを更新するには、次の gcloud コマンドを使用します。

gcloud compute backend-services update be-ilb \
    --region=us-west1 \
    --session-affinity CLIENT_IP

API

regionBackendServices/patch メソッドPATCH リクエストを送信します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb

{
"sessionAffinity": "CLIENT_IP"
}

接続トラッキング ポリシーを構成する

このセクションでは、バックエンド サービスを更新してロードバランサのデフォルトの接続トラッキング ポリシーを変更する方法について説明します。

接続トラッキング ポリシーには次の設定が含まれます。

gcloud

次の gcloud compute backend-services コマンドを使用して、バックエンド サービスの接続トラッキング ポリシーを更新します。

gcloud compute backend-services update BACKEND_SERVICE \
    --region=REGION \
    --tracking-mode=TRACKING_MODE \
    --connection-persistence-on-unhealthy-backends=CONNECTION_PERSISTENCE_BEHAVIOR \
    --idle-timeout-sec=IDLE_TIMEOUT_VALUE

プレースホルダを有効な値に置き換えます。

  • BACKEND_SERVICE: 更新するバックエンド サービス
  • REGION: 更新するバックエンド サービスのリージョン
  • TRACKING_MODE: 受信パケットに使用される接続トラッキング モード。サポートされている値の一覧については、トラッキング モードをご覧ください。
  • CONNECTION_PERSISTENCE_BEHAVIOR: バックエンドが異常な場合の接続の永続性の動作。サポートされている値の一覧については、異常なバックエンドでの接続の永続性をご覧ください。
  • IDLE_TIMEOUT_VALUE: ロードバランサがエントリに一致する最後のパケットを処理した後で、接続トラッキング テーブルのエントリが維持される秒数

    このプロパティを変更できるのは、接続トラッキングが 5 タプル未満の場合(セッション アフィニティが CLIENT_IPCLIENT_IP_PROTO のいずれかで、トラッキング モードが PER_SESSION の場合)です。

    デフォルト値は 600 秒(10 分)です。構成可能なアイドル タイムアウトの最大値は 57,600 秒(16 時間)です。

別のサブネットで転送ルールを作成する

この手順では、1 つの内部パススルー ネットワーク ロードバランサに対して複数の転送ルールを作成できることを示すために、2 つ目の IP アドレスと転送ルールを別のサブネットに作成します。転送ルールのリージョンは、バックエンド サービスのリージョンと一致する必要があります。

ファイアウォール ルールに従うと、リージョン内のサブネット内のクライアントは、内部パススルー ネットワーク ロードバランサの IP アドレスに接続できます。

コンソール

2 番目のサブネットを追加する

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

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

  2. [VPC ネットワークを作成] をクリックします。

  3. [lb-network] をクリックします。

  4. [サブネット] セクションで、次の操作を行います。

    1. [サブネットを追加] をクリックします。
    2. [新しいサブネット] セクションに、次の情報を入力します。
      • 名前: second-subnet
      • リージョン: us-west1
      • IP アドレス範囲: 10.5.6.0/24
    3. [追加] をクリックします。

2 番目の転送ルールを追加する

  1. Google Cloud コンソールで、[ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. be-ilb ロードバランサをクリックして、[編集] をクリックします。

  3. [フロントエンドの構成] をクリックします。

  4. [フロントエンド IP とポートの追加] をクリックします。

  5. [新しいフロントエンドの IP とポート] セクションで、次のフィールドを設定して [完了] をクリックします。

    • 名前: fr-ilb-2
    • IP バージョン: IPv4
    • サブネットワーク: second-subnet
    • 内部 IP: ip-ilb
    • ポート: 80443
  6. 続行する前に、[フロントエンドの構成] の隣に青いチェックマークがあることを確認します。

  7. [確認と完了] をクリックして、ロードバランサの構成設定を確認します。

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

gcloud

  1. us-west1 リージョン内の lb-network ネットワークに 2 つ目のサブネットを作成します。

    gcloud compute networks subnets create second-subnet \
       --network=lb-network \
       --range=10.5.6.0/24 \
       --region=us-west1
    
  2. ポート 80 と 443 に 2 つ目の転送ルールを作成します。IP アドレスやバックエンド サービスなど、このルールのその他のパラメータは、プライマリ転送ルール fr-ilb と同じです。

    gcloud compute forwarding-rules create fr-ilb-2 \
       --region=us-west1 \
       --load-balancing-scheme=internal \
       --network=lb-network \
       --subnet=second-subnet \
       --address=10.5.6.99 \
       --ip-protocol=TCP \
       --ports=80,443 \
       --backend-service=be-ilb \
       --backend-service-region=us-west1
    

API

subnetworks.insert メソッドPOST リクエストを送信します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks

{
 "name": "second-subnet",
 "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
 "ipCidrRange": "10.5.6.0/24",
 "privateIpGoogleAccess": false
}

forwardingRules.insert メソッドPOST リクエストを送信して転送ルールを作成します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules

{
"name": "fr-ilb-2",
"IPAddress": "10.5.6.99",
"IPProtocol": "TCP",
"ports": [
  "80", "443"
],
"loadBalancingScheme": "INTERNAL",
"subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet",
"network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network",
"backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb",
"networkTier": "PREMIUM"
}

新しい転送ルールをテストする

クライアント VM インスタンスに接続し、IP アドレスへの HTTP 接続と HTTPS 接続をテストします。

  1. クライアント VM に接続します。

    gcloud compute ssh vm-client --zone=us-west1-a
    
  2. IP アドレスへの HTTP 接続をテストします。

    curl http://10.1.2.99
    curl http://10.5.6.99
    
  3. HTTPS 接続をテストします。サンプル設定の Apache サーバー構成では自己署名証明書を使用するため、--insecure を使用する必要があります。

    curl https://10.1.2.99 --insecure
    curl https://10.5.6.99 --insecure
    
  4. リクエストは、使用されているプロトコル(HTTP または HTTPS)や IP アドレスに関係なく、すべてのバックエンド VM で処理されることを確認してください。

バックエンドのサブセット化を使用する

構成例では、バックエンド サービスがサブセット化されていません。

この手順では、内部パススルー ネットワーク ロードバランサのバックエンド サービスでサブセット化を有効にして、より多くのバックエンド インスタンスにスケーリングできるようにする方法を示します。

1 つのロードバランサで 250 台を超えるバックエンド VM をサポートする必要がある場合にのみ、サブセット化を有効にしてください。

このユースケースの詳細については、バックエンドのサブセット化をご覧ください。

gcloud

次の gcloud コマンドを使用して、be-ilb バックエンド サービスを更新し、サブセット ポリシーを指定します。

gcloud compute backend-services update be-ilb \
    --subsetting-policy=CONSISTENT_HASH_SUBSETTING

API

regionBackendServices/patch メソッドPATCH リクエストを送信します。

PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb

{
"subsetting":
  {
    "policy": CONSISTENT_HASH_SUBSETTING
  }
}

Packet Mirroring 用のロードバランサを作成する

Packet Mirroring によって、VPC 内の特定のインスタンスからパケットデータをコピーして収集できます。収集されたデータを使用して、セキュリティの脅威の検出とアプリケーション パフォーマンスのモニタリングに役立てることができます。

Packet Mirroring には、コレクタ宛先のインスタンス グループにトラフィックを分散するために内部パススルー ネットワーク ロードバランサが必要です。Packet Mirroring 用に内部パススルー ネットワーク ロードバランサを作成する手順は次のとおりです。

コンソール

  1. Google Cloud コンソールの [ロード バランシング] ページに移動します。

    [ロード バランシング] に移動

  2. [ロードバランサを作成] をクリックします。

  3. [ネットワーク ロードバランサ(TCP / SSL)] カードで [構成を開始] をクリックします。
  4. [インターネット接続または内部専用] セクションで、[VM 間のみ] を選択して [続行] をクリックします。

  5. [ロードバランサの名前] に名前を入力します。

  6. [リージョン] で、パケットをミラーリングする VM インスタンスのリージョンを選択します。

  7. [ネットワーク] で、パケットをミラーリングするネットワークを選択します。

  8. [バックエンドの構成] をクリックします。

  9. [新しいバックエンド] セクションの [インスタンス グループ] で、パケットの転送先となるインスタンス グループを選択します。

  10. [ヘルスチェック] リストから [ヘルスチェックを作成] を選択し、次の情報を入力して [保存] をクリックします。

    1. [名前] に、ヘルスチェックの名前を入力します。
    2. [プロトコル] で [HTTP] を選択します。
    3. [ポート] に「80」と入力します。
  11. [フロントエンドの構成] をクリックします。

  12. [新しいフロントエンドの IP とポート] セクションで、次の操作を行います。

    1. [名前] に名前を入力します。
    2. [サブネットワーク] で、ミラーリングするインスタンスと同じリージョン内のサブネットワークを選択します。
    3. [ポート] で [すべて] を選択します。
    4. [高度な構成] をクリックし、[このロードバランサを Packet Mirroring 用に有効にする] チェックボックスをオンにします。
    5. [完了] をクリックします。
  13. [作成] をクリックします。

gcloud

  1. 新しいリージョン HTTP ヘルスチェックを作成して、ポート 80 でインスタンス グループへの HTTP 接続をテストします。

    gcloud compute health-checks create http HEALTH_CHECK_NAME \
        --region=REGION \
        --port=80
    

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

    • HEALTH_CHECK_NAME: ヘルスチェックの名前。
    • REGION: パケットをミラーリングする VM インスタンスのリージョン。
  2. HTTP トラフィックのバックエンド サービスを作成します。

    gcloud compute backend-services create COLLECTOR_BACKEND_SERVICE \
        --region=REGION \
        --health-checks-region=REGION \
        --health-checks=HEALTH_CHECK_NAME \
        --load-balancing-scheme=internal \
        --protocol=tcp
    

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

    • COLLECTOR_BACKEND_SERVICE: バックエンド サービスの名前。
    • REGION: パケットをミラーリングする VM インスタンスのリージョン。
    • HEALTH_CHECK_NAME: ヘルスチェックの名前。
  3. バックエンド サービスにインスタンス グループを追加します。

    gcloud compute backend-services add-backend COLLECTOR_BACKEND_SERVICE \
        --region=REGION \
        --instance-group=INSTANCE_GROUP \
        --instance-group-zone=ZONE
    

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

    • COLLECTOR_BACKEND_SERVICE: バックエンド サービスの名前。
    • REGION: インスタンス グループのリージョン。
    • INSTANCE_GROUP: インスタンス グループの名前。
    • ZONE: インスタンス グループのゾーン。
  4. バックエンド サービスの転送ルールを作成します。

    gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
        --region=REGION \
        --network=NETWORK \
        --subnet=SUBNET \
        --backend-service=COLLECTOR_BACKEND_SERVICE \
        --load-balancing-scheme=internal \
        --ip-protocol=TCP \
        --ports=all \
        --is-mirroring-collector
    

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

    • FORWARDING_RULE_NAME: 転送ルールの名前。
    • REGION: 転送ルールのリージョン。
    • NETWORK: 転送ルールのネットワーク。
    • SUBNET: パケットをミラーリングする VM のリージョンのサブネットワーク。
    • COLLECTOR_BACKEND_SERVICE: このロードバランサのバックエンド サービス。

次のステップ