このチュートリアルでは、サービス プロデューサーが内部パススルー ネットワーク ロードバランサを使用するシンプルなサービスを作成する方法について説明します。デフォルトでは、内部パススルー ネットワーク ロードバランサは、それをホストする VPC ネットワーク内からのみ使用できます。
このチュートリアルは、クラウド アーキテクト、ネットワーク アーキテクト、ネットワーク管理者、IT 管理者を対象としています。
目標
- サービス プロデューサー リソースのネットワーキングを構成する
- ロードバランサのバックエンド用の VM リソースを作成する
- ロードバランサ コンポーネントを構成する
- ロードバランサへのアクセスをテストする
費用
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- サービス プロデューサー リソースに使用するプロジェクトを作成または選択します。このプロジェクトは、以降のチュートリアルで
PRODUCER_PROJECTとして参照されます。 -
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Enable the Compute Engine API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Make sure that you have the following role or roles on the project: Compute Engine > Compute Network Admin, Compute Engine > Compute Security Admin, Compute Engine > Compute Instance Admin
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
IAM に移動 - プロジェクトを選択します。
- [ アクセスを許可] をクリックします。
-
[新しいプリンシパル] フィールドに、ユーザー ID を入力します。 これは通常、Google アカウントのメールアドレスです。
- [ロールを選択] をクリックし、ロールを検索します。
- 追加のロールを付与するには、 [別のロールを追加] をクリックして各ロールを追加します。
- [保存] をクリックします。
-
ネットワークを構成する
以降のセクションでは、サービスのネットワーク、サブネット、ファイアウォール ルールを作成する方法について説明します。
ネットワークとサブネットを構成する
ロードバランサのサービス ネットワークとサブネットを作成するには、次のセクションの手順を完了します。
コンソール
Google Cloud コンソールで、[VPC ネットワーク] ページに移動します。
[VPC ネットワークを作成] をクリックします。
[名前] に「
service-network」と入力します。[サブネット作成モード] で [カスタム] を選択します。
[新しいサブネット] セクションに、次の情報を入力します。
- [名前] に「
service-subnet」と入力します。 - [リージョン] で、使用するリージョンを選択します。
- [IP スタックタイプ] で [IPv4(シングルスタック)] を選択します。
- [IPv4 範囲] に「
10.10.10.0/24」と入力します。 - [完了] をクリックします。
- [名前] に「
[作成] をクリックします。
gcloud
カスタムモードの VPC ネットワークを作成します。
gcloud compute networks create service-network --subnet-mode=custom
service-networkネットワークにサブネットを作成します。gcloud compute networks subnets create service-subnet \ --network=service-network \ --range=10.10.10.0/24 \ --region=REGIONREGIONは、使用するリージョンに置き換えます。
ファイアウォール ルールを構成する
次のトラフィックを許可するファイアウォール ルールを作成します。
fw-allow-subnet:10.10.10.0/24からのトラフィックが10.10.10.0/24内の他のリソースに到達できるようにします。fw-allow-ssh:0.0.0.0/0からの SSH トラフィックがallow-sshネットワーク タグを持つ VM に到達できるようにします。fw-allow-healthcheck: Google Cloudヘルスチェック システムからのトラフィックがallow-healthcheckネットワーク タグを持つ VM に到達できるようにします。
コンソール
Google Cloud コンソールで、[ファイアウォール ポリシー] ページに移動します。
サブネット トラフィックを許可するには、[ファイアウォール ルールを作成] をクリックして、次の設定を使用します。
- [名前] に「
fw-allow-subnet」と入力します。 - [ネットワーク] で
service-networkを選択します。 - [優先度] に「
1000」と入力します。 - [トラフィックの方向] で [上り(内向き)] をオンにします。
- [一致したときのアクション] で [許可] をオンにします。
- [ターゲット] で [ネットワーク上のすべてのインスタンス] を選択します。
- [ソースフィルタ] で [IPv4 範囲] を選択します。
- [送信元 IPv4 範囲] に「
10.10.10.0/24」と入力します。 - [プロトコルとポート] で、[すべて許可] を選択します。
- [名前] に「
[Create] をクリックします。
受信 SSH 接続を許可するには、[ファイアウォール ルールを作成] をクリックして、次の設定を使用します。
- [名前] に「
fw-allow-ssh」と入力します。 - [ネットワーク] で
service-networkを選択します。 - [優先度] に「
1000」と入力します。 - [トラフィックの方向] で [上り(内向き)] をオンにします。
- [一致したときのアクション] で [許可] をオンにします。
- [ターゲット] で [指定されたターゲットタグ] を選択します。
- [ターゲットタグ] に「
allow-ssh」と入力します。 - [ソースフィルタ] で [IPv4 範囲] を選択します。
- [送信元 IPv4 範囲] に「
0.0.0.0/0」と入力します。 - [プロトコルとポート] で [指定したプロトコルとポート] を選択し、[TCP] チェックボックスをオンにします。[ポート] に「
22」と入力します。
- [名前] に「
[Create] をクリックします。
Google Cloud ヘルスチェックを許可するには、[ファイアウォール ルールを作成] をクリックして、次の設定を使用します。
- [名前] に「
fw-allow-healthcheck」と入力します。 - [ネットワーク] で
service-networkを選択します。 - [優先度] に「
1000」と入力します。 - [トラフィックの方向] で [上り(内向き)] をオンにします。
- [一致したときのアクション] で [許可] をオンにします。
- [ターゲット] で [指定されたターゲットタグ] を選択します。
- [ターゲットタグ] に「
allow-healthcheck」と入力します。 - [ソースフィルタ] で [IPv4 範囲] を選択します。
- [送信元 IPv4 範囲] に「
130.211.0.0/22」と「35.191.0.0/16」を入力します。 - [プロトコルとポート] で、[すべて許可] を選択します。
- [名前] に「
[Create] をクリックします。
gcloud
fw-allow-subnetファイアウォール ルールを作成して、サブネットとの通信を許可します。gcloud compute firewall-rules create fw-allow-subnet \ --network=service-network \ --action=allow \ --direction=ingress \ --source-ranges=10.10.10.0/24 \ --rules=tcp,udp,icmp
ネットワーク タグ
allow-sshを使用して、VM との SSH 接続を許可するfw-allow-sshファイアウォール ルールを作成します。gcloud compute firewall-rules create fw-allow-ssh \ --network=service-network \ --action=allow \ --direction=ingress \ --source-ranges=0.0.0.0/0 \ --target-tags=allow-ssh \ --rules=tcp:22
fw-allow-healthcheckルールを作成して Google Cloudヘルスチェックを許可します。gcloud compute firewall-rules create fw-allow-healthcheck \ --network=service-network \ --action=allow \ --direction=ingress \ --target-tags=allow-healthcheck \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
ロードバランサのバックエンド用の VM リソースを作成する
ロードバランサで使用する VM とインスタンス グループを作成します。
バックエンド VM を作成する
作成するサービスは、可用性を高めるために 2 つの VM(vm-1 と vm-2)で実行されます。VM は同じゾーンにありますが、本番環境では複数のゾーンを使用することをおすすめします。
次の手順では、VM の作成に加えて、次の処理も行います。
- ファイアウォール ルールでターゲットとして構成したネットワーク タグと、後で使用する追加のネットワーク タグ(
allow-nat)を使用するように VM を構成します。 Apache サービスをインストール、構成、起動します。
コンソール
Google Cloud コンソールで、[VM インスタンス] ページに移動します。
[インスタンスを作成] をクリックします。
[名前] に「
vm-1」と入力します。[リージョン] と [ゾーン] で、リージョンとそのリージョン内のゾーンを選択します。
ナビゲーション メニューで、[OS とストレージ] に移動します。
[オペレーティング システムとストレージ] ペインで、ブートディスクに [Debian GNU/Linux 12(bookworm)] が選択されていることを確認します。別の画像を選択する必要がある場合は、[変更] をクリックします。
ナビゲーション メニューで、[ネットワーキング] に移動します。
[ネットワーク タグ] に「
allow-ssh」、「allow-healthcheck」、「allow-nat」を入力します。[ネットワーク インターフェース] で、次のように選択します。
- [ネットワーク] で
service-networkを選択します。 - [サブネット] で
service-subnetを選択します。 - [IP スタックタイプ] で [IPv4(シングルスタック)] を選択します。
- [プライマリ内部 IPv4 アドレス] で [エフェメラル(自動)] を選択します。
- [外部 IPv4 アドレス] で [エフェメラル] を選択します。
- [ネットワーク] で
ナビゲーション メニューで、[詳細設定] に移動します。
[自動化] セクションの [起動スクリプト] フィールドに、次のスクリプトを入力します。
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed[作成] をクリックします。
これらの手順を繰り返して、
vm-1と同じリージョンとゾーンにvm-2という名前の別の VM を作成します。
gcloud
次のコマンドを実行して、2 つの VM を作成します。
gcloud compute instances create vm-1 \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-healthcheck,allow-nat \ --subnet=service-subnet \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'gcloud compute instances create vm-2 \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-healthcheck,allow-nati \ --subnet=service-subnet \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'ZONEは、使用するゾーンに置き換えます。
インスタンス グループの作成
ロードバランサ バックエンドで VM を使用するには、VM をインスタンス グループに追加する必要があります。
コンソール
Google Cloud コンソールで、[インスタンス グループ] ページに移動します。
[インスタンス グループを作成] をクリックします。
ナビゲーション パネルで [新しい非マネージド インスタンス グループ] をクリックします。
[名前] に「
ig-1」と入力します。[ロケーション] セクションで、VM と同じリージョンとゾーンを選択します。
[ネットワーク] で [
service-network] を選択します。[サブネットワーク] で [
service-subnet] を選択します。[VM インスタンス] セクションで、
vm-1とvm-2をインスタンス グループに追加します。[作成] をクリックします。
gcloud
非マネージド インスタンス グループを作成します。
gcloud compute instance-groups unmanaged create ig-1 \ --zone=ZONEZONEは、VM を含むゾーンに置き換えます。VM をインスタンス グループに追加します。
gcloud compute instance-groups unmanaged add-instances ig-1 \ --zone=ZONE \ --instances=vm-1,vm-2
ロードバランサ コンポーネントを構成する
ヘルスチェックとバックエンド サービスから開始して、内部パススルー ネットワーク ロードバランサのすべてのコンポーネントを構成し、次にフロントエンド コンポーネントを構成します。
ヘルスチェック。HTTP
200 OKステータス コードをチェックする HTTP ヘルスチェックを使用します。バックエンド サービス。内部ロードバランサを介して HTTP トラフィックを渡す必要があるため、UDP ではなく TCP を使用する必要があります。
転送ルール。単一の内部転送ルール
service-ruleを作成します。内部 IP アドレス。転送ルールを作成する際に、内部 IP アドレス
10.10.10.99を指定します。
コンソール
構成を開始する
Google Cloud コンソールで、[ロード バランシング] ページに移動します。
- [ロードバランサを作成] をクリックします。
- [ロードバランサの種類] で [ネットワーク ロードバランサ(TCP / UDP / SSL)] を選択し、[次へ] をクリックします。
- [プロキシまたはパススルー] で [パススルー ロードバランサ] を選択し、[次へ] をクリックします。
- [インターネット接続または内部] で [内部] を選択し、[次へ] をクリックします。
- [構成] をクリックします。
基本構成
[Create internal passthrough Network Load Balancer] ページで、次の情報を入力します。
- [ロードバランサの名前] に「
service-lb」と入力します。 - [リージョン] で、VM と同じリージョンを選択します。
- [ネットワーク] で
service-networkを選択します。
バックエンドを構成する
- [バックエンドの構成] をクリックします。
- [ヘルスチェック] リストで [ヘルスチェックを作成] をクリックし、次の情報を入力します。
- [名前:] に「
hc-http-80」と入力します。 - [プロトコル:] で [
HTTP] を選択します。 - [ポート:] に「
80」と入力します。 - [プロキシのプロトコル:] で [
NONE] を選択します。 - [リクエストパス:] に「
/」と入力します。
- [名前:] に「
- [作成] をクリックします。
- [バックエンド] の [新しいバックエンド] セクションで、[IPv4(シングルスタック)] を選択します。
- [インスタンス グループ] で、
ig-1インスタンス グループを選択し、[完了] をクリックします。 - 続行する前に、[バックエンドの構成] の隣に青いチェックマークがあることを確認します。
フロントエンドを構成する
- [フロントエンドの構成] をクリックします。
- [新しいフロントエンドの IP とポート] セクションで、次の操作を行います。
- [名前] に「
service-rule」と入力します。 - [サブネットワーク] で、[
service-subnet] を選択します。 - [内部 IP の目的] セクションの [IP アドレス] リストで、[IP アドレスを作成] を選択して、次の情報を入力します。
- [名前] に「
service-rule-ip」と入力します。 - [IP バージョン] で [IPv4] を選択します。
- [静的 IP アドレス] で、Let me choose を選択します。
- [カスタム IP アドレス] に「
10.10.10.99」と入力します。
- [名前] に「
- [予約] をクリックします。
- [ポート] で [単一] を選択し、[ポート番号] に
80と入力します。 - [完了] をクリックします。
- 続行する前に、[フロントエンドの構成] の隣に青いチェックマークがあることを確認します。
- [名前] に「
構成を確認する
- [確認と完了] をクリックします。
- ロードバランサの構成を確認します。
- [作成] をクリックします。
gcloud
新しいリージョン HTTP ヘルスチェックを作成して、ポート 80 で VM との HTTP 接続をテストします。
gcloud compute health-checks create http hc-http-80 \ --region=REGION \ --port=80REGIONは、バックエンド VM と同じリージョンに置き換えます。HTTP トラフィックのバックエンド サービスを作成します。
gcloud compute backend-services create service-lb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=REGION \ --health-checks=hc-http-80 \ --health-checks-region=REGIONREGIONは、バックエンド VM と同じリージョンに置き換えます。バックエンド サービスにインスタンス グループを追加します。
gcloud compute backend-services add-backend service-lb \ --region=REGION \ --instance-group=ig-1 \ --instance-group-zone=ZONE次のように置き換えます。
REGION: バックエンド VM と同じリージョン。ZONE: バックエンド VM と同じゾーン。
バックエンド サービスの転送ルールを作成します。
gcloud compute forwarding-rules create service-rule \ --region=REGION \ --load-balancing-scheme=internal \ --network=service-network \ --subnet=service-subnet \ --address=10.10.10.99 \ --ip-protocol=TCP \ --ports=80 \ --backend-service=service-lb \ --backend-service-region=REGIONREGIONは、バックエンド VM と同じリージョンに置き換えます。
ロードバランサへのアクセスをテストする
ロードバランサが機能していることをテストするには、テスト VM を作成し、そこからロードバランサにリクエストを送信します。
テスト用のクライアント VM を作成する
バックエンド(サーバー)VM と同じリージョンにクライアント VM を作成します。
コンソール
Google Cloud コンソールで、[VM インスタンス] ページに移動します。
[インスタンスを作成] をクリックします。
[名前] に「
producer-test」と入力します。[リージョン] で、バックエンド VM と同じリージョンを選択します。
[ゾーン] で、そのリージョンのゾーンを選択します。
[ネットワーキング] をクリックして次のフィールドを構成します。
- [ネットワーク タグ] に「
allow-ssh」と入力します。 - [ネットワーク インターフェース] で、次のように選択します。
- [ネットワーク] で [
service-network] を選択します。 - [サブネット] で、[
service-subnet] を選択します。
- [ネットワーク] で [
- [ネットワーク タグ] に「
[作成] をクリックします。
gcloud
gcloud compute instances create producer-test \
--zone=ZONE \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=allow-ssh \
--subnet=service-subnet
ZONE は、バックエンド VM と同じリージョンにあるゾーンに置き換えます。
接続をテストする
このテストでは、クライアント VM からロードバランサに接続します。想定される動作は、トラフィックがロードバランサのバックエンド VM に分散されることです。
- クライアント VM インスタンスに接続します。
gcloud compute ssh producer-test --zone=ZONE
ZONEは、クライアント VM のゾーンに置き換えます。 curlを使用して IP アドレスに接続するロードバランサへのウェブ リクエストを作成します。レスポンスが異なるバックエンド VM から返ってくることを確認するために、このリクエストを繰り返します。レスポンスを生成する VM の名前が、各バックエンド VM 上で、/var/www/html/index.htmlのコンテンツによる HTML レスポンスのテキストとして表示されます。たとえば、想定されるレスポンスはPage served from: vm-1やPage served from: vm-2のようになります。curl -s http://10.10.10.99