1. Introduzione
Il gruppo di endpoint di rete (NEG) di Private Service Connect (PSC) supporta l'incatenamento di un bilanciatore del carico HTTPS interno con un bilanciatore del carico HTTPS esterno. In questo modo, i controlli di integrità distribuiti e il traffico del piano dati vengono indirizzati all'ambiente on-premise utilizzando gli intervalli definiti dal cliente. Inoltre, questa topologia supporta anche più VPC che si connettono all'ambiente on-premise tramite più interconnessioni regionali.
In questo codelab, ti mostreremo come configurare questa soluzione end-to-end in base alla topologia riportata di seguito. Da sinistra a destra, i clienti on-premise hanno una VM per simulare i servizi HTTP, sfruttano la connettività ibrida (VPN ad alta disponibilità o Interconnect) e il NEG ibrido per l'esposizione tramite il bilanciatore del carico HTTPS interno. PSC utilizza il bilanciatore del carico HTTPS interno come collegamenti del servizio. Il NEG PSC utilizza i collegamenti come servizio di backend, esposto al bilanciatore del carico HTTPS esterno. Gli utenti di internet possono utilizzare la rete globale di Google per accelerare l'accesso ai servizi HTTP on-premise.

Figura 1. Private Service Connect utilizza il gruppo di endpoint di rete e i collegamenti del servizio per connettere il bilanciatore del carico HTTPS esterno al bilanciatore del carico HTTPS interno ed estendere il backend all'ambiente on-premise.
Cosa imparerai a fare
- Bilanciatore del carico HTTPS interno con NEG ibrido e controllo di integrità distribuito
- Collegamento del servizio PSC con bilanciatore del carico HTTPS interno
- Configurazione del gruppo di endpoint di rete PSC
- Esposizione del NEG PSC con il bilanciatore del carico HTTPS esterno
Che cosa ti serve
- Conoscenza della connettività ibrida, ad esempio VPN ad alta disponibilità
- Conoscenza del bilanciamento del carico HTTPS interno/esterno
- Conoscenza di Private Service Connect
2. Prima di iniziare
Nota: il codelab offre passaggi di configurazione e convalida basati sulla topologia illustrata. Modifica la procedura in base alle esigenze della tua organizzazione. Le autorizzazioni IAM non rientrano nell'ambito del codelab.
Il codelab utilizzerà un progetto per simulare l'intera procedura. Sono supportati anche più progetti.
Progetto singolo: aggiorna il progetto per supportare la rete del producer e del consumer
In Cloud Shell, assicurati che l'ID progetto sia configurato
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
3. Crea risorse on-premise
Nella sezione seguente, configureremo un VPC e delle VM on-premise per simulare i servizi on-premise del cliente.
Rete VPC
Da Cloud Shell
gcloud compute networks create vpc-demo-onprem --project=$prodproject --subnet-mode=custom
Crea subnet
Da Cloud Shell
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
Crea regole firewall.
Il bilanciatore del carico HTTPS interno supporta il controllo di integrità distribuito, le regole firewall devono consentire solo l'intervallo IP della subnet proxy. Segui la documentazione per includere i tuoi progetti nella lista consentita.
Da Cloud Shell, crea una regola firewall per abilitare i controlli di integrità del backend e il traffico del piano dati dalle subnet proxy.
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
Da Cloud Shell, crea una regola firewall per consentire a IAP di connettersi alle tue istanze VM,
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. Crea istanze VM on-premise
Questa VM simula i servizi on-premise e deve essere esposta con il bilanciatore del carico HTTPS interno utilizzando il NEG ibrido.
Da Cloud Shell, crea l'istanza www01
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'
Nella sezione seguente, utilizzeremo letsencrypt per generare i certificati e installarli su Nginx. Scarica il file della chiave pubblica e privata per il passaggio successivo. Per la generazione del certificato, devi aprire temporaneamente la porta TCP 80 a internet.
Assicurati che questa VM abbia un nome di dominio risolto pubblicamente. Ad esempio, in Cloud DNS aggiungi un record A [www01.yinghli.demo.altostrat.com](http://www01.yinghli.demo.altostrat.com) e punta all'indirizzo IP pubblico della VM.
gcloud dns --project=$prodproject record-sets create www01.yinghli.demo.altostrat.com. --zone="yinghli-demo" --type="A" --ttl="300" --rrdatas="34.87.77.186"
Dalla console della VM www01, segui le indicazioni per installare i certificati su Nginx e crea una copia di fullchain.pem e private.pem per i passaggi successivi.
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. Crea la rete VPC dei producer
Nota: la configurazione della rete ibrida NON è inclusa in questa configurazione.
Rete VPC
Da Cloud Shell
gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom
Crea subnet
Da Cloud Shell
gcloud compute networks subnets create vpc-demo-asia-southeast1 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=asia-southeast1
Crea subnet proxy
Da Cloud Shell
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
Connettività ibrida
Segui la documentazione di Cloud VPN per implementare la connettività VPN ad alta disponibilità tra il VPC on-premise e il VPC del producer. Mantieni la configurazione predefinita sul router Cloud, non è necessario aggiungere 130.211.0.0/22, 35.191.0.0/16 agli annunci BGP.
6. Crea il NEG ibrido dei producer
Crea un gruppo di endpoint di rete ibrido e aggiungi l'IP:PORT della VM on-premise al NEG.
Da Cloud Shell
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. Crea il bilanciatore del carico HTTPS interno dei producer
Al momento, il bilanciatore del carico HTTPS esterno supporta solo il protocollo HTTPS per il NEG PSC( documentazione). Quando pubblichiamo i servizi, dobbiamo utilizzare il bilanciatore del carico HTTPS interno e abilitare l'accesso globale alle regole di forwarding.
Da Cloud Shell, crea il controllo di integrità a livello di regione.
gcloud compute health-checks create https on-prem-service-hc \
--region=asia-southeast1 \
--use-serving-port
Da Cloud Shell, crea il servizio di backend e aggiungi il NEG ibrido.
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
Da Cloud Shell, crea la mappa URL
gcloud compute url-maps create on-premise-url \
--default-service on-premise-service-backend \
--region=asia-southeast1
Da Cloud Shell, crea i certificati SSL a livello di regione. Dalla VM vengono scaricati due file di certificati.
gcloud compute ssl-certificates create www01 \
--certificate=fullchain.pem \
--private-key=private.pem \
--region=asia-southeast1
Da Cloud Shell, crea il proxy di destinazione HTTPS
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
Da Cloud Shell, prenota un IP statico interno e crea la regola di forwarding
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. Crea l'istanza VM del producer
Crea una VM del producer per la verifica.
Da Cloud Shell
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
Per consentire a IAP di connettersi alle tue istanze VM, crea una regola firewall che:
Da Cloud Shell
gcloud compute firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
Dalla console della VM del producer, accedi a [www01.yinghli.demo.altostrat.com](https://www01.yinghli.demo.altostrat.com) e risolvi l'indirizzo IP del bilanciatore del carico HTTPS interno. HTTP 200 indica che la configurazione ha funzionato come previsto.
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
Nota: non puoi accedere direttamente ai servizi HTTPS della VM 10.0.0.2, perché il firewall on-premise consente l'accesso solo alla subnet proxy 10.0.3.0/24.
9. Crea la subnet NAT PSC
Da Cloud Shell
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. Crea il collegamento del servizio HTTPS
Da Cloud Shell, crea il collegamento del servizio HTTPS
gcloud compute service-attachments create ilbserviceattach \ --region=asia-southeast1 \ --producer-forwarding-rule=https-ilb-psc \ --connection-preference=ACCEPT_AUTOMATIC \ --nat-subnets=psc-nat-subnet
Convalida il collegamento del servizio HTTPS
gcloud compute service-attachments describe ilbserviceattach --region asia-southeast1
Registra il nome del collegamento del servizio:
projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach
11. Crea la rete VPC dei consumer
Nella sezione seguente, il VPC del consumer è configurato nello stesso progetto, ma sono supportati anche progetti diversi. La comunicazione tra la rete del consumer e quella del producer avviene tramite il collegamento del servizio definito nella rete del producer.
Rete VPC
Da Cloud Shell
gcloud compute networks create vpc-demo-consumer --project=$prodproject --subnet-mode=custom
Crea subnet
Da Cloud Shell
gcloud compute networks subnets create consumer-subnet --project=$prodproject --range=10.0.6.0/24 --network=vpc-demo-consumer --region=asia-southeast1
12. Crea il gruppo di endpoint di rete PSC
Crea NEG PSC
Copia il nome del collegamento dei servizi HTTPS precedente e incollalo nei parametri --psc-target-service
Da Cloud Shell
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
Dopo aver configurato correttamente il NEG PSC, nell'interfaccia utente, vai a Private Service Connect -> Published Services -> Nota che la connessione ilbserviceattach pubblicata ora indica 1 regola di forwarding.

13. Crea il bilanciatore del carico HTTPS esterno del consumer
Crea un bilanciatore del carico HTTPS esterno e utilizza il NEG PSC come servizi di backend( documentazione).
Da Cloud Shell
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
Aggiorna il record DNS per www01.yinghli.demo.altostrat.com e punta all'indirizzo IP pubblico del bilanciatore del carico HTTPS esterno
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. Convalida
Dal laptop, accedi a https://www01.yinghli.demo.altostrat.com con curl.
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. Procedura di pulizia
Procedura di pulizia della rete del producer
Nota: la procedura di pulizia mostra solo la configurazione relativa al bilanciatore del carico e a PSC, non sono inclusi VPC e connettività ibrida.
Da una singola shell Cloud nel terminale, elimina i componenti del lab
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. Complimenti!
Congratulazioni per aver completato il codelab.
Argomenti trattati
- Bilanciatore del carico HTTPS interno con NEG ibrido e controllo di integrità distribuito
- Collegamento del servizio PSC con bilanciatore del carico HTTPS interno
- Configurazione del gruppo di endpoint di rete PSC
- Esposizione del NEG PSC con il bilanciatore del carico HTTPS esterno