PSC ile GCP L7 Yük Dengeleyiciler için Açık Zincirleme

1. Giriş

Private Service Connect (PSC) Ağ Uç Noktası Grubu (NEG), Dahili HTTPS Yük Dengeleyici'yi Harici HTTPS Yük Dengeleyici ile zincirlemeyi destekler. Bu, müşteri tarafından tanımlanan aralıkları kullanarak On-Prem'e Dağıtılmış Durum denetimleri ve Veri düzlemi trafiği sağlar. Ayrıca bu topoloji, birçok bölgesel InterConnect üzerinden On-Prem'e bağlanan birden fazla VPC'yi de destekler.

Bu codelab'de, aşağıdaki topolojiye göre uçtan uca bu çözümün nasıl yapılandırılacağını göstereceğiz. Yerleşik müşteriler, soldan sağa doğru, HTTP hizmetlerini simüle etmek, karma bağlantıdan (HA-VPN veya InterConnect) yararlanmak ve dahili HTTPS yük dengeleyici üzerinden sunmak için karma NEG'den yararlanmak üzere bir sanal makineye sahiptir. PSC, hizmet ekleri olarak dahili HTTPS LB'yi kullanır. PSC NEG, ekleri arka uç hizmeti olarak tüketir ve harici HTTPS LB'ye sunar. İnternet kullanıcıları, şirket içi HTTP hizmetlerine erişimi hızlandırmak için Google'ın küresel ağını kullanabilir.

e3f26d8497323a42.png

Şekil 1. Private Service Connect, Harici HTTPS Yük Dengeleyici'yi Dahili HTTPS Yük Dengeleyici'ye bağlamak ve arka ucu On-Prem'e genişletmek için ağ uç noktası grubunu ve hizmet eklerini kullanır.

Neler öğreneceksiniz?

  • Karma NEG ve Dağıtılmış Durum Denetimi ile Dahili HTTPS Yük Dengeleyici
  • Dahili HTTPS Yük Dengeleyici içeren PSC Hizmeti eki
  • PSC Ağ Uç Noktası Grubu Kurulumu
  • PSC NEG'yi Harici HTTPS Yük Dengeleyici ile kullanıma sunma

Gerekenler

  • HA-VPN gibi Karma Bağlantı bilgisi
  • Dahili/Harici HTTPS Yük Dengeleme Bilgisi
  • Private Service Connect hakkında bilgi

2. Başlamadan önce

Not: Codelab, gösterilen topolojiye göre yapılandırma ve doğrulama adımları sunar. Bu prosedürü kuruluşunuzun gereksinimlerini karşılayacak şekilde değiştirin. IAM izinleri, kod laboratuvarının kapsamı dışındadır.

Codelab, tüm süreci simüle etmek için tek bir proje kullanır. Birden fazla proje de desteklenir.

Tek Proje: Üretici ve tüketici ağını desteklemek için projeyi güncelleme

Cloud Shell'de proje kimliğinizin ayarlandığından emin olun

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
prodproject=YOUR-PROJECT-NAME
echo $prodproject

3. Şirket İçi Kaynaklar Oluşturma

Aşağıdaki bölümde, müşteri şirket içi hizmetleri simüle etmek için şirket içi VPC ve sanal makineler kuracağız.

VPC Ağı

Cloud Shell'den

gcloud compute networks create vpc-demo-onprem --project=$prodproject --subnet-mode=custom

Alt Ağ Oluştur

Cloud Shell'den

gcloud compute networks subnets create vpc-demo-onprem-asia-southeast1 --project=$prodproject --range=10.0.0.0/24 --network=vpc-demo-onprem --region=asia-southeast1

Güvenlik duvarı kuralları oluşturun.

Dahili HTTPS Yük Dengeleyici dağıtılmış durum denetimini destekler; güvenlik duvarı kurallarının yalnızca proxy alt ağın IP aralığına izin vermesi gerekir. Projelerinizi izin verilenler listesine eklemek için doc dokümanını takip edin.

Arka uç durum denetimlerini ve proxy alt ağlarından gelen veri düzlemi trafiğini etkinleştirmek için Cloud Shell'den bir güvenlik duvarı kuralı oluşturun.

gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-onprem --source-ranges 10.0.3.0/24 --enable-logging

IAP'nin sanal makine örneklerinize bağlanmasına izin vermek için Cloud Shell'den bir güvenlik duvarı kuralı oluşturun.

gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-onprem --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

4. Şirket İçi Sanal Makine Örnekleri Oluşturma

Bu sanal makine, şirket içi hizmetleri simüle eder ve karma NEG kullanılarak Dahili HTTPS Yük Dengeleyici ile kullanıma sunulması gerekir.

Cloud Shell'den www01 örneği oluşturun

gcloud compute instances create www01 \
    --zone=asia-southeast1-b \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-onprem-asia-southeast1 \
    --shielded-secure-boot \
    --shielded-vtpm \
    --shielded-integrity-monitoring \
    --metadata=startup-script='#! /bin/bash
sudo apt-get update
sudo apt-get install nginx -y
vm_hostname="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/name)"
filter="{print \$NF}"
vm_zone="$(curl -H "Metadata-Flavor:Google" \
http://169.254.169.254/computeMetadata/v1/instance/zone \
| awk -F/ "${filter}")"
echo "Page on $vm_hostname in $vm_zone" | \
tee /var/www/html/index.nginx-debian.html
sudo systemctl restart nginx'

Aşağıdaki bölümde, sertifika oluşturmak ve Nginx'e yüklemek için letsencrypt aracını kullanacağız. Sonraki adım için ortak ve gizli anahtar dosyasını indirin. Sertifika oluşturmak için TCP bağlantı noktası 80'i geçici olarak internete açmanız gerekir.

Bu sanal makinenin herkese açık olarak çözülen bir alan adına sahip olduğundan emin olun. Örneğin, Cloud DNS'de bir A kaydı [www01.yinghli.demo.altostrat.com](http://www01.yinghli.demo.altostrat.com) ekleyin ve sanal makinenin herkese açık IP adresini işaret edin.

gcloud dns --project=$prodproject record-sets create www01.yinghli.demo.altostrat.com. --zone="yinghli-demo" --type="A" --ttl="300" --rrdatas="34.87.77.186"

www01 sanal makine konsolundan, Nginx'e sertifika yüklemeyle ilgili talimatları uygulayın ve aşağıdaki adımlar için fullchain.pem ile private.pem dosyalarının bir kopyasını oluşturun.

sudo apt install snapd
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx

5. Üretici VPC ağı oluşturma

Not: Karma ağ iletişimi yapılandırması bu yapılandırmaya dahil DEĞİLDİR.

VPC Ağı

Cloud Shell'den

gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom

Alt Ağ Oluştur

Cloud Shell'den

gcloud compute networks subnets create vpc-demo-asia-southeast1 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=asia-southeast1

Proxy Alt Ağı Oluşturma

Cloud Shell'den

gcloud compute networks subnets create proxy-subnet-asia-southeast1 \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=asia-southeast1 \
  --network=vpc-demo-producer \
  --range=10.0.3.0/24

Karma Bağlantı

Şirket içi ve üretici VPC arasında HA-VPN bağlantısı uygulamak için Cloud VPN dokümanlarını inceleyin. Cloud Router'da varsayılan yapılandırmayı koruyun. BGP reklamlarına 130.211.0.0/22, 35.191.0.0/16 eklememiz gerekmez.

6. Üretici karma NEG'i oluşturma

Karma ağ uç noktası grubu oluşturun ve NEG'ye şirket içi sanal makine IP:PORT adresini ekleyin.

Cloud Shell'den

gcloud compute network-endpoint-groups create on-prem-service-neg \
    --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
    --zone=asia-southeast1-b \
    --network=vpc-demo-producer

gcloud compute network-endpoint-groups update on-prem-service-neg \
    --zone=asia-southeast1-b \
    --add-endpoint="ip=10.0.0.2,port=443"

7. Yapımcı Dahili HTTPS Yük Dengeleyici Oluşturma

Harici HTTPS Yük Dengeleyici şu anda yalnızca PSC NEG için HTTPS protokolünü destekler (belgeler). Yayınlanan hizmetlerde Dahili HTTPS Yük Dengeleyici'yi kullanmamız ve yönlendirme kurallarının küresel erişimini etkinleştirmemiz gerekir.

