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 dengeleyicinin harici HTTPS yük dengeleyiciyle zincirlenmesini destekler. Bu, müşteri tarafından tanımlanan aralıkları kullanarak şirket içi için dağıtılmış sağlık kontrolleri ve veri düzlemi trafiği sağlar. Ayrıca, bu topolojiyle birden fazla bölgesel ara bağlantı üzerinden şirket içi ağa bağlanan birden fazla VPC de desteklenir.

Bu codelab'de, aşağıdaki topolojiye göre uçtan uca bu yapılandırmanın nasıl yapılacağını göstereceğiz. Şirket içi müşteriler, soldan sağa doğru HTTP hizmetlerini simüle etmek için bir sanal makineye sahiptir, dahili HTTPS yük dengeleyici üzerinden kullanıma sunmak için karma bağlantı (HA VPN veya ara bağlantı) ve karma NEG'den yararlanır. PSC, hizmet ekleri olarak dahili HTTPS yük dengeleyiciyi kullanır. PSC NEG, ekleri harici HTTPS yük dengeleyiciye sunulan arka uç hizmeti olarak kullanır. İ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 dengeleyiciyi dahili HTTPS yük dengeleyiciye bağlamak ve arka ucu şirket içine genişletmek için ağ uç noktası grubu 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 dengeleyiciye sahip PSC hizmet eki
  • PSC Ağ Uç Noktası Grubu Kurulumu
  • Harici HTTPS yük dengeleyici ile PSC NEG'yi kullanıma sunma

Gerekenler

  • HA-VPN gibi karma bağlantı hakkında bilgi
  • Dahili/Harici HTTPS Yük Dengeleme hakkında bilgi
  • Private Service Connect hakkında bilgi

2. Başlamadan önce

Not: Codelab, gösterilen topolojiye dayalı yapılandırma ve doğrulama adımları sunar. Kuruluşunuzun gereksinimlerini karşılamak için prosedürü gerektiği gibi değiştirin. IAM izinleri, codelab kapsamına dahil 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üşterinin tesis içi hizmetlerini simüle etmek için tesis içi bir VPC ve VM'ler oluşturacağı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ğı IP aralığına izin vermesi gerekir. Projelerinizi izin verilenler listesine eklemek için dokümanı inceleyin.

Cloud Shell'den, arka uç durum denetimlerini ve proxy alt ağlarından gelen veri düzlemi trafiğini etkinleştirmek için 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

Cloud Shell'den, IAP'nin sanal makine örneklerinize bağlanmasına izin veren 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ç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ğini 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'i kullanacağız. Bir sonraki adım için genel ve özel anahtar dosyasını indirin. Sertifika oluşturmak için TCP bağlantı noktası 80'i internete geçici olarak açmanız gerekir.

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

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 konsolunda, Nginx'e sertifika yükleme ve sonraki adımlar için fullchain.pem ile private.pem dosyalarının bir kopyasını oluşturma talimatlarını uygulayın.

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. Üreticiler VPC ağı oluşturma

Not: Hibrit ağ yapılandırması bu yapılandırmaya dahil değildir.

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 belgelerini inceleyin. Cloud Router'da varsayılan yapılandırmayı koruyun. 130.211.0.0/22 ve 35.191.0.0/16'yı BGP reklamlarına eklememiz gerekmez.

6. Create Producers Hybrid NEG

Karma ağ uç noktası grubu oluşturun ve şirket içi VM IP:PORT'unu NEG'ye 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. Üreticiler için dahili HTTPS yük dengeleyici oluşturma

Şu anda harici HTTPS yük dengeleyici yalnızca PSC NEG'ye HTTPS protokolünü desteklemektedir( dokümanlar). Yayınlanan hizmetler için dahili HTTPS yük dengeleyici kullanmamız ve iletme kurallarının genel 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 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şlemesini oluşturun.

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 bir statik IP ayırtı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ğıdaki özellikleri içeren 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ümleyin. HTTP 200, yapılandırmanın beklendiği gibi çalıştığını gösteriyordu.

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şime izin verdiğinden 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 eki 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ı kaydetme:

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

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

Aşağıdaki bölümde tüketici VPC'si aynı projede yapılandırılmıştı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ıp parametrelere yapıştırın --psc-target-service

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ılı olduktan 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'nin genel IP adresini 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 ile 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ırma gösterilir. VPC ve hibrit 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 tebrik ederiz.

İşlediğimiz konular

  • Karma NEG ve dağıtılmış durum denetimi ile dahili HTTPS yük dengeleyici
  • Dahili HTTPS yük dengeleyiciye sahip PSC hizmet eki
  • PSC Ağ Uç Noktası Grubu Kurulumu
  • Harici HTTPS yük dengeleyici ile PSC NEG'yi kullanıma sunma