Private Service Connect durumu

1. Giriş

Bu Codelab, otomatik bölgesel yük devretme için Private Service Connect (PSC) durumunu ele alır. PSC sağlığı, gelişmiş hizmet esnekliği ve kullanılabilirliği sağlayan bir ağ özelliğidir.

PSC durumu, hizmet üreticilerinin özelleştirilmiş durum politikaları (hangi durumun sağlıklı veya sağlıksız bir hizmeti tanımladığı) belirlemesine ve bu sinyalleri, PSC arka uçlarıyla hizmete bağlanan hizmet tüketicilerine otomatik olarak yaymasına olanak tanır. Bu özellik, özellikle bölgeler arası otomatik yük devretmeyi desteklemek için tasarlanmıştır. Bölgesel bir üretici hizmetinin durumu kötüleşirse tüketici yük dengeleyici, trafiği bu bölgeye yönlendirmeyi otomatik olarak durdurur ve trafiği başka bir bölgedeki sağlıklı bir hizmete yönlendirir.

Aykırı değer algılama gibi bölgeler arası yük devretme için kullanılan önceki yöntemlere kıyasla PSC durumu, doğrudan üretici hizmeti arka uçlarının (VM örneği grupları veya ağ uç noktaları) toplu durumuna dayandığı için daha doğru bir yük devretme sinyali sunar. Üreticiler kendi durum mantıklarını tanımlayabilir. Böylece üretici, yalnızca hizmet gerçekten gerekli durum ölçütlerini karşıladığında trafik alır.

Öğrenecekleriniz

  • PSC durumunun bileşenleri ve üretici hizmetinin durumunu belirlemek için birlikte nasıl çalıştıkları
  • gcloud komutlarını kullanarak bir üretici hizmeti için PSC sağlık durumunu uygulama
  • Üretici PSC durum politikasındaki durum sinyallerini kullanmak için bölgeler arası PSC tüketici erişimi yük dengeleyicisinin yapılandırılması
  • Hizmet arızası senaryolarını test etme ve bölgeler arası otomatik yük devretmeyi doğrulama

İhtiyacınız olanlar

  • Google Cloud projesi
  • Önceden tanımlanmış roles/compute.admin rolüne veya roles/admin gibi geniş kapsamlı bir temel role ya da eski roles/owner rolüne verilen IAM izinleri
  • Google Cloud ağ kavramları ve Google Cloud KSA kullanımı hakkında bilgi sahibi olma

2. Kavramlar

PSC ağ iletişimi

Bu Codelab ağ topolojisi, iki etkin Google Cloud bölgesinde bir tüketici ve bir üretici VPC ağı içerir.

Tüketici tarafında, PSC ağ uç noktası grubu (NEG) arka uçlarıyla bölgeler arası dahili uygulama yük dengeleyici üzerinden üretici hizmetine erişmek için kullanılan bölgesel alt ağlar ve istemci sanal makine örnekleri bulunur. Küresel (bölgeler arası) istemci girişi için bölgesel IP adresleriyle iki bölgesel yük dengeleyici iletim kuralı vardır. Arka uç hizmeti, farklı bölgelerdeki NEG'leri destekleyen küresel bir kaynaktır. Yük devretme senaryosunda, bölgesel ön uç iletim kurallarından birine bağlanan bir istemci, sağlıklı bir genel arka uca yönlendirilebilir.

figure1

Şekil 1. Codelab ağ topolojisi