Cloud Shell'den bölgesel durum denetimini oluşturun.

gcloud compute health-checks create https on-prem-service-hc \
    --region=asia-southeast1 \
    --use-serving-port

Cloud Shell'den arka uç hizmetini oluşturun ve Karma NEG'yi ekleyin.

gcloud compute backend-services create on-premise-service-backend \
   --load-balancing-scheme=INTERNAL_MANAGED \
   --protocol=HTTPS \
   --region=asia-southeast1 \
   --health-checks=on-prem-service-hc \
   --health-checks-region=asia-southeast1

gcloud compute backend-services add-backend on-premise-service-backend \
   --network-endpoint-group=on-prem-service-neg \
   --network-endpoint-group-zone=asia-southeast1-b \
   --region=asia-southeast1 \
   --balancing-mode=RATE \
   --max-rate-per-endpoint=100

Cloud Shell'den URL eşlemesi oluşturma

gcloud compute url-maps create on-premise-url \
    --default-service on-premise-service-backend \
    --region=asia-southeast1

Cloud Shell'den bölgesel SSL sertifikalarını oluşturun. Sanal makineden iki sertifika dosyası indirilir.

gcloud compute ssl-certificates create www01 \
    --certificate=fullchain.pem \
    --private-key=private.pem \
    --region=asia-southeast1

Cloud Shell'den https-target-proxy oluşturun

gcloud compute target-https-proxies create on-premise-httpsproxy \
    --ssl-certificates=www01 \
    --url-map=on-premise-url \
    --url-map-region=asia-southeast1 \
    --region=asia-southeast1

Cloud Shell'den dahili statik IP ayırın ve yönlendirme kuralını oluşturun

gcloud compute addresses create ilbaddress \
  --region=asia-southeast1 \
  --subnet=vpc-demo-asia-southeast1  \
  --addresses=10.0.2.100 

gcloud compute forwarding-rules create https-ilb-psc \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=vpc-demo-producer \
      --subnet=vpc-demo-asia-southeast1  \
      --address=ilbaddress \
      --ports=443 \
      --region=asia-southeast1 \
      --target-https-proxy=on-premise-httpsproxy \
      --target-https-proxy-region=asia-southeast1
      --allow-global-access

8. Üretici sanal makine örneği oluşturma

Doğrulama için bir üretici sanal makinesi oluşturun.

Cloud Shell'den

gcloud compute instances create test01 \
    --zone=asia-southeast1-b \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --network-interface=network-tier=PREMIUM,nic-type=GVNIC,stack-type=IPV4_ONLY,subnet=vpc-demo-asia-southeast1 \
    --shielded-secure-boot \
    --shielded-vtpm \
    --shielded-integrity-monitoring

IAP'nin sanal makine örneklerinize bağlanmasına izin vermek için aşağıdakileri yapan bir güvenlik duvarı kuralı oluşturun:

Cloud Shell'den

gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

