複数の IP プロトコルに外部パススルー ネットワーク ロードバランサを設定する

このガイドでは、TCP、UDP、ESP、GRE、ICMP、ICMPv6 のトラフィックの負荷を分散する、バックエンド サービスベースの外部パススルー ネットワーク ロードバランサを作成する手順について説明します。TCP と UDP 以外の IP プロトコルを使用するトラフィックのロード バランシングに、このような構成を使用できます。ターゲット プールベースの外部パススルー ネットワーク ロードバランサは、この機能をサポートしていません。

TCP と UDP 以外の IP プロトコルに外部パススルー ネットワーク ロードバランサを構成するには、プロトコルを L3_DEFAULT に設定した転送ルールを作成します。この転送ルールは、プロトコルが UNSPECIFIED に設定されたバックエンド サービスを参照します。

次の例では、2 つの外部パススルー ネットワーク ロードバランサを使用して、us-central1 リージョンの 2 つのゾーン マネージド インスタンス グループ内のバックエンド VM にトラフィックを分散します。両方のロードバランサが同じ外部 IP アドレスでトラフィックを受信します。

1 つのロードバランサには、プロトコル TCP とポート 80 を設定した転送ルールを作成し、もう 1 つのロードバランサにはプロトコル L3_DEFAULT を設定した転送ルールを作成しています。ポート 80 の IP アドレスに到達する TCP トラフィックは、TCP 転送ルールによって処理されます。TCP 専用の転送ルールと一致しないトラフィックはすべて、L3_DEFAULT 転送ルールによって処理されます。

ゾーン マネージド インスタンス グループを使用した外部パススルー ネットワーク ロードバランサ
ゾーン マネージド インスタンス グループを使用した外部パススルー ネットワーク ロードバランサ(クリックして拡大)

このシナリオでは、正常なインスタンスにトラフィックを分散します。そのために、TCP ヘルスチェックを作成して、正常なインスタンスにのみトラフィックが送信されるようにします。

外部パススルー ネットワーク ロードバランサはリージョン ロードバランサです。ロードバランサのすべてのコンポーネントは同じリージョンに配置する必要があります。

始める前に

Google Cloud CLI をインストールします。ツールの完全な概要については、gcloud CLI の概要をご覧ください。ロード バランシングに関連するコマンドについては、API と gcloud のリファレンスをご覧ください。

gcloud CLI を初めて実行する場合は、最初に gcloud init コマンドを実行して、認証を行います。

このガイドは、bash の知識があることを前提としています。

ネットワークとサブネットを設定する

このページの例では、lb-network という名前のカスタムモードの VPC ネットワークを使用します。IPv4 トラフィックのみを処理する場合は、自動モードの VPC ネットワークを使用できます。ただし、IPv6 トラフィックにはカスタムモードのサブネットが必要です。

IPv6 トラフィックには、デュアルスタック サブネット(stack-typeIPv4_IPv6 に設定)も必要です。カスタムモードの VPC ネットワークにデュアルスタック サブネットを作成する場合は、サブネットに IPv6 アクセスタイプを選択します。この例では、サブネットの ipv6-access-type パラメータを EXTERNAL に設定します。このサブネット上の新しい VM には、外部 IPv4 アドレスと外部 IPv6 アドレスの両方を割り当てることができます。転送ルールには、外部 IPv4 アドレスと外部 IPv6 アドレスの両方を割り当てることもできます。

この例で使用されているバックエンドとロードバランサのコンポーネントは、次のリージョンとサブネットに存在します。

  • リージョン: us-central1
  • サブネット: lb-subnet(プライマリ IPv4 アドレス範囲は 10.1.2.0/24)。サブネットに構成する IPv4 アドレス範囲を選択します。IPv6 アドレス範囲は自動的に割り当てられます。Google では、固定サイズ(/64)の IPv6 CIDR ブロックを提供しています。

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

コンソール

IPv4 トラフィックと IPv6 トラフィックの両方をサポートするには、次の操作を行います。

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

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

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

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

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

    • [サブネット作成モード] を [カスタム] に設定します。
    • [新しいサブネット] セクションで、次のフィールドを構成して [完了] をクリックします。
      • 名前: lb-subnet
      • リージョン: us-central1
      • IP スタックタイプ: IPv4 および IPv6(デュアルスタック)
      • IPv4 範囲: 10.1.2.0/24
        サブネットの IPv4 アドレス範囲は構成できますが、サブネットの IPv6 アドレスの範囲は選択できません。Google では、固定サイズ(/64)の IPv6 CIDR ブロックを提供しています。
      • IPv6 アクセスタイプ: 外部
  5. [作成] をクリックします。

IPv4 トラフィックのみをサポートするには、次の操作を行います。

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

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

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

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

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

    • [サブネット作成モード] を [カスタム] に設定します。
    • [新しいサブネット] セクションで、次のフィールドを構成して [完了] をクリックします。
      • 名前: lb-subnet
      • リージョン: us-central1
      • IP スタックタイプ: IPv4(シングルスタック)
      • IPv4 範囲: 10.1.2.0/24
  5. [作成] をクリックします。

gcloud

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

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

    IPv4 トラフィックと IPv6 トラフィックの両方の場合は、次のコマンドを使用してデュアルスタック サブネットを作成します。

    gcloud compute networks subnets create lb-subnet \
        --stack-type=IPV4_IPv6 \
        --ipv6-access-type=EXTERNAL \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-central1
    

    IPv4 トラフィックのみの場合は、次のコマンドを使用します。

    gcloud compute networks subnets create lb-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-central1
    

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

