このガイドでは、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-type
を IPv4_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 トラフィックの両方をサポートするには、次の操作を行います。
Google Cloud コンソールの [VPC ネットワーク] ページに移動します。
[VPC ネットワークを作成] をクリックします。
[名前] に「
lb-network
」を入力します。[サブネット] セクションで次の設定を行います。
- [サブネット作成モード] を [カスタム] に設定します。
- [新しいサブネット] セクションで、次のフィールドを構成して [完了] をクリックします。
- 名前:
lb-subnet
- リージョン:
us-central1
- IP スタックタイプ: IPv4 および IPv6(デュアルスタック)
- IPv4 範囲:
10.1.2.0/24
サブネットの IPv4 アドレス範囲は構成できますが、サブネットの IPv6 アドレスの範囲は選択できません。Google では、固定サイズ(/64)の IPv6 CIDR ブロックを提供しています。 - IPv6 アクセスタイプ: 外部
- 名前:
[作成] をクリックします。
IPv4 トラフィックのみをサポートするには、次の操作を行います。
Google Cloud コンソールの [VPC ネットワーク] ページに移動します。
[VPC ネットワークを作成] をクリックします。
[名前] に「
lb-network
」を入力します。[サブネット] セクションで次の設定を行います。
- [サブネット作成モード] を [カスタム] に設定します。
- [新しいサブネット] セクションで、次のフィールドを構成して [完了] をクリックします。
- 名前:
lb-subnet
- リージョン:
us-central1
- IP スタックタイプ: IPv4(シングルスタック)
- IPv4 範囲:
10.1.2.0/24
- 名前:
[作成] をクリックします。
gcloud
カスタムモードの VPC ネットワークを作成します。
gcloud compute networks create lb-network \ --subnet-mode=custom
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-type
を IPv4_IPv6
に設定します。VM は、サブネットから ipv6-access-type
設定(この例では EXTERNAL
)も継承します。IPv6 の要件の詳細については、外部パススルー ネットワーク ロードバランサの概要: 転送ルールをご覧ください。
既存の VM をバックエンドとして使用するには、gcloud compute instances network-interfaces update
コマンドを使用して VM をデュアルスタックに更新します。
外部パススルー ネットワーク ロードバランサのバックエンド VM として参加するインスタンスでは、適切な Linux ゲスト環境、Windows ゲスト環境、または同等の機能を提供する他のプロセスが実行されている必要があります。
ポート 80 の TCP トラフィック用にインスタンス グループを作成する
コンソール
インスタンス テンプレートを作成します。Google Cloud コンソールで [インスタンス テンプレート] ページに移動します。
- [インスタンス テンプレートを作成] をクリックします。
- [名前] に「
ig-us-template-tcp-80
」と入力します。 - [ブートディスク] が Debian GNU/Linux 10 (buster) などの Debian イメージに設定されていることを確認します。以降の手順では、
apt-get
などの Debian でのみ使用できるコマンドを使用します。 - [ネットワーキング、ディスク、セキュリティ、管理、単一テナンシー] をクリックします。
[管理] をクリックし、次のスクリプトを [起動スクリプト] フィールドにコピーします。
#! /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
[ネットワーキング] をクリックします。
- [ネットワーク タグ] に
network-lb-tcp-80
を追加します。 - [ネットワーク インターフェース] で [default] をクリックし、次のフィールドを構成します。
- ネットワーク:
lb-network
- サブネットワーク:
lb-subnet
- ネットワーク:
- [ネットワーク タグ] に
[作成] をクリックします。
マネージド インスタンス グループを作成します。Google Cloud コンソールで [インスタンス グループ] ページに移動します。
- [インスタンス グループを作成] をクリックします。
- [新しいマネージド インスタンス グループ(ステートレス)] を選択します。詳細については、ステートレス MIG とステートフル MIG をご覧ください。
- [名前] に「
ig-us-tcp-80
」と入力します。 - [ロケーション] で [シングルゾーン] を選択します。
- [リージョン] で
us-central1
を選択します。 - [ゾーン] で
us-central1-a
を選択します。 - [インスタンス テンプレート] で
ig-us-template-tcp-80
を選択します。 グループ内に作成するインスタンスの数を指定します。
この例では、[自動スケーリング] で次のオプションを指定します。
- [自動スケーリング モード] で [
Off:do not autoscale
] を選択します。 - [インスタンスの最大数] に「
2
」と入力します。
- [自動スケーリング モード] で [
[作成] をクリックします。
gcloud
このガイドの gcloud
の手順は、Cloud Shell または bash がインストールされた別の環境を使用していることを前提としています。
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'
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 トラフィック用にインスタンス グループを作成する
コンソール
インスタンス テンプレートを作成します。Google Cloud コンソールで [インスタンス テンプレート] ページに移動します。
- [インスタンス テンプレートを作成] をクリックします。
- [名前] に「
ig-us-template-l3-default
」と入力します。 - [ブートディスク] が Debian GNU/Linux 10 (buster) などの Debian イメージに設定されていることを確認します。以降の手順では、
apt-get
などの Debian でのみ使用できるコマンドを使用します。 - [ネットワーキング、ディスク、セキュリティ、管理、単一テナンシー] をクリックします。
[管理] をクリックし、次のスクリプトを [起動スクリプト] フィールドにコピーします。起動スクリプトを修正し、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
[ネットワーキング] をクリックします。
- [ネットワーク タグ] に
network-lb-l3-default
を追加します。 - [ネットワーク インターフェース] で [default] をクリックし、次のフィールドを構成します。
- ネットワーク:
lb-network
- サブネットワーク:
lb-subnet
- ネットワーク:
- [ネットワーク タグ] に
[作成] をクリックします。
マネージド インスタンス グループを作成します。Google Cloud コンソールで [インスタンス グループ] ページに移動します。
- [インスタンス グループを作成] をクリックします。
- [新しいマネージド インスタンス グループ(ステートレス)] を選択します。詳細については、ステートレス MIG とステートフル MIG をご覧ください。
- [名前] に「
ig-us-l3-default
」と入力します。 - [ロケーション] で [シングルゾーン] を選択します。
- [リージョン] で
us-central1
を選択します。 - [ゾーン] で
us-central1-c
を選択します。 - [インスタンス テンプレート] で
ig-us-template-l3-default
を選択します。 グループ内に作成するインスタンスの数を指定します。
この例では、[自動スケーリング] で次のオプションを指定します。
- [自動スケーリング モード] で [
Off:do not autoscale
] を選択します。 - [インスタンスの最大数] に「
2
」と入力します。
- [自動スケーリング モード] で [
[作成] をクリックします。
gcloud
このガイドの gcloud
の手順は、Cloud Shell または bash がインストールされた別の環境を使用していることを前提としています。
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'
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 アドレス範囲を使用します。
コンソール
- Google Cloud コンソールで [ファイアウォール ポリシー] ページに移動します。
[ファイアウォール ポリシー] に移動 - IPv4 TCP トラフィックが
ig-us-tcp-80
インスタンス グループのバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。- [ファイアウォール ルールを作成] をクリックします。
- [名前] に「
allow-network-lb-tcp-80-ipv4
」と入力します。 - ファイアウォール ルールを適用するネットワークを選択します(デフォルト)。
- [ターゲット] で [指定されたターゲットタグ] を選択します。
- [ターゲットタグ] フィールドに「
network-lb-tcp-80
」と入力します。 - [ソースフィルタ] を [IPv4 範囲] に設定します。
- [送信元 IPv4 範囲] を
0.0.0.0/0
に設定します。これにより、任意の送信元からのトラフィックが許可されます。これにより、外部トラフィックとヘルスチェック プローブの両方がバックエンド インスタンスに到達できるようになります。 - [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。[TCP] チェックボックスをオンにして、「
80
」を入力します。 - [作成] をクリックします。新しいファイアウォール ルールがコンソールに表示されるまで少し時間がかかる場合があります。表示されない場合は、[更新] をクリックしてルールを表示してみてください。
- IPv4 UDP、ESP、ICMP トラフィックが
ig-us-l3-default
インスタンス グループのバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。- [ファイアウォール ルールを作成] をクリックします。
- [名前] に「
allow-network-lb-l3-default-ipv4
」と入力します。 - ファイアウォール ルールを適用するネットワークを選択します(デフォルト)。
- [ターゲット] で [指定されたターゲットタグ] を選択します。
- [ターゲットタグ] フィールドに「
network-lb-l3-default
」と入力します。 - [ソースフィルタ] を [IPv4 範囲] に設定します。
- [送信元 IPv4 範囲] を
0.0.0.0/0
に設定します。これにより、任意の送信元からのトラフィックが許可されます。これにより、外部トラフィックとヘルスチェック プローブの両方がバックエンド インスタンスに到達できるようになります。 - [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。
- [TCP] チェックボックスをオンにして、「
8080
」を入力します。 - [UDP] チェックボックスをオンにします。
- [その他] チェックボックスをオンにして、「
esp, icmp
」と入力します。
- [TCP] チェックボックスをオンにして、「
- [作成] をクリックします。新しいファイアウォール ルールがコンソールに表示されるまで少し時間がかかる場合があります。表示されない場合は、[更新] をクリックしてルールを表示してみてください。
- IPv6 TCP トラフィックが
ig-us-tcp-80
インスタンス グループのバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。- [ファイアウォール ルールを作成] をクリックします。
- [名前] に「
allow-network-lb-tcp-80-ipv6
」と入力します。 - ファイアウォール ルールを適用するネットワークを選択します(デフォルト)。
- [ターゲット] で [指定されたターゲットタグ] を選択します。
- [ターゲットタグ] フィールドに「
network-lb-tcp-80
」と入力します。 - [ソースフィルタ] を [IPv6 範囲] に設定します。
- [送信元 IPv6 範囲] を
::/0
に設定します。これにより、任意の送信元からのトラフィックが許可されます。これにより、外部トラフィックとヘルスチェック プローブの両方がバックエンド インスタンスに到達できるようになります。 - [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。[TCP] の横にあるチェックボックスをオンにして、「
80
」と入力します。 - [作成] をクリックします。新しいファイアウォール ルールがコンソールに表示されるまで少し時間がかかる場合があります。表示されない場合は、[更新] をクリックしてルールを表示してみてください。
- IPv6 UDP、ESP、ICMPv6 トラフィックが
ig-us-l3-default
インスタンス グループ内のバックエンドに到達できるようにするには、次のファイアウォール ルールを作成します。このファイアウォール ルールにより、TCP ヘルスチェック プローブがポート 8080 のインスタンスに到達できるようになります。- [ファイアウォール ルールを作成] をクリックします。
- [名前] に「
allow-network-lb-l3-default-ipv6
」と入力します。 - ファイアウォール ルールを適用するネットワークを選択します(デフォルト)。
- [ターゲット] で [指定されたターゲットタグ] を選択します。
- [ターゲットタグ] フィールドに「
network-lb-l3-default
」と入力します。 - [ソースフィルタ] を [IPv6 範囲] に設定します。
- [送信元 IPv6 範囲] を
::/0
に設定します。これにより、任意の送信元からのトラフィックが許可されます。これにより、外部トラフィックとヘルスチェック プローブの両方がバックエンド インスタンスに到達できるようになります。 - [プロトコルとポート] で [指定したプロトコルとポート] をオンにします。
- [TCP] の横にあるチェックボックスをオンにして、「
8080
」と入力します。 - [UDP] の横にあるチェックボックスをオンにします。
- [その他] の横にあるチェックボックスをオンにして、「
esp, 58
」と入力します。
- [TCP] の横にあるチェックボックスをオンにして、「
- [作成] をクリックします。新しいファイアウォール ルールがコンソールに表示されるまで少し時間がかかる場合があります。表示されない場合は、[更新] をクリックしてルールを表示してみてください。
gcloud
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
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
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
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
静的外部 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
ポート
80
の TCP ヘルスチェックを作成します。このヘルスチェックは、ig-us-tcp-80
インスタンス グループのバックエンドの正常性を確認するために使用されます。gcloud compute health-checks create tcp tcp-health-check-80 \ --region us-central1 \ --port 80
ポート
8080
の TCP ヘルスチェックを作成します。このヘルスチェックは、ig-us-l3-default
インスタンス グループのバックエンドの正常性を確認するために使用されます。gcloud compute health-checks create tcp tcp-health-check-8080 \ --region us-central1 \ --port 8080
ポート
80
の TCP トラフィックを処理するロードバランサを作成します。プロトコルを
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
バックエンド インスタンス グループをバックエンド サービスに追加します。
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
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
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
TCP(ポート
8080
)、UDP、ESP、ICMP トラフィックを処理するロードバランサを作成します。プロトコルを
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
バックエンド インスタンス グループをバックエンド サービスに追加します。
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
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
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 アドレスを調べる
コンソール
- 負荷分散の [詳細] ページにある [転送ルール] タブに移動します。
[転送ルール] タブに移動 - ロードバランサが使用する転送ルールを探します。
- [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 リクエストの動作を確認する
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
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 のみが処理していることを確認します。
バックエンド VM に SSH で接続します。
Google Cloud コンソールで、[VM インスタンス] ページに移動します。
[VM インスタンス] ページに移動仮想マシン インスタンスのリストで、接続するインスタンスの行にある [SSH] をクリックします。
次のコマンドを実行し、
tcpdump
を使用して ICMP トラフィックのリッスンを開始します。sudo tcpdump icmp -w ~/icmpcapture.pcap -s0 -c 10000 tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
SSH ウィンドウを開いたままにします。
4 つのバックエンド VM すべてに手順 1 と 2 を繰り返します。
ロードバランサに 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
開いている各 VM の SSH ウィンドウに戻り、
tcpdump
キャプチャ コマンドを停止します。これを行うには、Ctrl+C を使用します。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)
次のステップ
- ゾーン NEG バックエンドを使用して外部パススルー ネットワーク ロードバランサを構成し、パケットを VM インスタンスの
nic0
以外のネットワーク インターフェースに転送できるようにする。ゾーン NEG を使用した外部パススルー ネットワーク ロードバランサを設定するをご覧ください。 - 外部パススルー ネットワーク ロードバランサがバックエンド サービスでどのように動作するか確認する。バックエンド サービスベースの外部パススルー ネットワーク ロードバランサの概要をご覧ください。
- 外部パススルー ネットワーク ロードバランサをターゲット プール バックエンドからリージョン バックエンド サービスに移行する方法を確認する。外部パススルー ネットワーク ロードバランサをターゲット プールからバックエンド サービスに移行するをご覧ください。
- Google Cloud Armor を使用して外部パススルー ネットワーク ロードバランサの高度なネットワーク DDoS 保護を構成する。高度なネットワーク DDoS 保護を構成するをご覧ください。
- リソースを削除する。ロードバランサの設定の削除をご覧ください。