Üretici tarafında, bölgesel bir PSC hizmet eki kaynağı aracılığıyla bir hizmeti kullanıma sunan bölgesel dahili geçişli ağ yük dengeleyicileri olan bölgesel alt ağlar bulunur. Arka uç hizmetleri bölgesel yönetilen örnek grupları (MIG'ler) içerir ve http istekleri kontrol edilip 200 (OK) yanıtları doğrulanarak durum denetimi yapılır.

Hangi yük dengeleyicilerin PSC durumunu desteklediğini görmek için üretici yapılandırması ile ilgili Private Service Connect uyumluluğu hakkındaki en son belgelere bakın.

Hizmet durumu

Yük dengeleyici oluşturulurken yapılandırılan üretici arka uç hizmeti durum denetimi, PSC durumu özelliği için kaynak sinyal görevi görür. Sağlık kaynağı kaynağı, tek bir arka uç hizmetinin sağlık durumunu belirlemek için bu sinyali sağlık toplama politikası kaynağında tanımlanan ek kısıtlamalarla birlikte kullanır.

Varsayılan olarak, aşağıdaki kısıtlamaların her ikisi de karşılandığında bir hizmetin sağlıklı olduğu kabul edilir:

  • Arka uçların en az x'ı sağlıklı olmalıdır (varsayılan değer 60).
  • Minimum y sayıda arka ucun durumu iyi olmalıdır (varsayılan değer 1).

Bileşik durum denetimi, tüm bölgesel üretici hizmetinin genel durumunu belirlemek için tüm arka uç hizmetlerinin tüm durum kaynaklarını referans alır. Bu laboratuvarda, her bölgesel üretici hizmetinin yalnızca bir arka uç hizmeti durumu kaynağı vardır ve bu kaynak, tek bir bileşik durum kontrolünde toplanır.

figure2

Şekil 2. PSC sağlık kaynağı modeli

Bileşik durum denetimi kaynak tanımı, üretici hizmeti yük dengeleyicisinin iletme kuralını da ifade eder. Tüketici erişimi yük dengeleyici arka uç PSC NEG, üretici PSC hizmet eki ve üretici yük dengeleyici yönlendirme kuralına mantıksal olarak bağlıdır. Bu işlem, tüketici erişimi yük dengeleyicisini üretici hizmetinin bileşik durum denetimi durumuna bağlar. Bölgesel üretici hizmetinin genel hizmet durumu daha sonra uygun arka uç seçimi yapmak için tüketici yük dengeleyicisine yayılır.

3. Proje ayarlama

Projenize erişme

Bu Codelab, tek bir Google Cloud projesi kullanacak şekilde yazılmıştır. Yapılandırma adımlarında gcloud ve Linux kabuk komutları kullanılır.

NOT: Üretim dağıtımında, PSC tüketici kaynakları ve üretici hizmetleri genellikle farklı projelerde bulunur.

Aşağıdaki komutu kullanarak Google Cloud projenizin komut satırına erişerek başlayın:

Proje kimliğinizi ayarlama

gcloud config set project YOUR_PROJECT_ID_HERE

Kabuk ortamı değişkenlerini ayarlama

export PROJECT_ID=$(gcloud config list --format="value(core.project)")
export REGION_1="us-west1"
export ZONE_1="us-west1-c"
export REGION_2="us-east1"
export ZONE_2="us-east1-c"
echo ${PROJECT_ID}
echo ${REGION_1}
echo ${ZONE_1}
echo ${REGION_2}
echo ${ZONE_2}

API hizmetlerini etkinleştirme

gcloud services enable compute.googleapis.com
gcloud services enable dns.googleapis.com

4. Üretici hizmeti

Ortak kaynaklar oluşturma

Ağ oluştur

gcloud compute networks create vnet-producer --subnet-mode=custom

Alt ağ oluşturma

# create subnet for service workload in region 1
gcloud compute networks subnets create subnet-foo \
  --network=vnet-producer \
  --region=${REGION_1} \
  --range=172.16.1.0/24 \
  --enable-private-ip-google-access

# create subnet for psc nat in region 1
gcloud compute networks subnets create subnet-foo-pscnat \
  --network=vnet-producer \
  --region=${REGION_1} \
  --range=192.168.1.0/29 \
  --purpose=PRIVATE_SERVICE_CONNECT
# create subnet for service workload in region 2
gcloud compute networks subnets create subnet-bar \
  --network=vnet-producer \
  --region=${REGION_2} \
  --range=172.16.2.0/24 \
  --enable-private-ip-google-access

# create subnet for psc nat in region 2
gcloud compute networks subnets create subnet-bar-pscnat \
  --network=vnet-producer \
  --region=${REGION_2} \
  --range=192.168.2.0/29 \
  --purpose=PRIVATE_SERVICE_CONNECT

Güvenlik duvarı bileşenleri oluşturma

VM kaynaklarına trafiğe izin vermek için güvenlik duvarı kuralları gerekir (varsayılan güvenlik duvarı kuralları, girişi reddetmek ve çıkışa izin vermektir). Politikalar, ağ güvenlik duvarı politikası kaynağı oluşturarak, politikaya kurallar oluşturup ekleyerek ve ardından politikayı bir VPC ağıyla ilişkilendirerek güvenlik duvarı kurallarını dağıtmanın tercih edilen yoludur.

# create fw policy
gcloud compute network-firewall-policies create fw-policy-producer --global
# create fw policy rules
gcloud compute network-firewall-policies rules create 1001 \
  --description="allow iap for ssh" \
  --firewall-policy=fw-policy-producer \
  --global-firewall-policy \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp:22  \
  --src-ip-ranges=35.235.240.0/20

gcloud compute network-firewall-policies rules create 1002 \
  --description="allow health checks" \
  --firewall-policy=fw-policy-producer \
  --global-firewall-policy \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp,udp,icmp  \
  --src-ip-ranges=130.211.0.0/22,35.191.0.0/16

gcloud compute network-firewall-policies rules create 1003 \
  --description="allow psc nat clients" \
  --firewall-policy=fw-policy-producer \
  --global-firewall-policy \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp:80  \
  --src-ip-ranges=192.168.1.0/29,192.168.2.0/29
# associate fw policy to vnet
gcloud compute network-firewall-policies associations create \
  --firewall-policy=fw-policy-producer \
  --network=vnet-producer \
  --name=fw-policy-association-producer \
  --global-firewall-policy

Cloud Router ve NAT ağ geçitleri oluşturma

# create routers for nat in each region
gcloud compute routers create cr-nat-foo \
  --network=vnet-producer \
  --asn=16550 \
  --region=${REGION_1}

gcloud compute routers create cr-nat-bar \
  --network=vnet-producer \
  --asn=16550 \
  --region=${REGION_2}
# create nat gateways in each region
gcloud compute routers nats create natgw-foo \
  --router=cr-nat-foo \
  --region=${REGION_1} \
  --auto-allocate-nat-external-ips \
  --nat-all-subnet-ip-ranges

gcloud compute routers nats create natgw-bar \
  --router=cr-nat-bar \
  --region=${REGION_2} \
  --auto-allocate-nat-external-ips \
  --nat-all-subnet-ip-ranges

HTTP sunucusu içeren bir sanal makine başlangıç yapılandırması oluşturma

cat > vm-server-startup.sh << 'EOF'
#! /bin/bash
apt-get update
apt-get install apache2 -y
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone)"
echo "Page served from: $vm_hostname in zone $vm_zone" | \
tee /var/www/html/index.html
systemctl restart apache2
EOF