このロード バランシングのシナリオでは、2 つの Compute Engine ゾーン マネージド インスタンス グループを作成し、各インスタンスに Apache ウェブサーバーをインストールします。

IPv4 トラフィックと IPv6 トラフィックの両方を処理するには、バックエンド VM をデュアルスタックとして構成します。VM の stack-typeIPv4_IPv6 に設定します。VM は、サブネットから ipv6-access-type 設定(この例では EXTERNAL)も継承します。IPv6 の要件の詳細については、外部パススルー ネットワーク ロードバランサの概要: 転送ルールをご覧ください。

既存の VM をバックエンドとして使用するには、gcloud compute instances network-interfaces update コマンドを使用して VM をデュアルスタックに更新します。

外部パススルー ネットワーク ロードバランサのバックエンド VM として参加するインスタンスでは、適切な Linux ゲスト環境Windows ゲスト環境、または同等の機能を提供する他のプロセスが実行されている必要があります。

ポート 80 の TCP トラフィック用にインスタンス グループを作成する

コンソール

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

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

    1. [インスタンス テンプレートを作成] をクリックします。
    2. [名前] に「ig-us-template-tcp-80」と入力します。
    3. [ブートディスク] が Debian GNU/Linux 12 (bookworm) などの Debian イメージに設定されていることを確認します。以降の手順では、apt-get などの Debian でのみ使用できるコマンドを使用します。
    4. [詳細オプション] セクションを開きます。
    5. [管理] セクションを開き、次のスクリプトを [起動スクリプト] フィールドにコピーします。

      #! /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
      
    6. [ネットワーキング] セクションを開き、次のように指定します。

      1. [ネットワーク タグ] に network-lb-tcp-80 を追加します。
      2. [ネットワーク インターフェース] で [default] をクリックし、次のフィールドを構成します。
        1. ネットワーク: lb-network
        2. サブネットワーク: lb-subnet
    7. [作成] をクリックします。

  2. マネージド インスタンス グループを作成します。 Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

    1. [インスタンス グループを作成] をクリックします。
    2. [新しいマネージド インスタンス グループ(ステートレス)] を選択します。詳細については、ステートレス MIG とステートフル MIG をご覧ください。
    3. [名前] に「ig-us-tcp-80」と入力します。
    4. [ロケーション] で [シングルゾーン] を選択します。
    5. [リージョン] で us-central1 を選択します。
    6. [ゾーン] で us-central1-a を選択します。
    7. [インスタンス テンプレート] で ig-us-template-tcp-80 を選択します。
    8. グループ内に作成するインスタンスの数を指定します。

      この例では、[自動スケーリング] で次のオプションを指定します。

      • [自動スケーリング モード] で [Off:do not autoscale] を選択します。
      • [インスタンスの最大数] に「2」と入力します。
    9. [作成] をクリックします。

gcloud

このガイドの gcloud の手順は、Cloud Shell または bash がインストールされた別の環境を使用していることを前提としています。

  1. gcloud compute instance-templates create コマンドを使用して、HTTP サーバーで VM インスタンス テンプレートを作成します。

    IPv4 トラフィックと IPv6 トラフィックの両方を処理する場合は、次のコマンドを使用します。

      gcloud compute instance-templates create ig-us-template-tcp-80 \
          --region=us-central1 \
          --network=lb-network \
          --subnet=lb-subnet \
          --ipv6-network-tier=PREMIUM \
          --stack-type=IPv4_IPv6 \
          --tags=network-lb-tcp-80 \
          --image-family=debian-12 \
          --image-project=debian-cloud \
          --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'
    

    IPv4 トラフィックのみのトラフィックを処理する場合は、次のコマンドを使用します。

      gcloud compute instance-templates create ig-us-template-tcp-80 \
          --region=us-central1 \
          --network=lb-network \
          --subnet=lb-subnet \
          --tags=network-lb-tcp-80 \
          --image-family=debian-12 \
          --image-project=debian-cloud \
          --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" \
                  ://metadata.google.internal/computeMetadata/v1/instance/name)"
          echo "Page served from: $vm_hostname" | \
          tee /var/www/html/index.html
          systemctl restart apache2'
    
  2. gcloud compute instance-groups managed create コマンドを使用して、ゾーンにマネージド インスタンス グループを作成します。

      gcloud compute instance-groups managed create ig-us-tcp-80 \
          --zone us-central1-a \
          --size 2 \
          --template ig-us-template-tcp-80
    

ポート 8080 の TCP、UDP、ESP、ICMP トラフィック用にインスタンス グループを作成する

