複数の 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 アドレスの両方を割り当てることができます。

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

  • リージョン: 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 10 (buster) などの 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-10 \
    --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-10 \
    --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 10 (buster) などの 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-10 \
    --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-10 \
    --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
    

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

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

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

コンソール

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-ipv4 \
          --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-ipv6 \
          --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-ipv4 \
          --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-ipv6 \
          --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-ipv4 \
    --region us-central1

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

gcloud: IPv6

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

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

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

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

この手順により、ロードバランサに外部トラフィックが送信されます。次のテストを行い、ポート 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)
    

次のステップ