1. bölgede hizmeti foo ayarlayın

Hizmet işlem birimi oluşturma

# create managed instance group template
gcloud compute instance-templates create mig-template-foo \
  --machine-type=e2-micro \
  --network=vnet-producer \
  --region=${REGION_1} \
  --subnet=subnet-foo \
  --no-address \
  --shielded-secure-boot \
  --metadata-from-file=startup-script=vm-server-startup.sh
# create regional managed instance group
gcloud compute instance-groups managed create mig-foo \
  --region=${REGION_1} \
  --size=2 \
  --template=mig-template-foo \
  --base-instance-name=service-foo

Hizmet yük dengeleyici bileşenleri oluşturma

# create lb health check
gcloud compute health-checks create http hc-foo-http \
  --region=${REGION_1} \
  --port=80 \
  --enable-logging
# create backend service
gcloud compute backend-services create ilb-foo \
  --load-balancing-scheme=INTERNAL \
  --protocol=tcp \
  --region=${REGION_1} \
  --health-checks=hc-foo-http \
  --health-checks-region=${REGION_1}

# add managed instance group to backend service
gcloud compute backend-services add-backend ilb-foo \
  --instance-group=mig-foo \
  --instance-group-region=${REGION_1} \
  --region=${REGION_1}
# create forwarding rule
gcloud compute forwarding-rules create fr-foo \
  --region=${REGION_1} \
  --load-balancing-scheme=INTERNAL \
  --network=vnet-producer \
  --subnet=subnet-foo \
  --address=172.16.1.99 \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=ilb-foo \
  --backend-service-region=${REGION_1} \
  --allow-global-access

PSC hizmetini yayınlama

# create psc service attachment
gcloud compute service-attachments create psc-sa-foo \
  --region=${REGION_1} \
  --target-service=projects/${PROJECT_ID}/regions/${REGION_1}/forwardingRules/fr-foo \
  --connection-preference=ACCEPT_AUTOMATIC \
  --nat-subnets=subnet-foo-pscnat

2. bölgede hizmet bar'yi ayarlayın

Hizmet işlem birimi oluşturma

# create managed instance group template
gcloud compute instance-templates create mig-template-bar \
  --machine-type=e2-micro \
  --network=vnet-producer \
  --region=${REGION_2} \
  --subnet=subnet-bar \
  --no-address \
  --shielded-secure-boot \
  --metadata-from-file=startup-script=vm-server-startup.sh
# create regional managed instance group
gcloud compute instance-groups managed create mig-bar \
  --region=${REGION_2} \
  --size=2 \
  --template=mig-template-bar \
  --base-instance-name=service-bar

Hizmet yük dengeleyici bileşenleri oluşturma

# create lb health check
gcloud compute health-checks create http hc-bar-http \
  --region=${REGION_2} \
  --port=80 \
  --enable-logging
# create backend service
gcloud compute backend-services create ilb-bar \
  --load-balancing-scheme=INTERNAL \
  --protocol=tcp \
  --region=${REGION_2} \
  --health-checks=hc-bar-http \
  --health-checks-region=${REGION_2}