コンソール

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

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

    1. [インスタンス テンプレートを作成] をクリックします。
    2. [名前] に「ig-us-template-l3-default」と入力します。
    3. [ブートディスク] が Debian GNU/Linux 12 (bookworm) などの Debian イメージに設定されていることを確認します。以降の手順では、apt-get などの Debian でのみ使用できるコマンドを使用します。
    4. [詳細オプション] セクションを開きます。
    5. [管理] セクションを開き、次のスクリプトを [起動スクリプト] フィールドにコピーします。この起動スクリプトは、Apache サーバーがポート 80 ではなく、ポート 8080 をリッスンするようにします。

      #! /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
      sed -ire 's/^Listen 80$/Listen 8080/g' /etc/apache2/ports.conf
      systemctl restart apache2
      
    6. [ネットワーキング] セクションを開き、次のように指定します。

      1. [ネットワーク タグ] に network-lb-l3-default を追加します。
      2. [ネットワーク インターフェース] で [default] をクリックし、次のフィールドを構成します。
        1. ネットワーク: lb-network
        2. サブネットワーク: lb-subnet
    7. [作成] をクリックします。

  2. マネージド インスタンス グループを作成します。 Google Cloud コンソールの [インスタンス グループ] ページに移動します。

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

    1. [インスタンス グループを作成] をクリックします。
    2. [新しいマネージド インスタンス グループ(ステートレス)] を選択します。詳細については、ステートレス MIG とステートフル MIG をご覧ください。
    3. [名前] に「ig-us-l3-default」と入力します。
    4. [ロケーション] で [シングルゾーン] を選択します。
    5. [リージョン] で us-central1 を選択します。
    6. [ゾーン] で us-central1-c を選択します。
    7. [インスタンス テンプレート] で ig-us-template-l3-default を選択します。
    8. グループ内に作成するインスタンスの数を指定します。

      この例では、[自動スケーリング] で次のオプションを指定します。

      • [自動スケーリング モード] で [Off:do not autoscale] を選択します。
      • [インスタンスの最大数] に「2」と入力します。
    9. [作成] をクリックします。

gcloud

このガイドの gcloud の手順は、Cloud Shell または bash がインストールされた別の環境を使用していることを前提としています。

  1. gcloud compute instance-templates create コマンドを使用して、HTTP サーバーで VM インスタンス テンプレートを作成します。

    この起動スクリプトは、Apache サーバーがポート 80 ではなく、ポート 8080 をリッスンするようにします。

    IPv4 トラフィックと IPv6 トラフィックの両方を処理する場合は、次のコマンドを使用します。

      gcloud compute instance-templates create ig-us-template-l3-default \
          --region=us-central1 \
          --network=lb-network \
          --subnet=lb-subnet \
          --ipv6-network-tier=PREMIUM \
          --stack-type=IPv4_IPv6 \
          --tags=network-lb-l3-default \
          --image-family=debian-12 \
          --image-project=debian-cloud \
          --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
          sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
          systemctl restart apache2'
    

    IPv4 トラフィックのみを処理する場合は、次のコマンドを使用します。

      gcloud compute instance-templates create ig-us-template-l3-default \
          --region=us-central1 \
          --network=lb-network \
          --subnet=lb-subnet \
          --tags=network-lb-l3-default \
          --image-family=debian-12 \
          --image-project=debian-cloud \
          --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
          sed -ire "s/^Listen 80$/Listen 8080/g" /etc/apache2/ports.conf
          systemctl restart apache2'
    
  2. gcloud compute instance-groups managed create コマンドを使用して、ゾーンにマネージド インスタンス グループを作成します。

      gcloud compute instance-groups managed create ig-us-l3-default \
          --zone us-central1-c \
          --size 2 \
          --template ig-us-template-l3-default
    

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

次のファイアウォール ルールを作成します。

  • 外部 TCP トラフィックがポート 80 の ig-us-tcp-80 インスタンス グループのバックエンド インスタンス(ターゲットタグ network-lb-tcp-80 を使用)に到達できるようにするファイアウォール ルール。IPv4 トラフィックと IPv6 のトラフィックを許可する別々のファイアウォール ルールを作成します。
  • 他の外部トラフィック(ポート 8080 の TCP、UDP、ESP、ICMP)が、ig-us-l3-default インスタンス グループのバックエンド インスタンスに到達できるようにするファイアウォール ルール(ターゲットタグ network-lb-l3-default を使用)。IPv4 トラフィックと IPv6 トラフィックを許可する個別のファイアウォール ルールを作成します。

この例では、すべてのソース範囲からのトラフィックが構成済みポートのバックエンド インスタンスに到達できるようにファイアウォール ルールを作成します。ヘルスチェック プローブ専用のファイアウォール ルールを作成する場合は、ヘルスチェックの概要: プローブ IP 範囲とファイアウォール ルールに記載されている送信元 IP アドレス範囲を使用します。

