複数の 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" \
    http://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. プロトコルを 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. TCP(ポート 8080)、UDP、ESP、ICMP トラフィックを処理するロードバランサを作成します。

    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. ロード バランシングの [詳細] ページにある [転送ルール] タブに移動します。
    [転送ルール] タブに移動
  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 を使用して IP アドレスに接続し、ロードバランサにウェブ リクエストを送信します(ポート 8080 の TCP 経由)。

  • 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 インスタンス グループのインスタンスからのみ、レスポンスが返されます。

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

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

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

  1. バックエンド VM に SSH で接続します。

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

    2. 仮想マシン インスタンスのリストで、接続するインスタンスの行にある [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. [プロトコル] は [TCP] です。
    2. [IP バージョン] フィールドで、[IPv6] を選択します。
    3. [IPv6 範囲のソース] フィールドで、[BYOIP] を選択します。
    4. [IP コレクション] リストで、転送ルール オプションを有効にして、前の手順で作成したサブプレフィックスを選択します。
    5. [IPv6 範囲] フィールドに IPv6 アドレス範囲を入力します。IPv6 アドレス範囲は、IPv6 サブプレフィックスの仕様に準拠していなければなりません。
    6. [ポート] フィールドにポート番号を入力します。
    7. [完了] をクリックします。
  7. [フロントエンド IP とポートの追加] をクリックします。
  8. [新しいフロントエンドの IP とポート] セクションで、次の情報を指定します。
    1. [プロトコル] は [L3(複数のプロトコル)] です。
    2. [IP バージョン] フィールドで、[IPv6] を選択します。
    3. [IPv6 範囲のソース] フィールドで、[BYOIP] を選択します。
    4. [IP コレクション] リストで、転送ルール オプションを有効にして、前の手順で作成したサブプレフィックスを選択します。
    5. [IPv6 範囲] フィールドに IPv6 アドレス範囲を入力します。IPv6 アドレス範囲は、IPv6 サブプレフィックスの仕様に準拠していなければなりません。
    6. [ポート] フィールドで [すべて] を選択します。
    7. [完了] をクリックします。
  9. [更新] をクリックします。

Google Cloud CLI

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

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

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: 転送ルールの名前
  • REGION_A: 転送ルールのリージョン
  • IPV6_CIDR_RANGE: 転送ルールが提供する IPv6 アドレス範囲。IPv6 アドレス範囲は、IPv6 サブプレフィックスの仕様に準拠していなければなりません。
  • BACKEND_SERVICE: バックエンド サービスの名前
  • PDP_NAME: パブリック委任プレフィックスの名前。PDP は、EXTERNAL_IPV6_FORWARDING_RULE_CREATION モードのサブプレフィックスでなければなりません。

次のステップ