{GCP Cloud DNS}DNS ルーティング ポリシーとヘルスチェックを管理する

 

https://cloud.google.com/dns/docs/zones/manage-routing-policies#gcloud
https://www.topgate.co.jp/gcp26-domain-operation-by-cloud-dns
https://kinsta.com/jp/knowledgebase/flush-dns/

 

Cloud DNS でサポートされるルーティング ポリシーは次のとおりです。

重み付きラウンドロビン
位置情報
ジオフェンス
フェイルオーバー


下記2リージョンで重み付きラウンドロビン(比率8:2)

us-east1-b
us-west1-b

 


-- 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-northeast1 --quiet
gcloud config set compute/zone asia-northeast1-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-east1

gcloud compute networks subnets create subnet02 \
--network=vpc01 \
--range=10.1.11.0/24 \
--region=us-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-east1 \
--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'

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

 


gcloud compute instance-templates create template02 \
--region=us-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'

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


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


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

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


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

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

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


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


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

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

gcloud compute health-checks create http hc02 \
--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=hc02 \
--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-east1-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=us-west1-b \
--global


-- 7.4 URL マップの作成

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

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

 

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

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

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

gcloud compute target-http-proxies create proxy02 \
--url-map map02

 

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

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

gcloud compute forwarding-rules create rule02 \
--load-balancing-scheme=EXTERNAL \
--address=pip02 \
--global \
--target-http-proxy=proxy02 \
--ports=80


-- 9. 動作確認(DNS登録前)


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

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


while true;do curl -k http://192.0.2.1;curl -k http://192.0.2.2; sleep 1;done

 

 

-- 10. マネージド ゾーンを作成する

gcloud dns managed-zones create zone01 \
--description=zone01 \
--dns-name=www.example.com. \
--visibility=public

gcloud dns managed-zones list


ドメインレジストラでNSレコード追加

NS

www.example.com.

ns-cloud-x1.googledomains.com.
ns-cloud-x2.googledomains.com.
ns-cloud-x3.googledomains.com.
ns-cloud-x4.googledomains.com.

 


-- 11. DNS ルーティング ポリシーを作成する

gcloud dns record-sets create www.example.com. \
--ttl=10 \
--type=A \
--zone=zone01 \
--routing-policy-type=WRR \
--routing-policy-data=".8=192.0.2.1;.2=192.0.2.2"


gcloud dns record-sets list --zone=zone01


-- 12. 動作確認(DNS登録後)

while true;do nslookup www.example.com; sleep 1;done

-- DNSキャッシュクリア(mac)
sudo killall -HUP mDNSResponder

curl -k www.example.com


while true;do sudo killall -HUP mDNSResponder; curl -k www.example.com; sleep 1;done

 

 

-- 13. クリーンアップ

gcloud dns record-sets delete www.example.com. \
--type=A \
--zone=zone01 \
--quiet


gcloud dns managed-zones delete zone01 \
--quiet

 

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

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

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

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

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

gcloud compute url-maps delete map01 \
--quiet

gcloud compute url-maps delete map02 \
--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 health-checks delete hc02 \
--quiet


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

 

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

 


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


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

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

gcloud compute networks delete vpc01 \
--quiet

 

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