コンソール

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

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

  2. IPv4 TCP トラフィックig-us-tcp-80 インスタンス グループのバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。

    1. [ファイアウォール ルールを作成] をクリックします。
    2. [名前] に「allow-network-lb-tcp-80-ipv4」を入力します。
    3. ファイアウォール ルールを適用するネットワークを選択します(デフォルト)。
    4. [ターゲット] で [指定されたターゲットタグ] を選択します。
    5. [ターゲットタグ] フィールドに「network-lb-tcp-80」と入力します。
    6. [ソースフィルタ] を [IPv4 範囲] に設定します。
    7. [送信元 IPv4 範囲] を 0.0.0.0/0 に設定すると、任意の送信元からのトラフィックが許可されます。これにより、外部トラフィックとヘルスチェック プローブの両方がバックエンド インスタンスに到達できるようになります。
    8. [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。[TCP] チェックボックスをオンにして、「80」を入力します。
    9. [作成] をクリックします。新しいファイアウォール ルールがコンソールに表示されるまで少し時間がかかる場合があります。ルールが表示されない場合は、[更新] をクリックしてください。
  3. IPv4 UDP、ESP、ICMP トラフィックig-us-l3-default インスタンス グループのバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。

    1. [ファイアウォール ルールを作成] をクリックします。
    2. [名前] に「allow-network-lb-l3-default-ipv4」を入力します。
    3. ファイアウォール ルールを適用するネットワークを選択します(デフォルト)。
    4. [ターゲット] で [指定されたターゲットタグ] を選択します。
    5. [ターゲットタグ] フィールドに「network-lb-l3-default」と入力します。
    6. [ソースフィルタ] を [IPv4 範囲] に設定します。
    7. [送信元 IPv4 範囲] を 0.0.0.0/0 に設定します。これにより、任意の送信元からのトラフィックが許可されます。これにより、外部トラフィックとヘルスチェック プローブの両方がバックエンド インスタンスに到達できるようになります。
    8. [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。
      1. [TCP] チェックボックスをオンにして、「8080」を入力します。
      2. [UDP] チェックボックスをオンにします。
      3. [その他] チェックボックスをオンにして、「esp, icmp」と入力します。
    9. [作成] をクリックします。新しいファイアウォール ルールがコンソールに表示されるまで少し時間がかかる場合があります。ルールが表示されない場合は、[更新] をクリックしてください。
  4. IPv6 TCP トラフィックig-us-tcp-80 インスタンス グループのバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。

    1. [ファイアウォール ルールを作成] をクリックします。
    2. [名前] に「allow-network-lb-tcp-80-ipv6」を入力します。
    3. ファイアウォール ルールを適用するネットワークを選択します(デフォルト)。
    4. [ターゲット] で [指定されたターゲットタグ] を選択します。
    5. [ターゲットタグ] フィールドに「network-lb-tcp-80」と入力します。
    6. [ソースフィルタ] を [IPv6 範囲] に設定します。
    7. [送信元 IPv6 範囲] を ::/0 に設定します。これにより、任意の送信元からのトラフィックが許可されます。これにより、外部トラフィックとヘルスチェック プローブの両方がバックエンド インスタンスに到達できるようになります。
    8. [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。[TCP] の横にあるチェックボックスをオンにして、「80」と入力します。
    9. [作成] をクリックします。新しいファイアウォール ルールがコンソールに表示されるまで少し時間がかかる場合があります。ルールが表示されない場合は、[更新] をクリックしてください。
  5. IPv6 UDP、ESP、ICMPv6 トラフィックig-us-l3-default インスタンス グループのバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。このファイアウォール ルールにより、TCP ヘルスチェック プローブがポート 8080 のインスタンスに到達できるようにもなります。

    1. [ファイアウォール ルールを作成] をクリックします。
    2. [名前] に「allow-network-lb-l3-default-ipv6」を入力します。
    3. ファイアウォール ルールを適用するネットワークを選択します(デフォルト)。
    4. [ターゲット] で [指定されたターゲットタグ] を選択します。
    5. [ターゲットタグ] フィールドに「network-lb-l3-default」と入力します。
    6. [ソースフィルタ] を [IPv6 範囲] に設定します。
    7. [送信元 IPv6 範囲] を ::/0 に設定します。これにより、任意の送信元からのトラフィックが許可されます。これにより、外部トラフィックとヘルスチェック プローブの両方がバックエンド インスタンスに到達できるようになります。
    8. [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。
      1. [TCP] の横にあるチェックボックスをオンにして、「8080」と入力します。
      2. [UDP] の横にあるチェックボックスをオンにします。
      3. [その他] の横にあるチェックボックスをオンにして、「esp, 58」と入力します。
    9. [作成] をクリックします。新しいファイアウォール ルールがコンソールに表示されるまで少し時間がかかる場合があります。ルールが表示されない場合は、[更新] をクリックしてください。

gcloud

  1. IPv4 TCP トラフィックig-us-tcp-80 インスタンス グループのバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv4 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=0.0.0.0/0
    
  2. IPv4 UDP、ESP、ICMP トラフィックig-us-l3-default インスタンス グループのバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。このファイアウォール ルールにより、TCP ヘルスチェック プローブがポート 8080 のインスタンスに到達できるようにもなります。

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv4 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,icmp \
        --source-ranges=0.0.0.0/0
    
  3. IPv6 TCP トラフィックig-us-tcp-80 インスタンス グループのバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。

    gcloud compute firewall-rules create allow-network-lb-tcp-80-ipv6 \
        --network=lb-network \
        --target-tags network-lb-tcp-80 \
        --allow tcp:80 \
        --source-ranges=::/0
    
  4. IPv6 UDP、ESP、ICMPv6 トラフィックig-us-l3-default インスタンス グループのバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。このファイアウォール ルールにより、TCP ヘルスチェック プローブがポート 8080 のインスタンスに到達できるようにもなります。

    gcloud compute firewall-rules create allow-network-lb-l3-default-ipv6 \
        --network=lb-network \
        --target-tags network-lb-l3-default \
        --allow tcp:8080,udp,esp,58 \
        --source-ranges=::/0
    

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

次に、2 つのロードバランサを設定します。転送ルールに同じ外部 IP アドレスを使用するように両方のロードバランサを構成します。1 つのロードバランサはポート 80 で TCP トラフィックを処理し、もう 1 つのロードバランサはポート 8080 で TCP、UDP、ESP、ICMP トラフィックを処理します。

ロードバランサを構成すると、構成した静的外部 IP アドレス宛てのパケットがバックエンド VM インスタンスに送信されます。Compute Engine で提供されるイメージを使用する場合は、この IP アドレスを処理するようにインスタンスが自動的に構成されます。その他のイメージを使用する場合は、このアドレスを eth0 のエイリアスまたは各インスタンスのループバックとして構成する必要があります。

2 つのロードバランサを設定するには、次の操作を行います。

コンソール

構成を開始する

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

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

  2. [ロードバランサを作成] をクリックします。
  3. [ロードバランサの種類] で [ネットワーク ロードバランサ(TCP / UDP / SSL)] を選択し、[次へ] をクリックします。
  4. [プロキシまたはパススルー] で [パススルー ロードバランサ] を選択し、[次へ] をクリックします。
  5. [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
  6. [構成] をクリックします。

基本的な構成

  1. [名前] フィールドに、新しいロードバランサの名前 backend-service-tcp-80 を入力します。
  2. [リージョン] リストで [us-central1] を選択します。

バックエンドの構成

  1. [バックエンドの構成] をクリックします。
  2. [バックエンドの構成] ページで次の変更を行います。
    1. [新しいバックエンド] セクションで、[IP スタックタイプ] を選択します。IPv4 トラフィックと IPv6 トラフィックの両方を処理するデュアル スタック バックエンドを作成した場合は、[IPv4 と IPv6(デュアルスタック)] を選択します。IPv4 トラフィックのみを処理するには、[IPv4(シングルスタック)] を選択します。
    2. [インスタンス グループ] リストで ig-us-tcp-80 を選択し、[完了] をクリックします。
    3. [ヘルスチェック] リストで [ヘルスチェックを作成] をクリックし、次の情報を入力します。
      • 名前: tcp-health-check-80
      • プロトコル: TCP
      • ポート: 80
    4. [保存] をクリックします。
  3. 続行する前に、[バックエンドの構成] の隣に青いチェックマークがあることを確認します。

フロントエンドの構成

  1. [フロントエンドの構成] をクリックします。
  2. [名前] フィールドに「forwarding-rule-tcp-80」と入力します。
  3. IPv4 トラフィックを処理する手順は次のとおりです。
    1. [IP バージョン] で [IPv4] を選択します。
    2. [内部 IP の目的] セクションの [IP アドレス] リストで、[IP アドレスを作成] を選択します。
      1. [名前] フィールドに「network-lb-ipv4」と入力します。
      2. [予約] をクリックします。
    3. [ポート] で [単一] を選択します。[ポート番号] フィールドに「80」と入力します。
    4. [完了] をクリックします。
  4. IPv6 トラフィックを処理する手順は次のとおりです。

    1. [IP バージョン] で [IPv6] を選択します。
    2. [サブネットワーク] で [lb-subnet] を選択します。
    3. [IPv6 範囲] リストで、[IP アドレスを作成] を選択します。
      1. [名前] フィールドに「network-lb-ipv6」と入力します。
      2. [予約] をクリックします。
    4. [ポート] で [単一] を選択します。[ポート番号] フィールドに「80」と入力します。
    5. [完了] をクリックします。

    [フロントエンドの構成] の左側にある青い丸のチェックマークが表示されていれば、設定に成功しています。

構成を確認する

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

    [ロード バランシング] ページで、新しいロードバランサの [バックエンド] 列に緑色のチェックマークが表示されていれば、新しく作成したロードバランサは正常な状態です。

2 つ目のロードバランサを作成する

構成を開始する

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

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

  2. [ロードバランサを作成] をクリックします。
  3. [ロードバランサの種類] で [ネットワーク ロードバランサ(TCP / UDP / SSL)] を選択し、[次へ] をクリックします。
  4. [プロキシまたはパススルー] で [パススルー ロードバランサ] を選択し、[次へ] をクリックします。
  5. [インターネット接続または内部] で [インターネット接続(外部)] を選択し、[次へ] をクリックします。
  6. [構成] をクリックします。

基本的な構成

  1. [名前] フィールドに、新しいロードバランサの名前 backend-service-l3-default を入力します。
  2. [リージョン] リストで [us-central1] を選択します。

バックエンドの構成

  1. [バックエンドの構成] をクリックします。
  2. [バックエンドの構成] ページで次の変更を行います。
    1. [新しいバックエンド] セクションで、[IP スタックタイプ] を選択します。IPv4 トラフィックと IPv6 トラフィックの両方を処理するデュアル スタック バックエンドを作成した場合は、[IPv4 と IPv6(デュアルスタック)] を選択します。IPv4 トラフィックのみを処理するには、[IPv4(シングルスタック)] を選択します。
    2. [インスタンス グループ] リストで ig-us-l3-default を選択し、[完了] をクリックします。
    3. [プロトコル] リストで [L3(複数のプロトコル)] を選択します。
    4. [ヘルスチェック] リストで [ヘルスチェックを作成] をクリックし、次の情報を入力します。
      • 名前: tcp-health-check-8080
      • プロトコル: TCP
      • ポート: 8080
    5. [保存] をクリックします。
  3. 続行する前に、[バックエンドの構成] の隣に青いチェックマークがあることを確認します。

フロントエンドの構成

  1. [フロントエンドの構成] をクリックします。
  2. [名前] フィールドに「forwarding-rule-l3-default」と入力します。
  3. IPv4 トラフィックを処理する手順は次のとおりです。
    1. [IP バージョン] で [IPv4] を選択します。
    2. [内部 IP の目的] セクションの [IP アドレス] リストで、[IP アドレスを作成] を選択します。
      1. [名前] フィールドに「network-lb-ipv4」と入力します。
      2. [予約] をクリックします。
    3. [プロトコル] リストで [L3(複数のプロトコル)] を選択します。
    4. [ポート] で [すべて] を選択します。
    5. [完了] をクリックします。
  4. IPv6 トラフィックを処理する手順は次のとおりです。

    1. [IP バージョン] で [IPv6] を選択します。
    2. [サブネットワーク] で [lb-subnet] を選択します。
    3. [IPv6 範囲] リストで、[IP アドレスを作成] を選択します。
      1. [名前] フィールドに「network-lb-ipv6」と入力します。
      2. [予約] をクリックします。
    4. [プロトコル] フィールドで、[L3(複数のプロトコル)] を選択します。
    5. [ポート] で [すべて] を選択します。
    6. [完了] をクリックします。

    [フロントエンドの構成] の左側にある青い丸のチェックマークが表示されていれば、設定に成功しています。

構成を確認する

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

    [ロード バランシング] ページで、新しいロードバランサの [バックエンド] 列に緑色のチェックマークが表示されていれば、新しく作成したロードバランサは正常な状態です。

gcloud

  1. 静的外部 IP アドレスを予約します。

    IPv4 トラフィックの場合: ロードバランサに静的外部 IP アドレスを作成します。

    gcloud compute addresses create network-lb-ipv4 \
        --region us-central1
    

    IPv6 トラフィックの場合: ロードバランサの静的外部 IPv6 アドレス範囲を作成します。使用するサブネットは、外部 IPv6 サブネット範囲を持つデュアルスタック サブネットである必要があります。

    gcloud compute addresses create network-lb-ipv6 \
        --region us-central1 \
        --subnet lb-subnet \
        --ip-version IPV6 \
        --endpoint-type NETLB
    
  2. ポート 80 の TCP ヘルスチェックを作成します。このヘルスチェックは、ig-us-tcp-80 インスタンス グループのバックエンドの正常性を確認するために使用されます。

    gcloud compute health-checks create tcp tcp-health-check-80 \
        --region us-central1 \
        --port 80
    
  3. ポート 8080 の TCP ヘルスチェックを作成します。このヘルスチェックは、ig-us-l3-default インスタンス グループのバックエンドの正常性を確認するために使用されます。

    gcloud compute health-checks create tcp tcp-health-check-8080 \
        --region us-central1 \
        --port 8080
    
  4. ポート 80 の TCP トラフィックを処理する 1 つ目のロードバランサを作成します。

    1. プロトコルを TCP に設定してバックエンド サービスを作成します。

      gcloud compute backend-services create backend-service-tcp-80 \
          --protocol TCP \
          --health-checks tcp-health-check-80 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. バックエンド インスタンス グループをバックエンド サービスに追加します。

      gcloud compute backend-services add-backend backend-service-tcp-80 \
          --instance-group ig-us-tcp-80 \
          --instance-group-zone us-central1-a \
          --region us-central1
      
    3. IPv4 トラフィックの場合: ポート 80 の受信 TCP トラフィックをバックエンド サービスに転送する転送ルールを作成します。TCP はデフォルトの転送ルール プロトコルで、明示的に設定する必要はありません。

      ステップ 1 で予約した IP アドレスをロードバランサの静的外部 IP アドレスとして使用します。

      gcloud compute forwarding-rules create forwarding-rule-tcp-80 \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports 80 \
          --address network-lb-ipv4 \
          --backend-service backend-service-tcp-80
      
    4. IPv6 トラフィックの場合: ポート 80 の受信 TCP トラフィックをバックエンド サービスに転送する転送ルールを作成します。TCP はデフォルトの転送ルール プロトコルで、明示的に設定する必要はありません。

      手順 1 で予約した IPv6 アドレス範囲を、ロードバランサの静的外部 IP アドレスとして使用します。使用するサブネットは、外部 IPv6 サブネット範囲を持つデュアルスタック サブネットである必要があります。

      gcloud compute forwarding-rules create forwarding-rule-tcp-80 \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports 80 \
          --backend-service backend-service-tcp-80
      
  5. ポート 8080 の TCP、UDP、ESP、ICMP トラフィックを処理する 2 つ目のロードバランサを作成します。

    1. プロトコルを UNSPECIFIED に設定してバックエンド サービスを作成します。

      gcloud compute backend-services create backend-service-l3-default \
          --protocol UNSPECIFIED \
          --health-checks tcp-health-check-8080 \
          --health-checks-region us-central1 \
          --region us-central1
      
    2. バックエンド インスタンス グループをバックエンド サービスに追加します。

      gcloud compute backend-services add-backend backend-service-l3-default \
          --instance-group ig-us-l3-default \
          --instance-group-zone us-central1-c \
          --region us-central1
      
    3. IPv4 トラフィックの場合: サポートされている残りすべての IP プロトコル トラフィック(ポート 8080 の TCP、UDP、ESP、ICMP)を処理するため、プロトコルを L3_DEFAULT に設定した転送ルールを作成します。すべてのポートに L3_DEFAULT 転送ルールを構成する必要があります。

      最初のロードバランサと同じ外部 IPv4 アドレスを使用します。

      gcloud compute forwarding-rules create forwarding-rule-l3-default \
          --load-balancing-scheme external \
          --region us-central1 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --address network-lb-ipv4 \
          --backend-service backend-service-l3-default
      
    4. IPv6 トラフィックの場合: サポートされている残りすべての IP プロトコル トラフィック(ポート 8080 の TCP、UDP、ESP、ICMP)を処理するため、プロトコルを L3_DEFAULT に設定した転送ルールを作成します。すべてのポートに L3_DEFAULT 転送ルールを構成する必要があります。

      手順 1 で予約した IPv6 アドレス範囲を、ロードバランサの静的外部 IP アドレスとして使用します。使用するサブネットは、外部 IPv6 サブネット範囲を持つデュアルスタック サブネットである必要があります。

      gcloud compute forwarding-rules create forwarding-rule-l3-default \
          --load-balancing-scheme external \
          --region us-central1 \
          --network-tier PREMIUM \
          --ip-version IPV6 \
          --subnet lb-subnet \
          --address network-lb-ipv6 \
          --ports all \
          --ip-protocol L3_DEFAULT \
          --backend-service backend-service-l3-default
      

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

ロード バランシング サービスの構成が完了したので、ロードバランサの外部 IP アドレスにトラフィックの送信を開始できます。また、バックエンド インスタンスに分散されるトラフィックを監視できます。

ロードバランサの外部 IP アドレスを調べる

コンソール

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

    [ロード バランシングのコンポーネント] に移動

  2. [転送ルール] タブで、ロードバランサが使用する転送ルールを見つけます。

  3. [IP アドレス] 列で、IPv4 と IPv6 の各転送ルールに表示されている外部 IP アドレスをメモします。

gcloud: IPv4

次のコマンドを入力して、ロードバランサが使用する転送ルールの外部 IP アドレスを表示します。

gcloud compute forwarding-rules describe forwarding-rule-tcp-80 \
    --region us-central1

この例では、両方の IPv4 転送ルールに同じ IP アドレスを使用しているため、forwarding-rule-l3-default でも機能します。

gcloud: IPv6

次のコマンドを入力して、ロードバランサが使用する forwarding-rule-tcp-80 転送ルールの外部 IPv6 アドレスを表示します。

gcloud compute forwarding-rules describe forwarding-rule-tcp-80 \
    --region us-central1

この例では、両方の IPv6 転送ルールに同じ IP アドレスを使用しているため、forwarding-rule-l3-default でも機能します。

ロードバランサにトラフィックを送信する

こちらのステップでは、ロードバランサに外部トラフィックを送信します。次のテストを行い、ポート 80 の TCP トラフィックが ig-us-tcp-80 インスタンス グループによってロードバランスされ、その他すべてのトラフィック(ポート 8080 の TCP、UDP、ESP、ICMP)が ig-us-l3-default インスタンス グループによってロードバランスされていることを確認します。

ポート 80 の TCP リクエストの動作を確認する

  1. curl を使用して IP アドレスに接続し、ロードバランサにウェブ リクエストを送信します(ポート 80 の TCP 経由)。

    • IPv4 接続のクライアントから、次のコマンドを実行します。

      while true; do curl -m1 IP_ADDRESS; done
      
    • IPv6 接続のクライアントから、次のコマンドを実行します。

      while true; do curl -m1 http://IPV6_ADDRESS; done
      

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

      while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]; done
      
  2. curl コマンドによって返されたテキストを確認します。レスポンスを生成するバックエンド VM の名前が文字列内に表示されます(たとえば、Page served from: VM_NAME)。レスポンスは ig-us-tcp-80 インスタンス グループのインスタンスからのみ返されます。

    最初のレスポンスで失敗した場合は、構成が完全に読み込まれてインスタンスが正常であるとマークされるまで最大 30 秒待ってから、もう一度やり直してください。

ポート 8080 の TCP リクエストの動作を確認する

curl を使用してロードバランサへのウェブ リクエストを作成し(ポート 8080 の TCP 経由)、IP アドレスに接続します。

  • IPv4 接続のクライアントから、次のコマンドを実行します。

    while true; do curl -m1 IPV4_ADDRESS:8080; done
    
  • IPv6 接続のクライアントから、次のコマンドを実行します。

    while true; do curl -m1 http://IPV6_ADDRESS; done
    

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

    while true; do curl -m1 http://[2001:db8:1:1:1:1:1:1]:8080; done
    

curl コマンドによって返されたテキストを確認します。レスポンスは ig-us-l3-default インスタンス グループのインスタンスからのみ返されます。

これはロードバランサのポート 8080 の IP アドレスに送信されたトラフィックは、ig-us-l3-default インスタンス グループのバックエンドによってのみ処理されていることを示しています。

ICMP リクエストの動作を確認する

ICMP トラフィックの動作を確認するには、tcpdump コマンドを実行して、ig-us-l3-default インスタンス グループのバックエンド VM のみがロードバランサへの ICMP リクエストを処理していることを確認します。

  1. SSH を使用してバックエンド VM に接続します。

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

      [VM インスタンス] ページに移動

    2. 仮想マシン(VM)インスタンスのリストから、接続するインスタンスの行の [SSH] をクリックします。

  2. tcpdump を使用した次のコマンドを実行し、ICMP トラフィックのリッスンを開始します。

    sudo tcpdump icmp -w ~/icmpcapture.pcap -s0 -c 10000
    tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    

    SSH ウィンドウを開いたままにします。

  3. 4 つのバックエンド VM すべてに手順 1 と 2 を繰り返します。

  4. ロードバランサに ICMP リクエストを送信します。

    IPv4 レスポンスをテストするには、ping を使用してロードバランサの IPv4 アドレスに接続します。

    ping IPV4_ADDRESS
    

    IPv6 レスポンスをテストするには、ping6 を使用してロードバランサの IPv6 アドレスに接続します。

    ping6 IPV6_ADDRESS
    

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

    ping6 2001:db8:1:1:1:1:1:1
    
  5. 開いている各 VM の SSH ウィンドウに戻り、tcpdump キャプチャ コマンドを停止します。これを行うには、Ctrl+C を使用します。

  6. 各 VM で、icmpcapture.pcap ファイルの tcpdump コマンドの出力を確認します。

    sudo tcpdump -r ~/icmpcapture.pcap -n
    

    ig-us-l3-default インスタンス グループのバックエンド VM の場合、次のようなファイル エントリが表示されます。

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    22:13:07.814486 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 1, length 64
    22:13:07.814513 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 1, length 64
    22:13:08.816150 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 2, length 64
    22:13:08.816175 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 2, length 64
    22:13:09.817536 IP 35.230.115.24 > 35.193.84.93: ICMP echo request, id 1995, seq 3, length 64
    22:13:09.817560 IP 35.193.84.93 > 35.230.115.24: ICMP echo reply, id 1995, seq 3, length 64
    ...
    

    ig-us-tcp-80 インスタンス グループのバックエンド VM の場合、パケットを受信していないため、ファイルは空となります。

    reading from file /home/[user-directory]/icmpcapture.pcap, link-type EN10MB (Ethernet)
    

追加の構成オプション

BYOIP を使用する IPv6 転送ルールを作成する

これまでのステップで作成したロードバランサは、IP versionIPv4 または IPv6 とする転送ルールで構成されています。このセクションでは、お客様所有 IP(BYOIP)アドレスを使用して IPv6 転送ルールを作成する手順について説明します。

お客様所有 IP アドレスを使用すると、 Google Cloud リソースに独自のパブリック IPv6 アドレスをプロビジョニングして使用できます。詳細については、お客様所有 IP アドレスの使用をご覧ください。

BYOIP アドレスを使用して IPv6 転送ルールの構成を開始する前に、次の手順を完了する必要があります。

  1. パブリック アドバタイズド IPv6 プレフィックスを作成する
  2. パブリック委任プレフィックスを作成する
  3. IPv6 サブプレフィックスを作成する
  4. 接頭辞を読み上げる

新しい転送ルールを作成するには、次の手順を行います。

コンソール

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

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

  2. 変更するロードバランサの名前をクリックします。
  3. [編集] をクリックします。
  4. [フロントエンドの構成] をクリックします。
  5. [フロントエンド IP とポートの追加] をクリックします。
  6. [新しいフロントエンドの IP とポート] セクションで、次の情報を指定します。
    1. 必要なプロトコルを選択します。
    2. [IP バージョン] フィールドで、[IPv6] を選択します。
    3. [IPv6 範囲のソース] フィールドで、[BYOIP] を選択します。
    4. [IP コレクション] リストで、転送ルール オプションを有効にして、前の手順で作成したサブプレフィックスを選択します。
    5. [IPv6 範囲] フィールドに IPv6 アドレス範囲を入力します。IPv6 アドレス範囲のプレフィックスは、関連付けられたサブプレフィックスで指定された割り振り可能なプレフィックス長と一致している必要があります。
    6. [ポート] フィールドにポート番号を入力します。
    7. [完了] をクリックします。
  7. [更新] をクリックします。

gcloud

gcloud compute forwarding-rules create コマンドを使用して転送ルールを作成します。

gcloud compute forwarding-rules create FWD_RULE_NAME \
    --load-balancing-scheme EXTERNAL \
    --ip-protocol PROTOCOL \
    --ports ALL \
    --ip-version IPV6 \
    --region REGION_A \
    --address IPV6_CIDR_RANGE  \
    --backend-service BACKEND_SERVICE \
    --ip-collection PDP_NAME

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

  • FWD_RULE_NAME: 転送ルールの名前。
  • PROTOCOL: 転送ルールの IP プロトコル。デフォルトは TCP です。この例では、IP プロトコルは TCP または L3_DEFAULT のいずれかです。
  • REGION_A: 転送ルールのリージョン。
  • IPV6_CIDR_RANGE: 転送ルールが対象とする IPv6 アドレス範囲。IPv6 アドレス範囲のプレフィックスは、関連付けられたサブプレフィックスで指定された割り振り可能なプレフィックス長と一致している必要があります。
  • BACKEND_SERVICE: バックエンド サービスの名前。
  • PDP_NAME: パブリック委任プレフィックスの名前。PDP は、EXTERNAL_IPV6_FORWARDING_RULE_CREATION モードのサブプレフィックスでなければなりません。

次のステップ