{GCP Cloud Load Balancing}マルチリージョンの外部 HTTPS ロードバランサへのリクエストの転送

 

https://cloud.google.com/load-balancing/docs/https/setting-up-https?hl=ja#gcloud-and-using-curl

/video で始まる URL パスを含むトラフィック -> us-central1-b
その他のトラフィック -> europe-west1-b

httpのみ実施


-- 1. 前作業

gcloud init
gcloud auth list

gcloud --version

gcloud projects create project01-9999999 \
--name="project01"

gcloud config list
gcloud config set project project01-9999999
gcloud config set compute/region asia-east1 --quiet
gcloud config set compute/zone asia-east1-a --quiet

gcloud beta billing accounts list
gcloud beta billing projects link project01-9999999 --billing-account=111111-111111-111111

gcloud services enable compute.googleapis.com --project project01-9999999

gcloud components update

 

-- 2. ネットワークとサブネットの構成

gcloud compute networks create vpc01 \
--subnet-mode=custom

gcloud compute networks subnets create subnet01 \
--network=vpc01 \
--range=10.1.10.0/24 \
--region=us-central1

gcloud compute networks subnets create subnet02 \
--network=vpc01 \
--range=10.1.11.0/24 \
--region=europe-west1


-- 3. ファイアウォール ルールの構成

 

gcloud compute firewall-rules create fw01 \
--network=vpc01 \
--action=allow \
--direction=ingress \
--target-tags=tag01 \
--source-ranges=130.211.0.0/22,35.191.0.0/16 \
--rules=tcp:80


-- 4. インスタンスの作成

gcloud compute instance-templates create template01 \
--region=us-central1 \
--network=vpc01 \
--subnet=subnet01 \
--tags=tag01 \
--image-family=debian-10 \
--image-project=debian-cloud \
--machine-type e2-micro \
--metadata=startup-script='#! /bin/bash
  sudo apt-get update
  sudo apt-get install apache2 -y
  vm_hostname="$(curl -H "Metadata-Flavor:Google" \
  http://metadata.google.internal/computeMetadata/v1/instance/name)"
  sudo echo "Page served from: $vm_hostname" | \
  tee /var/www/html/index.html
  sudo systemctl restart apache2
  sudo mkdir /var/www/html/video
  sudo cp /var/www/html/index.html /var/www/html/video/a.html'

gcloud compute instance-groups managed create ig01 \
--template=template01 \
--size=1 \
--zone=us-central1-b

 


gcloud compute instance-templates create template02 \
--region=europe-west1 \
--network=vpc01 \
--subnet=subnet02 \
--tags=tag01 \
--image-family=debian-10 \
--image-project=debian-cloud \
--machine-type e2-micro \
--metadata=startup-script='#! /bin/bash
  sudo apt-get update
  sudo apt-get install apache2 -y
  vm_hostname="$(curl -H "Metadata-Flavor:Google" \
  http://metadata.google.internal/computeMetadata/v1/instance/name)"
  sudo echo "Page served from: $vm_hostname" | \
  tee /var/www/html/index.html
  sudo systemctl restart apache2
  sudo mkdir /var/www/html/video
  sudo cp /var/www/html/index.html /var/www/html/video/a.html'

gcloud compute instance-groups managed create ig02 \
--template=template02 \
--size=1 \
--zone=europe-west1-b


-- 5. インスタンス グループへの名前付きポートの追加


gcloud compute instance-groups managed set-named-ports ig01 \
--named-ports http:80 \
--zone us-central1-b

gcloud compute instance-groups managed set-named-ports ig02 \
--named-ports http:80 \
--zone europe-west1-b


-- 6. 外部 IP アドレスの予約

gcloud compute addresses create pip01 \
--ip-version=IPV4 \
--network-tier=PREMIUM \
--global

 

-- 7. 負荷分散リソースの構成


-- 7.1 ヘルスチェックの作成

gcloud compute health-checks create http hc01 \
--port 80

-- 7.2 バックエンド サービスの作成

gcloud compute backend-services create backend01 \
--load-balancing-scheme=EXTERNAL \
--global-health-checks \
--protocol=HTTP \
--port-name=http \
--health-checks=hc01 \
--global

gcloud compute backend-services create backend02 \
--load-balancing-scheme=EXTERNAL \
--global-health-checks \
--protocol=HTTP \
--port-name=http \
--health-checks=hc01 \
--global

-- 7.3 インスタンス グループをバックエンドとしてバックエンド サービスに追加

gcloud compute backend-services add-backend backend01 \
--balancing-mode=UTILIZATION \
--max-utilization=0.8 \
--capacity-scaler=1 \
--instance-group=ig01 \
--instance-group-zone=us-central1-b \
--global

gcloud compute backend-services add-backend backend02 \
--balancing-mode=UTILIZATION \
--max-utilization=0.8 \
--capacity-scaler=1 \
--instance-group=ig02 \
--instance-group-zone=europe-west1-b \
--global


-- 7.4 URL マップの作成

gcloud compute url-maps create map01 \
--default-service backend02

gcloud compute url-maps add-path-matcher map01 \
--default-service backend02 \
--path-matcher-name pathmap \
--path-rules="/video=backend01,/video/*=backend01"


-- 8. HTTPフロントエンドの設定

-- 8.1 リクエストを URL マップに転送するターゲット HTTP プロキシを作成

gcloud compute target-http-proxies create proxy01 \
--url-map map01

 

-- 8.2 受信リクエストをプロキシに転送するグローバル転送ルールを作成

gcloud compute forwarding-rules create rule01 \
--load-balancing-scheme=EXTERNAL \
--address=pip01 \
--global \
--target-http-proxy=proxy01 \
--ports=80

 

 

-- 9. 動作確認


gcloud compute addresses describe pip01 \
--format="get(address)" \
--global

curl -k http://192.0.2.1
curl -k http://192.0.2.1/video/a.html

 

while true;do curl -k http://192.0.2.1/video/a.html; sleep 1;done

 

 

-- 10. クリーンアップ

gcloud compute forwarding-rules delete rule01 \
--global \
--quiet

gcloud compute addresses delete pip01 \
--global \
--quiet


gcloud compute target-http-proxies delete proxy01 \
--quiet

gcloud compute url-maps delete map01 \
--quiet


gcloud compute backend-services delete backend01 \
--global \
--quiet

gcloud compute backend-services delete backend02 \
--global \
--quiet


gcloud compute health-checks delete hc01 \
--quiet


gcloud compute instance-groups managed delete ig01 \
--zone=us-central1-b \
--quiet

 

gcloud compute instance-groups managed delete ig02 \
--zone=europe-west1-b \
--quiet

 


gcloud compute firewall-rules delete fw01 \
--quiet \
--quiet


gcloud compute networks subnets delete subnet01 \
--region=us-central1 \
--quiet

gcloud compute networks subnets delete subnet02 \
--region=europe-west1 \
--quiet

gcloud compute networks delete vpc01 \
--quiet

 

 

gcloud projects list
gcloud projects delete project01-9999999 \
--quiet