1. Introduzione
Il gruppo di endpoint di rete (NEG) di Private Service Connect (PSC) supporta l'accodamento di un bilanciatore del carico HTTPS interno con un bilanciatore del carico HTTPS esterno. In questo modo, vengono forniti controlli di integrità distribuiti e traffico del piano dati on-premise utilizzando intervalli definiti dal cliente. Inoltre, con questa topologia sono supportati anche più VPC che si connettono all'infrastruttura on-premise 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 il bilanciatore del carico HTTPS interno come collegamenti a servizi. Il NEG PSC utilizza gli allegati 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 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 ibrida e controllo dell'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, 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 i passaggi di configurazione e convalida in base alla 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 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 e VM on-premise 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, quindi le regole firewall devono consentire solo l'intervallo IP della subnet proxy. Leggi il documento seguente 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 sottoreti 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 i servizi on-premise e deve essere esposta con il bilanciatore del carico HTTPS interno utilizzando NEG ibrida.
Crea l'istanza www01 da Cloud Shell
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 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
Creare una 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 ibrida e aggiungi l'IP:PORT della VM on-prem 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 per i produttori
Al momento, il bilanciatore del carico HTTPS esterno supporta solo il protocollo HTTPS per PSC NEG (documentazione). Quando pubblichi i servizi, devi utilizzare il bilanciatore del carico HTTPS interno e attivare l'accesso globale alle regole di inoltro.
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
Crea la mappa URL da Cloud Shell
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 indirizzo IP interno statico e crea la regola di inoltro
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 del produttore
Crea una VM di produzione 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 produttore, 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 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 collegamento del servizio HTTPS
Crea l'allegato del servizio HTTPs da Cloud Shell
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 la rete VPC dei consumatori
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
Creare un 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 aver configurato correttamente il 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 per i consumatori
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 indica l'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 tuo laptop, accedi all'indirizzo 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 ibrida e controllo dell'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