1. Introduzione
Il gruppo di endpoint di rete (NEG) Private Service Connect (PSC) supporta il concatenamento di un bilanciatore del carico HTTPS interno con un bilanciatore del carico HTTPS esterno. Ciò fornisce controlli di integrità distribuiti e traffico del piano dati verso On-Prem utilizzando intervalli definiti dal cliente. Inoltre, questa topologia supporta più VPC che si connettono a On-Prem tramite più InterConnect regionali.
In questo codelab, dimostreremo come configurare l'intero processo 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 (HA-VPN o InterConnect) e il NEG ibrido per l'esposizione tramite il bilanciatore del carico HTTPS interno. PSC utilizza Bilanciatore del carico HTTPS interno come collegamenti al servizio. Il NEG PSC utilizza i collegamenti come servizio di backend, esposti al bilanciatore del carico HTTPS esterno. Gli utenti internet possono utilizzare la rete globale di Google per accelerare l'accesso ai servizi HTTP on-prem.
Figura 1. Private Service Connect utilizza il gruppo di endpoint di rete e i collegamenti ai servizi per connettere il bilanciatore del carico HTTPS esterno al bilanciatore del carico HTTPS interno ed estendere il backend alla rete on-prem.
Cosa imparerai a fare
- Bilanciatore del carico HTTPS interno con NEG ibrido e controllo di integrità distribuito
- Collegamento del servizio PSC con il bilanciatore del carico HTTPS interno
- Configurazione del gruppo di endpoint di rete PSC
- Esponi il NEG PSC con il bilanciatore del carico HTTPS esterno
Che cosa ti serve
- Conoscenza della connettività ibrida, come la 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'intero processo. Sono supportati anche più progetti.
Progetto singolo: aggiorna il progetto per supportare la rete di producer e consumer
All'interno di 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-prem
Nella sezione seguente configureremo un VPC on-prem e delle VM per simulare i servizi on-premise dei clienti.
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 del proxy. Segui il documento per inserire 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. Creazione di istanze VM on-prem
Questa VM simula servizi on-premise e deve essere esposta con il bilanciatore del carico HTTPS interno utilizzando 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 che segue, utilizzeremo letsencrypt per generare certificati e installarlo su Nginx. Scarica il file della chiave pubblica e privata per il passaggio successivo. Per generare il certificato, devi aprire temporaneamente la porta TCP 80 su 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 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 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à HA-VPN tra il VPC on-prem e del produttore. Mantieni la configurazione predefinita sul router Cloud, non è necessario aggiungere 130.211.0.0/22, 35.191.0.0/16 negli annunci BGP.
6. Crea NEG ibrido producer
Crea un gruppo di endpoint di rete ibrido e aggiungi la VM on-prem IP:PORT 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 bilanciatore del carico HTTPS interno dei produttori
Attualmente il bilanciatore del carico HTTPS esterno supporta solo il protocollo HTTPS per il NEG PSC( documenti). Quando i servizi vengono pubblicati, 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 certificato.
gcloud compute ssl-certificates create www01 \ --certificate=fullchain.pem \ --private-key=private.pem \ --region=asia-southeast1
Da Cloud Shell crea https-target-proxy.
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 istanza VM producer
Crea una VM 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 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 indicava 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 alla VM 10.0.0.2, perché il firewall on-prem consente l'accesso solo alla subnet proxy 10.0.3.0/24.
9. Crea 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 collegamento del servizio HTTPS
Da Cloud Shell crea il collegamento al 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
Nome del collegamento al servizio di record:
projects/<project>/regions/asia-southeast1/serviceAttachments/ilbserviceattach
11. Crea rete VPC dei consumer
Nella sezione seguente, il VPC consumer è configurato nello stesso progetto, ma sono supportati anche progetti diversi. La comunicazione tra la rete del consumatore e del producer viene effettuata tramite il collegamento al 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 gruppo di endpoint di rete PSC
Crea NEG PSC
Copia il nome dell'allegato dei servizi https precedente e incolla i 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 la configurazione del NEG PSC, dall'interfaccia utente, seguendo Private Service Connect
-> Published Services
-> Tieni presente che la connessione ilbserviceattach
pubblicata ora indica 1 regola di forwarding.
13. Crea bilanciatore del carico HTTPS esterno 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. Passaggi per la pulizia
Passaggi di pulizia della rete del producer
Nota: i passaggi di pulizia mostrano solo la configurazione relativa al bilanciatore del carico e a PSC, il VPC e la connettività ibrida non sono inclusi.
Elimina i componenti del lab da un'unica Cloud Shell nel terminale
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!
Complimenti 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 il bilanciatore del carico HTTPS interno
- Configurazione del gruppo di endpoint di rete PSC
- Esponi il NEG PSC con il bilanciatore del carico HTTPS esterno