# add managed instance group to backend service
gcloud compute backend-services add-backend ilb-bar \
  --instance-group=mig-bar \
  --instance-group-region=${REGION_2} \
  --region=${REGION_2}
# create forwarding rule
gcloud compute forwarding-rules create fr-bar \
  --region=${REGION_2} \
  --load-balancing-scheme=INTERNAL \
  --network=vnet-producer \
  --subnet=subnet-bar \
  --address=172.16.2.99 \
  --ip-protocol=TCP \
  --ports=80 \
  --backend-service=ilb-bar \
  --backend-service-region=${REGION_2} \
  --allow-global-access

PSC hizmetini yayınlama

# create psc service attachment
gcloud compute service-attachments create psc-sa-bar \
  --region=${REGION_2} \
  --target-service=projects/${PROJECT_ID}/regions/${REGION_2}/forwardingRules/fr-bar \
  --connection-preference=ACCEPT_AUTOMATIC \
  --nat-subnets=subnet-bar-pscnat

5. Tüketici erişimi

Müşteri kaynaklarını ayarlama

Ağ bileşenleri oluşturma

# create vpc network
gcloud compute networks create vnet-consumer --subnet-mode=custom
# create client subnet in each region
gcloud compute networks subnets create subnet-client-1 \
  --network=vnet-consumer \
  --region=${REGION_1} \
  --range=10.10.1.0/24 \
  --enable-private-ip-google-access

gcloud compute networks subnets create subnet-client-2 \
  --network=vnet-consumer \
  --region=${REGION_2} \
  --range=10.10.2.0/24 \
  --enable-private-ip-google-access

Tüketici uygulaması (proxy tabanlı) yük dengeleyicisi için yalnızca proxy alt ağları gerekir. Bu alt ağlar, arka uçlara trafik gönderirken proxy tabanlı yük dengeleyiciler tarafından dahili kaynak adresleri olarak kullanılan bir IP adresi havuzu sağlar.

# create proxy subnet in each region
gcloud compute networks subnets create subnet-proxy-1 \
  --purpose=GLOBAL_MANAGED_PROXY \
  --role=ACTIVE \
  --network=vnet-consumer \
  --region=${REGION_1} \
  --range=10.10.128.0/23

gcloud compute networks subnets create subnet-proxy-2 \
  --purpose=GLOBAL_MANAGED_PROXY \
  --role=ACTIVE \
  --network=vnet-consumer \
  --region=${REGION_2} \
  --range=10.10.130.0/23

Güvenlik duvarı bileşenleri oluşturma

# create fw policy
gcloud compute network-firewall-policies create fw-policy-consumer --global
# create fw policy rules
gcloud compute network-firewall-policies rules create 1001 \
  --description="allow iap for ssh" \
  --firewall-policy=fw-policy-consumer \
  --global-firewall-policy \
  --action=allow \
  --direction=INGRESS \
  --layer4-configs=tcp:22  \
  --src-ip-ranges=35.235.240.0/20
# associate fw policy to vnet
gcloud compute network-firewall-policies associations create \
  --firewall-policy=fw-policy-consumer \
  --network=vnet-consumer \
  --name=fw-policy-association-consumer \
  --global-firewall-policy

Yük dengeleyici bileşenleri oluşturma

# create psc network endpoint group per region
gcloud compute network-endpoint-groups create neg-foo \
  --network-endpoint-type=private-service-connect \
  --psc-target-service=projects/${PROJECT_ID}/regions/${REGION_1}/serviceAttachments/psc-sa-foo \
  --region=${REGION_1} \
  --network=vnet-consumer \
  --subnet=subnet-client-1

gcloud compute network-endpoint-groups create neg-bar \
  --network-endpoint-type=private-service-connect \
  --psc-target-service=projects/${PROJECT_ID}/regions/${REGION_2}/serviceAttachments/psc-sa-bar \
  --region=${REGION_2} \
  --network=vnet-consumer \
  --subnet=subnet-client-2
# verify psc connections
gcloud compute network-endpoint-groups list --format="value(selfLink, pscData.pscConnectionStatus)"
# create global backend service
gcloud compute backend-services create bes-foobar \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --protocol=HTTP \
  --global
# add negs to backend service
gcloud compute backend-services add-backend bes-foobar \
  --network-endpoint-group=neg-foo \
  --network-endpoint-group-region=${REGION_1} \
  --global

gcloud compute backend-services add-backend bes-foobar \
  --network-endpoint-group=neg-bar \
  --network-endpoint-group-region=${REGION_2} \
  --global
# create global url map
gcloud compute url-maps create ilb-foobar \
  --default-service=bes-foobar \
  --global
# create global target proxy
gcloud compute target-http-proxies create proxy-foobar \
  --url-map=ilb-foobar \
  --global
