このガイドでは、リージョン バックエンド サービスを使用して、仮想マシン(VM)インスタンスごとに重み付けをした外部パススルー ネットワーク ロードバランサのデプロイメントの作成手順について説明します。
このチュートリアルでは、3 つの VM インスタンスを含むインスタンス グループを作成し、各インスタンスに重みを割り当てます。バックエンド インスタンスの重みを報告する HTTP ヘルスチェックを作成します。重み付けされたロード バランシングは、局所的なロードバランサ ポリシーに WEIGHTED_MAGLEV
が設定されているバックエンド サービスで有効になっています。
始める前に
- バックエンド サービスベースの外部パススルー ネットワーク ロードバランサの概要を確認します。
Google Cloud CLI をインストールします。ツールの完全な概要については、gcloud CLI の概要をご覧ください。ロード バランシングに関連するコマンドについては、API と gcloud CLI のリファレンスをご覧ください。
Google Cloud CLI を初めて実行する場合は、最初に
gcloud init
を実行して認証します。Compute API を有効にします。
gcloud services enable compute.googleapis.com
VPC ネットワーク、サブネット、ファイアウォール ルールを作成する
ロードバランサのバックエンド VM への接続を許可する VPC ネットワーク、サブネット、上り(内向き)許可ファイアウォール ルールを作成します。
VPC ネットワークとサブネットを作成します。
a. VPC ネットワークを作成するには、
gcloud compute networks create
コマンドを実行します。gcloud compute networks create NETWORK_NAME --subnet-mode custom
b. この例では、サブネットのプライマリ IPv4 アドレス範囲は
10.10.0.0/24
です。サブネットを作成するには、gcloud compute networks subnets create
コマンドを実行します。gcloud compute networks subnets create SUBNET_NAME \ --network=NETWORK_NAME \ --range=10.10.0.0/24 \ --region=us-central1
次のように置き換えます。
NETWORK_NAME
: 作成する VPC ネットワークの名前。SUBNET_NAME
: 作成するサブネットワークの名前。
上り(内向き)許可ファイアウォール ルールを作成して、宛先 TCP ポート 80 および 443 に送信されたパケットをバックエンド VM に配信できるようにします。この例では、ファイアウォール ルールによって任意の送信元 IP アドレスからの接続が許可されます。このファイアウォール ルールは、ネットワーク タグ
network-lb-tag
を持つ VM に適用されます。ファイアウォール ルールを作成するには、
gcloud compute firewall-rules create
コマンドを実行します。gcloud compute firewall-rules create FIREWALL_RULE_NAME \ --direction=INGRESS \ --priority=1000 \ --network=NETWORK_NAME \ --action=ALLOW \ --rules=tcp:80,tcp:443 \ --source-ranges=0.0.0.0/0 \ --target-tags=network-lb-tag
FIREWALL_RULE_NAME
は、作成するファイアウォール ルールの名前に置き換えます。
VM インスタンスを作成して重みを割り当てる
3 つの VM インスタンスを作成し、重みを割り当てます。
3 つのバックエンド VM インスタンスを構成し、HTTP レスポンスの
X-Load-Balancing-Endpoint-Weight
ヘッダーで重みを返します。このチュートリアルでは、1 つのバックエンド インスタンスが重み 0、次のバックエンド インスタンスが重み 100、3 番目のバックエンド インスタンスが重み 900 を報告するように構成します。インスタンスを作成するには、
gcloud compute instances create
コマンドを実行します。gcloud compute instances create instance-0 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-12 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=0,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-100 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-12 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=100,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
gcloud compute instances create instance-900 \ --zone=us-central1-a \ --tags=network-lb-tag \ --image-family=debian-12 \ --image-project=debian-cloud \ --subnet=SUBNET_NAME \ --metadata=load-balancing-weight=900,startup-script='#! /bin/bash apt-get update apt-get install apache2 -y ln -sr /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled/headers.load vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html lb_weight="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/attributes/load-balancing-weight)" echo "Header set X-Load-Balancing-Endpoint-Weight \"$lb_weight\"" | \ tee /etc/apache2/conf-enabled/headers.conf systemctl restart apache2'
インスタンス グループを作成する
このチュートリアルでは、3 つの VM インスタンス(instance-0
、instance-100
、instance-900
)を含む非マネージド インスタンス グループを作成する手順を説明します。
インスタンス グループを作成するには、
gcloud compute instance-groups unmanaged create
コマンドを実行します。gcloud compute instance-groups unmanaged create INSTANCE_GROUP \ --zone=us-central1-a
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP \ --zone=us-central1-a \ --instances=instance-0,instance-100,instance-900
INSTANCE_GROUP
は、作成するインスタンス グループの名前に置き換えます。
HTTP ヘルスチェックを作成する
このチュートリアルでは、HTTP ヘルスチェックを作成して、バックエンド VM の重みを含む HTTP レスポンスを読み取る手順を説明します。
HTTP ヘルスチェックを作成するには、
gcloud compute health-checks create
コマンドを実行します。gcloud compute health-checks create http HTTP_HEALTH_CHECK_NAME \ --region=us-central1
HTTP_HEALTH_CHECK_NAME
は、作成する HTTP ヘルスチェックの名前に置き換えます。
バックエンド サービスを作成する
次の例では、重み付きロード バランシングを使用するよう構成したリージョン外部バックエンド サービスの作成手順を説明します。
HTTP ヘルスチェックを使用してバックエンド サービスを作成し、局所的なロードバランサ ポリシーを
WEIGHTED_MAGLEV
に設定します。バックエンド サービスを作成するには、
gcloud compute backend-services create
コマンドを実行します。gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=external \ --protocol=tcp \ --region=us-central1 \ --health-checks=HTTP_HEALTH_CHECK_NAME \ --health-checks-region=us-central1 \ --locality-lb-policy=WEIGHTED_MAGLEV
BACKEND_SERVICE_NAME
は、作成するバックエンド サービスの名前に置き換えます。
バックエンド サービスにインスタンス グループを追加します。
インスタンス グループを追加するには、
gcloud compute backend-services add-backend
コマンドを実行します。gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=us-central1-a \ --region=us-central1
ロードバランサにリージョン外部 IP アドレスを予約します。
1 つ以上の IP アドレスを予約するには、
gcloud compute addresses create
コマンドを実行します。gcloud compute addresses create ADDRESS_NAME \ --region us-central1
ADDRESS_NAME
は、作成する IP アドレスの名前に置き換えます。compute addresses describe
コマンドを使用して、結果を表示します。予約済みの静的外部 IP アドレス(IP_ADDRESS
)をメモします。gcloud compute addresses describe ADDRESS_NAME
予約済みのリージョン外部 IP アドレス
IP_ADDRESS
を使用して転送ルールを作成します。転送ルールをバックエンド サービスに接続します。転送ルールを作成するには、
gcloud compute forwarding-rules create
コマンドを実行します。gcloud compute forwarding-rules create FORWARDING_RULE \ --region=us-central1 \ --ports=80 \ --address=IP_ADDRESS \ --backend-service=BACKEND_SERVICE_NAME
次のように置き換えます。
FORWARDING_RULE
: 作成する転送ルールの名前。IP_ADDRESS
: インスタンスに割り当てる IP アドレス。アドレス名ではなく、予約済みの静的外部 IP アドレスを使用してください。
バックエンド サービス API を使用してバックエンドの重みを確認する
バックエンドの重みが HTTP ヘルスチェックに正しく報告されていることを確認します。
バックエンド サービスからバックエンドの重み(とヘルス ステータス)を取得するには、
gcloud compute backend-services get-health
コマンドを実行します。gcloud compute backend-services get-health BACKEND_SERVICE_NAME \ --region=us-central1
次のような出力が表示されます。
backend: https://www.googleapis.com/compute/projects/project-name/{project}/zones/us-central1-a/instanceGroups/{instance-group-name} status: healthStatus: - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-0 ipAddress: 10.10.0.5 port: 80 weight: '0' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-100 ipAddress: 10.10.0.6 port: 80 weight: '100' - forwardingRule: https://www.googleapis.com/compute/projects/{project}/regions/us-central1/forwardingRules/{firewall-rule-name} forwardingRuleIp: 34.135.46.66 healthState: HEALTHY instance: https://www.googleapis.com/compute/projects/{project}/zones/us-central1-a/instances/instance-900 ipAddress: 10.10.0.7 port: 80 weight: '900' kind: compute#backendServiceGroupHealth