Üretici sanal makine konsolundan [www01.yinghli.demo.altostrat.com](https://www01.yinghli.demo.altostrat.com) adresine erişin ve dahili HTTPS yük dengeleyici IP adresini çözün. HTTP 200, yapılandırmanın beklendiği gibi çalıştığını gösterir.

curl -v --resolve www01.yinghli.demo.altostrat.com:443:10.0.2.100 https://www01.yinghli.demo.altostrat.com

* Added www01.yinghli.demo.altostrat.com:443:10.0.2.100 to DNS cache
* Hostname www01.yinghli.demo.altostrat.com was found in DNS cache
*   Trying 10.0.2.100:443...
* Connected to www01.yinghli.demo.altostrat.com (10.0.2.100) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=www01.yinghli.demo.altostrat.com
*  start date: Jun  4 10:36:43 2023 GMT
*  expire date: Sep  2 10:36:42 2023 GMT
*  subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com"
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x55865ef982e0)
> GET / HTTP/2
> Host: www01.yinghli.demo.altostrat.com
> user-agent: curl/7.74.0
> accept: */*
> 
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 200 
< server: nginx/1.18.0
< date: Mon, 05 Jun 2023 02:29:38 GMT
< content-type: text/html
< content-length: 35
< last-modified: Sun, 04 Jun 2023 09:02:16 GMT
< etag: "647c5318-23"
< accept-ranges: bytes
< via: 1.1 google
< 
Page on www01 in asia-southeast1-b
* Connection #0 to host www01.yinghli.demo.altostrat.com left intact

Not: Şirket içi güvenlik duvarı yalnızca 10.0.3.0/24 proxy alt ağına erişim izni verdiğinden sanal makine 10.0.0.2 HTTPS hizmetlerine doğrudan erişemezsiniz.

9. PSC NAT alt ağı oluşturma

Cloud Shell'den

gcloud compute networks subnets create psc-nat-subnet \
--network=vpc-demo-producer \
--region=asia-southeast1 \
--range=10.0.5.0/24 \
--purpose=private-service-connect

10. HTTPs hizmet eki oluşturma

Cloud Shell'den HTTPS hizmet ekini oluşturun

gcloud compute service-attachments create ilbserviceattach \
--region=asia-southeast1 \
--producer-forwarding-rule=https-ilb-psc \
--connection-preference=ACCEPT_AUTOMATIC \
--nat-subnets=psc-nat-subnet

HTTPs hizmet ekini doğrulama

gcloud compute service-attachments describe ilbserviceattach --region asia-southeast1

Hizmet eki adını kaydet:

projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach

11. Tüketicilerin VPC ağı oluşturma

Aşağıdaki bölümde, tüketici VPC'si aynı projede yapılandırılır ancak farklı projeler de desteklenir. Tüketici ile üretici ağı arasındaki iletişim, üretici ağında tanımlanan hizmet eki aracılığıyla gerçekleştirilir.

VPC Ağı

Cloud Shell'den

gcloud compute networks create vpc-demo-consumer --project=$prodproject --subnet-mode=custom

Alt Ağ Oluştur

Cloud Shell'den

gcloud compute networks subnets create consumer-subnet --project=$prodproject  --range=10.0.6.0/24 --network=vpc-demo-consumer --region=asia-southeast1

12. PSC ağ uç noktası grubu oluşturma

PSC NEG oluşturma

Önceki https hizmetleri ek adını kopyalayın ve --psc-target-service parametrelerini yapıştırın

Cloud Shell'den

gcloud beta compute network-endpoint-groups create consumerpscneg \
--project=$prodproject \
--region=asia-southeast1 \
--network-endpoint-type=PRIVATE_SERVICE_CONNECT \
--psc-target-service=projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach \
--network=vpc-demo-consumer \
--subnet=consumer-subnet

PSC NEG başarıyla kurulduktan sonra kullanıcı arayüzünde Private Service Connect -> Published Services -> Yayınlanan ilbserviceattach bağlantısının artık 1 yönlendirme kuralı gösterdiğini unutmayın.

320741b7dedc7984.png

13. Tüketici Harici HTTPS Yük Dengeleyici Oluşturma

Harici HTTPS Yük Dengeleyici oluşturun ve arka uç hizmetleri olarak PSC NEG'yi kullanın( dokümanlar).

Cloud Shell'den

gcloud compute addresses create httpspsclb \
    --ip-version=IPV4 --global

gcloud compute backend-services create consumer-bs \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --protocol=HTTPS \
    --global

gcloud compute backend-services add-backend consumer-bs \
  --network-endpoint-group=consumerpscneg \
  --network-endpoint-group-region=asia-southeast1 \
  --global

gcloud compute url-maps create consumer-url \
  --default-service=consumer-backend-service \
  --global

gcloud compute ssl-certificates create wwwglobal \
    --certificate=fullchain.pem \
    --private-key=private.pem \
    --global

gcloud compute target-https-proxies create consumer-url-target-proxy \
  --url-map=consumer-url \
  --ssl-certificates=wwwglobal

gcloud compute forwarding-rules create consumer-url-forwarding-rule \
    --load-balancing-scheme=EXTERNAL_MANAGED \
    --network-tier=PREMIUM \
    --address=httpspsclb \
    --target-https-proxy=consumer-url-target-proxy \
    --ports=443 \
    --global

www01.yinghli.demo.altostrat.com için DNS kaydını güncelleyin ve Harici HTTPS Yük Dengeleyici genel IP adresine işaret edin

gcloud dns --project=$prodproject record-sets update www01.yinghli.demo.altostrat.com. --type="A" --zone="yinghli-demo" --rrdatas="34.102.178.214" --ttl="300"

14. Doğrulama

Dizüstü bilgisayarınızdan curl kullanarak https://www01.yinghli.demo.altostrat.com adresine erişin.

curl -v https://www01.yinghli.demo.altostrat.com
*   Trying 34.102.178.214:443...
* Connected to www01.yinghli.demo.altostrat.com (34.102.178.214) port 443 (#0)
* ALPN: offers h2,http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=www01.yinghli.demo.altostrat.com
*  start date: Jun  4 10:36:43 2023 GMT
*  expire date: Sep  2 10:36:42 2023 GMT
*  subjectAltName: host "www01.yinghli.demo.altostrat.com" matched cert's "www01.yinghli.demo.altostrat.com"
*  issuer: C=US; O=Let's Encrypt; CN=R3
*  SSL certificate verify ok.
* using HTTP/2
* h2h3 [:method: GET]
* h2h3 [:path: /]
* h2h3 [:scheme: https]
* h2h3 [:authority: www01.yinghli.demo.altostrat.com]
* h2h3 [user-agent: curl/8.0.0]
* h2h3 [accept: */*]
* Using Stream ID: 1 (easy handle 0x149019a00)
> GET / HTTP/2
> Host: www01.yinghli.demo.altostrat.com
> user-agent: curl/8.0.0
> accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* old SSL session ID is stale, removing
< HTTP/2 200
< server: nginx/1.18.0
< date: Mon, 05 Jun 2023 02:48:43 GMT
< content-type: text/html
< content-length: 35
< last-modified: Sun, 04 Jun 2023 09:02:16 GMT
< etag: "647c5318-23"
< accept-ranges: bytes
< via: 1.1 google, 1.1 google
< alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
<
Page on www01 in asia-southeast1-b
* Connection #0 to host www01.yinghli.demo.altostrat.com left intact