# create global forwarding rule for region 1
gcloud compute forwarding-rules create fr-foobar-1 \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=vnet-consumer \
  --subnet=subnet-client-1 \
  --subnet-region=${REGION_1} \
  --address=10.10.1.99 \
  --ports=80 \
  --target-http-proxy=proxy-foobar \
  --global
# create global forwarding rule for region 2
gcloud compute forwarding-rules create fr-foobar-2 \
  --load-balancing-scheme=INTERNAL_MANAGED \
  --network=vnet-consumer \
  --subnet=subnet-client-2 \
  --subnet-region=${REGION_2} \
  --address=10.10.2.99 \
  --ports=80 \
  --target-http-proxy=proxy-foobar \
  --global

DNS kayıtları oluşturma

# create dns zone
gcloud dns managed-zones create zone-foobar \
  --description="private zone for foobar" \
  --dns-name=foobar.com \
  --networks=vnet-consumer \
  --visibility=private
# create geo dns record
gcloud dns record-sets create www.foobar.com \
  --zone=zone-foobar \
  --type=A \
  --ttl=300 \
  --routing-policy-type=GEO \
  --routing-policy-item="location=${REGION_1},rrdatas=10.10.1.99" \
  --routing-policy-item="location=${REGION_2},rrdatas=10.10.2.99"

İşlem kaynakları oluşturma

# create client vm in region 1
gcloud compute instances create client-1 \
  --machine-type=e2-micro \
  --zone=${ZONE_1} \
  --subnet=subnet-client-1 \
  --no-address \
  --shielded-secure-boot
# create client vm in region 2
gcloud compute instances create client-2 \
  --machine-type=e2-micro \
  --zone=${ZONE_2} \
  --subnet=subnet-client-2 \
  --no-address \
  --shielded-secure-boot

Hizmet temel çizgisini test etme

1. bölgedeki istemci sanal makinesine SSH ile bağlanma

gcloud compute ssh client-1 --zone=${ZONE_1}
# send request to service using hostname
curl -v www.foobar.com
# send request to load balancer forwarding rule region 1
curl 10.10.1.99
# send request to load balancer forwarding rule region 2
curl 10.10.2.99
# exit vm ssh
exit

İsteğe bağlı: Bölge 2'deki istemci sanal makinesinde aynı testleri deneyin: gcloud compute ssh client-2 --zone=${ZONE_2}

ÖNEMLİ NOKTA: region-x içindeki bir yönlendirme kuralına giren istemci istekleri için normal yük dengeleyici davranışı, aynı region-x içindeki arka uçları tercih etmektir. Tüm arka uç kaynaklarının durumu iyi ise en düşük gecikmeye sahip bölge kazanır. Global arka uçlar, uygun durum sinyaliyle diğer bölgeye yük devretme gerçekleştirir.

Ancak gerçek üretici hizmeti kaynakları, üretici VPC ağındaki üretici yük dengeleyicinin arkasında olduğundan bu sağlık sinyalleri daha önce tüketici yük dengeleyici için opak durumdaydı. Bu nedenle tüketici tarafı, bu tür arka uç yük devretme kararlarını veremiyordu. PSC Health, üretici tarafındaki hizmet sağlığı bilgilerini tüketici tarafına yayarak bu sorunu çözer.

6. Sağlıkla ilgili kaynaklar

PSC Health kaynakları, bölgesel hizmetin genel durumunu temsil etmek için üretici tarafından yapılandırılır. Durum politikası, hizmet üreticisinin işlevsel bir hizmet düzeyini korumak için uygun olarak tanımladığı şeye dayanır. Eşikler, üretici tarafından tanımlanan koşullar artık karşılanmadığında tüketicileri yük devretme konusunda bilgilendirmek için ayarlanır.

1. bölgede hizmet sağlığını foo ayarlayın

Sağlık toplama politikası oluşturma

gcloud beta compute health-aggregation-policies create foo-health-policy \
  --region=${REGION_1} \
  --healthy-percent-threshold=60 \
  --min-healthy-threshold=1

Sağlık kaynağı oluşturma

gcloud beta compute health-sources create foo-health-source \
  --region=${REGION_1} \
  --source-type=BACKEND_SERVICE \
  --sources=ilb-foo \
  --health-aggregation-policy=foo-health-policy

Bileşik durum denetimi oluşturma

gcloud beta compute composite-health-checks create foo-health-composite \
  --region=${REGION_1} \
  --health-sources=foo-health-source \
  --health-destination=projects/${PROJECT_ID}/regions/${REGION_1}/forwardingRules/fr-foo

Hizmet foo sağlık yapılandırmasını doğrulama

Sağlık kaynağı yapılandırmaları, bölge başına liste (ve açıklama) komutlarıyla görüntülenebilir.

