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 aracılığıyla On-Prem'e bağlanan birden fazla VPC'yi de destekler.

Bu codelab'de, aşağıdaki topolojiyi temel alarak bu uçtan uca yapılandırmanın nasıl yapılacağını göstereceğiz. Şirket içindeki müşteriler HTTP hizmetlerini simüle etmek, karma bağlantıdan (HA-VPN veya InterConnect) ve karma NEG'den yararlanarak dahili HTTPS yük dengeleyici aracılığıyla kullanıma sunmak için bir sanal makineye sahiptir. PSC, hizmet ekleri olarak Dahili HTTPS LB'yi kullanır. PSC NEG, harici HTTPS LB'ye maruz kalan ekleri arka uç hizmeti olarak kullanır. İnternet kullanıcıları, şirket içi HTTP hizmetlerine erişimi hızlandırmak için Google 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 codelab kapsamında değildir.

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 şekilde çözümlenmiş 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"

Sanal makine www01 konsolundan Nginx'e sertifika yükleme talimatlarını uygulayın ve aşağıdaki adımlar için fullchain.pem ile private.pem dosyalarının 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. Yapımcılar 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 ve Üretici VPC'si arasında HA-VPN bağlantısını uygulamak için Cloud VPN belgelerini izleyin. 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. Yapımcı Karma NEG'si 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

Şu anda Harici HTTPS Yük Dengeleyici yalnızca PSC NEG için HTTPS protokolünü desteklemektedir( dokümanlar). Yayınlanan hizmetler için Dahili HTTPS Yük Dengeleyici'yi kullanmamız ve iletim kurallarına genel erişimi 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ırma ve iletim kuralını oluşturma

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. Yapımcı 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ğıdaki şartları yerine getiren 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 gidip Dahili HTTPS yük dengeleyici IP adresini çözümleyin. HTTP 200, yapılandırmanın beklendiği gibi çalıştığını belirtti.

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şturun

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 ve üretici ağı arasındaki iletişim, üretici ağında tanımlanan hizmet eki aracılığıyla yapılır.

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 kurulumu başarıyla tamamlandıktan sonra, kullanıcı arayüzünden Private Service Connect -> takip edilerek Published Services -> Yayınlanan ilbserviceattach bağlantısının artık 1 iletim 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 Yük Dengeleyici ve PSC ile ilgili yapılandırmalar 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 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