15. Temizleme adımları

Üretici ağı temizleme adımları

Not: Temizleme adımlarında yalnızca Load Balancer ve PSC ile ilgili yapılandırma gösterilir. VPC ve Karma Bağlantı dahil değildir.

Terminaldeki tek bir Cloud Shell'den laboratuvar bileşenlerini silme

gcloud compute forwarding-rules delete consumer-url-forwarding-rule --global
gcloud compute target-https-proxies delete consumer-url-target-proxy
gcloud compute ssl-certificates delete wwwglobal --global
gcloud compute url-maps delete consumer-url
gcloud compute backend-services delete consumer-bs --global
gcloud compute addresses delete httpspsclb --global

gcloud beta compute network-endpoint-groups delete consumerpscneg --region=asia-southeast1

gcloud compute service-attachments delete ilbserviceattach --region=asia-southeast1
gcloud compute networks subnets delete psc-nat-subnet --region=asia-southeast1

gcloud compute forwarding-rules delete https-ilb-psc --region=asia-southeast1
gcloud compute addresses delete ilbaddress --region=asia-southeast1
gcloud compute target-https-proxies delete on-premise-httpsproxy --region=asia-southeast1
gcloud compute ssl-certificates delete www01 --region=asia-southeast1
gcloud compute url-maps delete on-premise-url --region=asia-southeast1
gcloud compute backend-services delete on-premise-service-backend --region=asia-southeast1
gcloud compute health-checks delete on-prem-service-hc --region=asia-southeast1

gcloud compute network-endpoint-groups delete on-prem-service-neg --zone=asia-southeast1-b
gcloud compute networks subnets delete proxy-subnet-asia-southeast1 --region=asia-southeast1

16. Tebrikler!

Codelab'i tamamladığınız için tebrikler.

İşlediklerimiz

  • Karma NEG ve Dağıtılmış Durum Denetimi içeren Dahili HTTPS Yük Dengeleyici
  • Dahili HTTPS Yük Dengeleyici içeren PSC Hizmeti eki
  • PSC Ağ Uç Noktası Grubu Kurulumu
  • PSC NEG'yi Harici HTTPS Yük Dengeleyici ile kullanıma sunma