# show health aggregation policies
gcloud beta compute health-aggregation-policies list --regions=${REGION_1}

# show health sources
gcloud beta compute health-sources list --regions=${REGION_1}

# show composite health checks
gcloud beta compute composite-health-checks list --regions=${REGION_1}

2. bölgede hizmet durumu bar özelliğini ayarlayın

Sağlık toplama politikası oluşturma

gcloud beta compute health-aggregation-policies create bar-health-policy \
  --region=${REGION_2} \
  --healthy-percent-threshold=60 \
  --min-healthy-threshold=1

Sağlık kaynağı oluşturma

gcloud beta compute health-sources create bar-health-source \
  --region=${REGION_2} \
  --source-type=BACKEND_SERVICE \
  --sources=ilb-bar \
  --health-aggregation-policy=bar-health-policy

Bileşik durum denetimi oluşturma

gcloud beta compute composite-health-checks create bar-health-composite \
  --region=${REGION_2} \
  --health-sources=bar-health-source \
  --health-destination=projects/${PROJECT_ID}/regions/${REGION_2}/forwardingRules/fr-bar

Hizmet bar sağlık yapılandırmasını doğrulama

# show health aggregation policies
gcloud beta compute health-aggregation-policies list --regions=${REGION_2}

# show health sources
gcloud beta compute health-sources list --regions=${REGION_2}

# show composite health checks
gcloud beta compute composite-health-checks list --regions=${REGION_2}

Yapılandırma bölümünü tamamladık. Şimdi test aşamasına geçiyoruz.

7. Yük devretme testi

Hizmet foo bölgesi 1'deki kötü durum senaryosu

Bu senaryoda, iki sanal makine örneğinden birindeki web sunucusu durdurularak 1. bölgedeki PSC üretici hizmetinin foo arızalanması simüle edilir.

Sunucu sanal makinesi ayrıntılarını alma

# set env var for a foo service vm name
export FOO_FAIL_NAME=$(gcloud compute instance-groups managed list-instances mig-foo \
  --limit=1 \
  --region=${REGION_1} \
  --format="value(name)")
echo ${FOO_FAIL_NAME}
# set env var for a foo service zone
export FOO_FAIL_ZONE=$(gcloud compute instance-groups managed list-instances mig-foo \
  --limit=1 \
  --region=${REGION_1} \
  --format="value(ZONE)")
echo ${FOO_FAIL_ZONE}

Sunucu sanal makinesine SSH ile bağlanın ve http sunucusunu durdurun

gcloud compute ssh ${FOO_FAIL_NAME} --zone=${FOO_FAIL_ZONE}
# stop apache http server to fail service
sudo systemctl stop apache2
# verify service dead
sudo systemctl status apache2 | grep Active:
# exit vm ssh
exit

Bölgesel hizmetin durumunun kötü olduğunu doğrulama

# check health state of backend service
gcloud compute backend-services get-health ilb-foo --region=${REGION_1}

Çıkış şuna benzer şekilde görünmelidir:

backend: .../regions/<REGION_1>/instanceGroups/mig-foo
status:
  healthStatus:
  -   forwardingRule: .../regions/<REGION_1>/forwardingRules/fr-foo
    forwardingRuleIp: 172.16.1.99
    healthState: UNHEALTHY
    instance: .../zones/<ZONE_1x>/instances/<FOO_FAIL_NAME>
    ipAddress: <FOO_FAIL_IP>
    port: 80
  -   forwardingRule: .../regions/<REGION_1>/forwardingRules/fr-foo
    forwardingRuleIp: 172.16.1.99
    healthState: HEALTHY
    instance: .../zones/<ZONE_1y>/instances/<FOO_OTHER_NAME>
    ipAddress: <FOO_OTHER_IP>
    port: 80
  kind: compute#backendServiceGroupHealth

1. bölgedeki istemci sanal makinesine SSH ile bağlanma ve yük devretmeyi test etme

gcloud compute ssh client-1 --zone=${ZONE_1}
# send request to service using hostname
curl -v www.foobar.com
# curl to ilb vip in region 1
curl 10.10.1.99
# curl to ilb vip in region 2
curl 10.10.2.99

PSC durumu, tüketici yük dengeleyiciyi güncelledi ve 1. bölgedeki sağlıksız arka uç hizmetinden kaçınması için yönlendirdi. Bunun yerine, trafiği 2. bölgedeki sağlıklı hizmete bar yönlendirmiştir.

# exit client vm ssh
exit

Sunucu sanal makinesine SSH ile bağlanın ve http sunucusunu yeniden başlatın.

# ssh to foo service vm
gcloud compute ssh ${FOO_FAIL_NAME} --zone=${FOO_FAIL_ZONE}
# start apache http server to return service to healthy
sudo systemctl start apache2
# verify service running
sudo systemctl status apache2 | grep Active:
# exit vm ssh
exit

Sağlık politikasını değiştirme

Üreticiler, hizmet durumu politikalarını farklı ölçütlere göre ayarlayabilir. Sağlık toplama politikası kaynağı, farklı sağlık kaynaklarında (arka uç hizmetleri) sağlıklı bir durumu korumak için gereken minimum eşikleri belirtir.

bar hizmet durumu toplama politikasını güncelleme

gcloud beta compute health-aggregation-policies update bar-health-policy \
  --region=${REGION_2} \
  --description="min 40% threshold" \
  --healthy-percent-threshold=40 \
  --min-healthy-threshold=2
# verify new policy is applied
gcloud beta compute health-aggregation-policies list --regions=${REGION_2}

Bu üretici sağlık politikası değişikliğiyle aşağıdakiler sağlanır:

  1. Minimum sağlıklı eşik yüzdesini% 60'tan %40'a düşürür. Artık tek bir sanal makine örneği hatası, --healthy-percent-threshold'ye göre sağlıksız bir durumu tetiklemeyecek (hata durumu% 50 olacak ve sağlıklı olması için yalnızca% 40 gerekecek).
  2. Arka uçların minimum sağlıklı sayısını 1'den 2 sanal makine örneğine çıkarır. Artık tek bir sanal makine örneği hatası --min-healthy-threshold'ye göre durumu kötü olarak işaretlenir (hata durumu 1 olur ancak sağlıklı olması için 2 olması gerekir).

Hizmet bar bölgesi 2'deki sağlıksız senaryo

Bu senaryoda, iki sanal makine örneğinden birindeki web sunucusu durdurularak 2. bölgedeki PSC üretici hizmetinin bar arızalanması simüle edilir.

Sunucu sanal makinesi ayrıntılarını alma

# set env var for a bar service vm name
export BAR_FAIL_NAME=$(gcloud compute instance-groups managed list-instances mig-bar \
  --limit=1 \
  --region=${REGION_2} \
  --format="value(name)")
echo ${BAR_FAIL_NAME}
# set env var for a bar service zone
export BAR_FAIL_ZONE=$(gcloud compute instance-groups managed list-instances mig-bar \
  --limit=1 \
  --region=${REGION_2} \
  --format="value(ZONE)")
echo ${BAR_FAIL_ZONE}

Sunucu sanal makinesine SSH ile bağlanın ve http sunucusunu durdurun

gcloud compute ssh ${BAR_FAIL_NAME} --zone=${BAR_FAIL_ZONE}
# stop apache http server to fail service
sudo systemctl stop apache2
# verify service dead
sudo systemctl status apache2 | grep Active:
# exit vm ssh
exit

Bölgesel hizmetin durumunun kötü olduğunu doğrulama

# check health state of backend service
gcloud compute backend-services get-health ilb-bar --region=${REGION_2}

Çıkış şuna benzer şekilde görünmelidir:

backend: .../regions/<REGION_2>/instanceGroups/mig-bar
status:
  healthStatus:
  -   forwardingRule: .../regions/<REGION_2>/forwardingRules/fr-bar
    forwardingRuleIp: 172.16.2.99
    healthState: UNHEALTHY
    instance: .../zones/<ZONE_2x>/instances/<BAR_FAIL_NAME>
    ipAddress: <BAR_FAIL_IP>
    port: 80
  -   forwardingRule: .../regions/<REGION_2>/forwardingRules/fr-bar
    forwardingRuleIp: 172.16.2.99
    healthState: HEALTHY
    instance: .../zones/<ZONE_2y>/instances/<BAR_OTHER_NAME>
    ipAddress: <BAR_OTHER_IP>
    port: 80
  kind: compute#backendServiceGroupHealth

2. bölgedeki istemci sanal makinesine SSH ile bağlanma ve yük devretmeyi test etme

gcloud compute ssh client-2 --zone=${ZONE_2}
# send request to service using hostname
curl -v www.foobar.com
# curl to ilb vip in region 1
curl 10.10.1.99
# curl to ilb vip in region 2
curl 10.10.2.99

PSC Health, tüketici yük dengeleyicisini güncelledi ve 2. bölgedeki sağlıksız arka uç hizmetinden kaçınacak şekilde yönlendirdi. Bunun yerine, 1. bölgedeki sağlıklı hizmete foo trafik yönlendirilmiştir.

Tüketici yük dengeleyicinin tüm üretici hizmetlerini sağlıksız olarak gördüğü bir durumda, yük dengeleyici sağlıklı bir örneğe yük devretme işlemi yapamaz. Beklenen davranış, yük dengeleyicinin trafiği durumu kötü olan tüm arka uçlara dağıtmasıdır (açık yük devretme).

# exit client vm ssh
exit

Test bölümü sona erdi. Şimdi temizlik zamanı.

8. Temizleme

# delete health resources
gcloud -q beta compute composite-health-checks delete foo-health-composite --region=${REGION_1}

gcloud -q beta compute health-sources delete foo-health-source --region=${REGION_1}

gcloud -q beta compute health-aggregation-policies delete foo-health-policy --region=${REGION_1}

gcloud -q beta compute composite-health-checks delete bar-health-composite --region=${REGION_2}

gcloud -q beta compute health-sources delete bar-health-source --region=${REGION_2}

gcloud -q beta compute health-aggregation-policies delete bar-health-policy --region=${REGION_2}
# delete consumer compute and load balancer resources
gcloud -q compute instances delete client-2 --zone=${ZONE_2}

gcloud -q compute instances delete client-1 --zone=${ZONE_1}

gcloud -q dns record-sets delete www.foobar.com --type=A --zone=zone-foobar

gcloud -q dns managed-zones delete zone-foobar

gcloud -q compute forwarding-rules delete fr-foobar-2 --global

gcloud -q compute forwarding-rules delete fr-foobar-1 --global

gcloud -q compute target-http-proxies delete proxy-foobar --global

gcloud -q compute url-maps delete ilb-foobar --global

gcloud -q compute backend-services delete bes-foobar --global


# delete consumer network resources
gcloud -q compute network-endpoint-groups delete neg-bar --region=${REGION_2}

gcloud -q compute network-endpoint-groups delete neg-foo --region=${REGION_1}

gcloud -q compute networks subnets delete subnet-proxy-2 --region=${REGION_2}

gcloud -q compute networks subnets delete subnet-proxy-1 --region=${REGION_1}

gcloud -q compute networks subnets delete subnet-client-2 --region=${REGION_2}

gcloud -q compute networks subnets delete subnet-client-1 --region=${REGION_1}

gcloud -q compute network-firewall-policies associations delete \
  --firewall-policy=fw-policy-consumer \
  --name=fw-policy-association-consumer \
  --global-firewall-policy

gcloud -q compute network-firewall-policies delete fw-policy-consumer --global

gcloud -q compute networks delete vnet-consumer
# delete producer load balancer resources
gcloud -q compute service-attachments delete psc-sa-bar --region=${REGION_2}

gcloud -q compute service-attachments delete psc-sa-foo --region=${REGION_1}

gcloud -q compute forwarding-rules delete fr-bar --region=${REGION_2}

gcloud -q compute forwarding-rules delete fr-foo --region=${REGION_1}

gcloud -q compute backend-services delete ilb-bar --region=${REGION_2}

gcloud -q compute backend-services delete ilb-foo --region=${REGION_1}

gcloud -q compute health-checks delete hc-bar-http --region=${REGION_2}

gcloud -q compute health-checks delete hc-foo-http --region=${REGION_1}
# delete producer compute resources
gcloud -q compute instance-groups managed delete mig-bar --region=${REGION_2}

gcloud -q compute instance-groups managed delete mig-foo --region=${REGION_1}

gcloud -q compute instance-templates delete mig-template-bar --global

gcloud -q compute instance-templates delete mig-template-foo --global
# delete producer network resources
gcloud -q compute networks subnets delete subnet-bar-pscnat --region=${REGION_2}

gcloud -q compute networks subnets delete subnet-foo-pscnat --region=${REGION_1}

gcloud -q compute networks subnets delete subnet-bar --region=${REGION_2}

gcloud -q compute networks subnets delete subnet-foo --region=${REGION_1}

gcloud -q compute routers delete cr-nat-bar --region=${REGION_2}

gcloud -q compute routers delete cr-nat-foo --region=${REGION_1}

gcloud -q compute network-firewall-policies associations delete \
  --firewall-policy=fw-policy-producer \
  --name=fw-policy-association-producer \
  --global-firewall-policy

gcloud -q compute network-firewall-policies delete fw-policy-producer --global

gcloud -q compute networks delete vnet-producer
# delete shell variables and script file
unset FOO_FAIL_NAME FOO_FAIL_ZONE BAR_FAIL_NAME BAR_FAIL_ZONE

unset PROJECT_ID REGION_1 ZONE_1 REGION_2 ZONE_2

rm vm-server-startup.sh
#

9. Sonuç

Tebrikler! PSC durumunu başarıyla yapılandırdınız ve otomatik bölgesel yük devretmeyi test ettiniz.

Bu geri bildirim formunu kullanarak yorum, soru veya düzeltme önerilerinizi paylaşabilirsiniz.

Teşekkürler!