Connettiti ai servizi on-prem su rete ibrida utilizzando Private Service Connect e NEG ibrido con bilanciatore del carico HTTP(s) interno

1. Introduzione

Il bilanciamento del carico di Cloud supporta il bilanciamento del carico del traffico verso endpoint che vanno oltre Google Cloud, come i data center on-premise e altri cloud pubblici che puoi raggiungere utilizzando la connettività ibrida.

Una strategia ibrida è una soluzione pragmatica per adattarsi alle mutevoli richieste del mercato e modernizzare in modo incrementale le applicazioni. Potrebbe trattarsi di un'implementazione ibrida temporanea per consentire la migrazione a una soluzione moderna basata su cloud o di un impianto permanente dell'infrastruttura IT della tua organizzazione.

La configurazione del bilanciamento del carico ibrido ti consente inoltre di sfruttare i vantaggi delle funzionalità di networking di Cloud Load Balancing per i servizi in esecuzione sull'infrastruttura esistente al di fuori di Google Cloud.

Se vuoi rendere il servizio ibrido disponibile in altre reti VPC, puoi utilizzare Private Service Connect per pubblicarlo. Posizionando un collegamento di servizio davanti al bilanciatore del carico HTTP(S) regionale interno, puoi consentire ai client di altre reti VPC di raggiungere i servizi ibridi in esecuzione in ambienti on-premise o in altri cloud.

Cosa creerai

In questo codelab, creerai un bilanciatore del carico HTTP(S) interno con connettività ibrida a un servizio on-premise utilizzando un gruppo di endpoint di rete. La VPC del consumatore potrà comunicare con il servizio on-premise utilizzando le porte 80. La porta 443 non rientra nell'ambito del codelab.

4ad647fa51b3473e.png

Cosa imparerai a fare

  • Come creare un bilanciatore del carico HTTP(S) interno con un backend NEG ibrido
  • Come stabilire un producer (collegamento di servizio) e consumer (regola di forwarding) di Private Service Connect

Che cosa ti serve

  • Rete ibrida stabilita, ad esempio VPN ad alta disponibilità, interconnessione, SW-WAN
  • Progetto Google Cloud

Stabilire la connettività ibrida

Google Cloud e gli ambienti on-premise o altri cloud devono essere connessi tramite la connettività ibrida, utilizzando i collegamenti VLAN di Cloud Interconnect o i tunnel Cloud VPN con il router Cloud. Ti consigliamo di utilizzare una connessione ad alta disponibilità.

Un router Cloud abilitato con il routing dinamico globale apprende l'endpoint specifico tramite BGP e lo programma nella tua rete VPC di Google Cloud. Il routing dinamico regionale non è supportato. Inoltre, le route statiche non sono supportate.

La rete VPC di Google Cloud che utilizzi per configurare Cloud Interconnect o Cloud VPN è la stessa che utilizzi per configurare il deployment del bilanciamento del carico ibrido. Assicurati che gli intervalli CIDR della subnet della rete VPC non siano in conflitto con gli intervalli CIDR remoti. Quando gli indirizzi IP si sovrappongono, le route di subnet hanno la priorità sulla connettività remota.

Per istruzioni, vedi:

Annunci di route personalizzati

Le subnet riportate di seguito richiedono annunci personalizzati dal router Cloud alla rete on-premise per garantire l'aggiornamento delle regole firewall on-premise.

Subnet

Descrizione

172.16.0.0/23

Subnet proxy utilizzata per comunicare direttamente con il servizio on-premise

130.211.0.0/22, 35.191.0.0/16

Controllo dell'integrità di Google Cloud

2. Prima di iniziare

Aggiornare il progetto per supportare il codelab

Questo codelab utilizza le variabili $per facilitare l'implementazione della configurazione di gcloud in Cloud Shell.

In Cloud Shell, esegui queste operazioni

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
psclab=YOUR-PROJECT-NAME
echo $psclab

3. Configurazione del producer

Crea il VPC del produttore

In Cloud Shell, esegui queste operazioni

gcloud compute networks create producer-vpc --project=$psclab --subnet-mode=custom

Crea le subnet Producer

In Cloud Shell, esegui queste operazioni

gcloud compute networks subnets create subnet-201 --project=$psclab --range=10.10.1.0/24 --network=producer-vpc --region=us-central1
gcloud compute networks subnets create subnet-202 --project=$psclab --range=10.20.1.0/24 --network=producer-vpc --region=us-central1

Prenotare un indirizzo IP per il bilanciatore del carico interno

Esegui quanto segue all'interno di Cloud Shell. L'utilizzo di SHARED_VIP non è supportato con Private Service Connect; utilizza invece GCE_ENDPOINT

gcloud compute addresses create lb-ip \
    --region=us-central1 \
    --subnet=subnet-202 \
    --purpose=GCE_ENDPOINT

Utilizza il comando describe describe per visualizzare l'indirizzo IP allocato.

gcloud compute addresses describe lb-ip  --region=us-central1 | grep address:

Crea le subnet proxy a livello di regione

L'allocazione dei proxy avviene a livello di VPC, non a livello di bilanciatore del carico. Devi creare una subnet solo proxy in ogni regione di una rete virtuale (VPC) in cui utilizzi i bilanciatori del carico basati su Envoy. Se esegui il deployment di più bilanciatori del carico nella stessa regione e nella stessa rete VPC, questi condividono la stessa subnet solo proxy per il bilanciamento del carico.

  1. Un client effettua una connessione all'indirizzo IP e alla porta della regola di inoltro del bilanciatore del carico.
  2. Ogni proxy rimane in ascolto sull'indirizzo IP e sulla porta specificati dalla regola di forwarding del bilanciatore del carico corrispondente. Uno dei proxy riceve e termina la connessione di rete del client.
  3. Il proxy stabilisce una connessione all'endpoint o alla VM di backend appropriata in un NEG, come stabilito dalla mappa URL e dai servizi di backend del bilanciatore del carico.

Devi creare subnet solo proxy indipendentemente dal fatto che la rete sia in modalità automatica o personalizzata. Una subnet solo proxy deve fornire almeno 64 indirizzi IP. Corrisponde a una lunghezza del prefisso di /26 o inferiore. La dimensione consigliata della subnet è /23 (512 indirizzi solo proxy).

In Cloud Shell, esegui quanto segue

gcloud compute networks subnets create proxy-subnet-us-central \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=us-central1 \
  --network=producer-vpc \
  --range=172.16.0.0/23

Crea le subnet NAT Private Service Connect

Crea una o più subnet dedicate da utilizzare con Private Service Connect. Se utilizzi la console Google Cloud per pubblicare un servizio, puoi creare le sottoreti durante questa procedura. Crea la subnet nella stessa regione del bilanciatore del carico del servizio. Non puoi convertire una subnet normale in una subnet Private Service Connect.

In Cloud Shell, esegui quanto segue

gcloud compute networks subnets create psc-nat-subnet --network=producer-vpc --region=us-central1 --range=100.100.10.0/24 --purpose=private-service-connect

Crea le regole firewall del produttore

Configura le regole firewall per consentire il traffico tra gli endpoint Private Service Connect e il collegamento al servizio. Nel codelab, è stata creata una regola del firewall in entrata che consente alla subnet NAT 100.100.10.0/24 di accedere al collegamento a un servizio Private Service Connect (bilanciatore del carico interno).

In Cloud Shell, esegui queste operazioni

gcloud compute --project=$psclab firewall-rules create allow-to-ingress-nat-subnet --direction=INGRESS --priority=1000 --network=producer-vpc --action=ALLOW --rules=all --source-ranges=100.100.10.0/24

In Cloud Shell Crea la regola fw-allow-health-check per consentire ai controlli di integrità di Google Cloud di raggiungere il servizio on-premise (servizio di backend) sulla porta TCP 80

gcloud compute firewall-rules create fw-allow-health-check \
    --network=producer-vpc \
    --action=allow \
    --direction=ingress \
    --source-ranges=130.211.0.0/22,35.191.0.0/16 \
    --rules=tcp:80

Crea una regola firewall di autorizzazione in entrata per la subnet solo proxy in modo da consentire al bilanciatore del carico di comunicare con le istanze di backend sulla porta TCP 80

gcloud compute firewall-rules create fw-allow-proxy-only-subnet \
    --network=producer-vpc \
    --action=allow \
    --direction=ingress \
    --source-ranges=172.16.0.0/23 \
    --rules=tcp:80

Configura il NEG di connettività ibrida

Quando crei il NEG, utilizza una ZONE che minimizza la distanza geografica tra Google Cloud e il tuo ambiente on-premise o un altro ambiente cloud. Ad esempio, se ospiti un servizio in un ambiente on-premise a Francoforte, in Germania, puoi specificare la zona Google Cloud europe-west3-a quando crei il gruppo di elenchi di negazioni.

Inoltre, se utilizzi Cloud Interconnect, la ZONE utilizzata per creare il NEG deve trovarsi nella stessa regione in cui è stato configurato il collegamento Cloud Interconnect.

Per le regioni e le zone disponibili, consulta la documentazione di Compute Engine: Regioni e zone disponibili.

In Cloud Shell, crea un NEG con connettività ibrida utilizzando il comando gcloud compute network-endpoint-groups create

gcloud compute network-endpoint-groups create on-prem-service-neg \
    --network-endpoint-type=NON_GCP_PRIVATE_IP_PORT \
    --zone=us-central1-a \
    --network=producer-vpc

In Cloud Shell, aggiungi l'endpoint IP:Port on-premise al NEG ibrido.

gcloud compute network-endpoint-groups update on-prem-service-neg \
    --zone=us-central1-a \
    --add-endpoint="ip=192.168.1.5,port=80"

Configura il bilanciatore del carico

Nei passaggi seguenti configurerai il bilanciatore del carico (regola di inoltro) e lo assocerai al gruppo di endpoint di rete

All'interno di Cloud Shell crea il controllo di integrità a livello di regione passato al servizio on-premise.

gcloud compute health-checks create http http-health-check \
    --region=us-central1 \
    --use-serving-port

All'interno di Cloud Shell crea il servizio di backend per il backend on-premise sfruttando il NEG ibrido

 gcloud compute backend-services create on-premise-service-backend \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --protocol=HTTP \
      --health-checks=http-health-check \
      --health-checks-region=us-central1 \
      --region=us-central1

In Cloud Shell, aggiungi il backend del NEG ibrido al servizio di backend. Per RATE, inserisci il RATE massimo che deve essere gestito dal backend.

gcloud compute backend-services add-backend on-premise-service-backend \
    --region=us-central1 \
    --balancing-mode=RATE \
    --max-rate-per-endpoint=100 \
    --network-endpoint-group=on-prem-service-neg \
    --network-endpoint-group-zone=us-central1-a

In Cloud Shell, crea la mappa URL per instradare le richieste in entrata al servizio di backend

gcloud compute url-maps create on-prem-svc-url-map \
    --default-service on-premise-service-backend \
    --region=us-central1

Crea il proxy di destinazione HTTP

gcloud compute target-http-proxies create proxy-subnet-us-central\
    --url-map=on-prem-svc-url-map \
    --url-map-region=us-central1 \
    --region=us-central1

Creare una regola di forwarding per instradare le richieste in entrata al proxy. Non utilizzare la subnet solo proxy per creare la regola di inoltro.

 gcloud compute forwarding-rules create http-hybrid-neg-fwd-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=producer-vpc \
      --subnet=subnet-202 \
      --address=lb-ip \
      --ports=80 \
      --region=us-central1 \
      --target-http-proxy=proxy-subnet-us-central \
      --target-http-proxy-region=us-central1

4. Convalida il bilanciatore del carico

Dalla console Cloud, vai a Servizi di rete → Bilanciamento del carico → Bilanciatori del carico. Tieni presente che 1 NEG è "verde" che indicano che il controllo di integrità del servizio on-premise è andato a buon fine

bb5d117dee3b8b04.png

La selezione di "on-premise-svc-url-map" restituisce l'indirizzo IP del frontend e identifica il servizio di backend

128a7e85e8069097.png

5. Visualizzare le route apprese on-premise

Vai a Rete VPC → Route. Tieni presente che la subnet del servizio on-premise appresa è 192.168.1.0/27

d1ab51b79aeea9d8.png

6. Verifica la connettività al servizio on-premise

Dalla VPC dei produttori creeremo una VM per testare la connettività al servizio on-premise, dopodiché il collegamento del servizio sarà la configurazione successiva.

All'interno di Cloud Shell crea l'istanza di test nel VPC del producer

gcloud compute instances create test-box-us-central1 \
    --zone=us-central1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --subnet=subnet-201 \
    --no-address

Per consentire a IAP di connettersi alle tue istanze VM, crea una regola firewall che:

  • Si applica a tutte le istanze VM a cui vuoi rendere accessibile tramite IAP.
  • Consente il traffico in entrata dall'intervallo IP 35.235.240.0/20. Questo intervallo contiene tutti gli indirizzi IP che utilizzati da IAP per l'inoltro TCP.

All'interno di Cloud Shell crea l'istanza di test nel VPC del producer

gcloud compute firewall-rules create ssh-iap \
    --network producer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

Accedi a test-box-us-central1 utilizzando IAP in Cloud Shell per convalidare la connettività al servizio on-premise eseguendo un comando curl sull'indirizzo IP del bilanciamento del carico. Riprova se si verifica un timeout.

gcloud compute ssh test-box-us-central1 --project=$psclab --zone=us-central1-a --tunnel-through-iap

Esegui un comando curl per convalidare la connettività al servizio on-premise. Una volta convalidato, esci dalla VM per tornare al prompt di Cloud Shell. Sostituisci l'indirizzo IP del bilanciatore del carico interno in base all'output identificato nel passaggio 4.

user@test-box-us-central1:~$ curl -v 10.20.1.2
* Expire in 0 ms for 6 (transfer 0x55b7725c10f0)
*   Trying 10.20.1.2...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55b7725c10f0)
* Connected to 10.20.1.2 (10.20.1.2) port 80 (#0)
> GET / HTTP/1.1
> Host: 10.20.1.2
> User-Agent: curl/7.64.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< content-type: text/html; charset=utf-8
< accept-ranges: bytes
< etag: "3380914763"
< last-modified: Mon, 05 Dec 2022 15:10:56 GMT
< expires: Mon, 12 Dec 2022 03:17:20 GMT
< cache-control: max-age=0
< content-length: 37
< date: Mon, 12 Dec 2022 03:17:20 GMT
< server: lighttpd/1.4.53
< via: 1.1 google
< 
Welcome to my on-premise service!!

7. Crea il collegamento del servizio Private Service Connect

Nei passaggi successivi creeremo l'attacco al servizio. Una volta accoppiato con un endpoint consumer, l'accesso al servizio on-premise viene ottenuto senza dover eseguire il peering del VPC.

Crea il collegamento al servizio

All'interno di Cloud Shell crea il collegamento al servizio

gcloud compute service-attachments create service-1 --region=us-central1 --producer-forwarding-rule=http-hybrid-neg-fwd-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet

Facoltativo: se utilizzi un VPC condiviso, crea l'attacco del servizio nel progetto di servizio

gcloud compute service-attachments create service-1 --region=us-central1 --producer-forwarding-rule=http-hybrid-neg-fwd-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=projects/<hostproject>/regions/<region>/subnetworks/<natsubnet>

convalida il collegamento al servizio TCP

gcloud compute service-attachments describe service-1 --region us-central1

(Facoltativo) Vai a Servizi di rete → Private Service Connect per visualizzare il collegamento del servizio appena creato.

2f84578c9f2cc361.png

La selezione di Servizio-1 fornisce maggiori dettagli, tra cui l'URI del collegamento al servizio utilizzato dal consumer per stabilire una connessione Private Service Connect. Prendi nota dell'URI, poiché verrà utilizzato in un passaggio successivo.

41639cb160231275.png

Dettagli del collegamento del servizio: projects/<nome progetto>/regions/us-central1/serviceAttachments/service-1

8. Configurazione consumer

Crea il VPC del consumatore

In Cloud Shell, esegui queste operazioni

gcloud compute networks create consumer-vpc --project=$psclab --subnet-mode=custom

Crea le subnet consumer

In Cloud Shell crea la subnet GCE

gcloud compute networks subnets create subnet-101 --project=$psclab --range=10.100.1.0/24 --network=consumer-vpc --region=us-central1

In Cloud Shell crea la subnet endpoint consumer

gcloud compute networks subnets create subnet-102 --project=$psclab --range=10.100.2.0/24 --network=consumer-vpc --region=us-central1

Crea l'endpoint del consumatore (regola di forwarding)

In Cloud Shell, crea l'indirizzo IP statico che verrà utilizzato come endpoint consumer

gcloud compute addresses create psc-consumer-ip-1 --region=us-central1 --subnet=subnet-102 --addresses 10.100.2.10

Utilizziamo l'URI del collegamento al servizio generato in precedenza per creare l'endpoint consumer

Crea l'endpoint consumer in Cloud Shell

gcloud compute forwarding-rules create psc-consumer-1 --region=us-central1 --network=consumer-vpc --address=psc-consumer-ip-1 --target-service-attachment=projects/$psclab/regions/us-central1/serviceAttachments/service-1

9. Convalida Consumer Private Service Connect - VPC consumer

Dal VPC consumer, verifica la riuscita di una connessione ai servizi privati andando a Servizi di rete → Private Service Connect → Endpoint connessi. Prendi nota della connessione psc-consumer-1 stabilita e dell'indirizzo IP corrispondente creato in precedenza.

b91ee5d5c854e60b.png

Quando selezioni psc-consumer-1, vengono forniti i dettagli, incluso l'URI del collegamento al servizio

1dbc63217819dcd5.png

10. Convalida Consumer Private Service Connect - VPC producer

Dal VPC del produttore, verifica la riuscita di una connessione ai servizi privati andando a Servizi di rete → Private Service Connect → Servizio pubblicato. Tieni presente che la connessione service-1 pubblicata ora indica 1 regola di forwarding (endpoint di connessione).

951090b812a8d119.png

11. Creare una zona DNS privata e un record A

Crea la zona DNS privata mappata all'endpoint di connessione PSC per consentire l'accesso senza problemi al produttore da qualsiasi host all'interno del VPC.

Da Cloud Shell

gcloud dns --project=$psclab managed-zones create codelab-zone --description="" --dns-name="codelab.net." --visibility="private" --networks="consumer-vpc"

gcloud dns --project=$psclab record-sets create service1.codelab.net. --zone="codelab-zone" --type="A" --ttl="300" --rrdatas="10.100.2.10"

12. Convalida dell'accesso consumer al servizio Producers tramite la VM

Dal VPC consumer creeremo una VM per testare la connettività al servizio on-premise accedendo all'endpoint consumer service1.codelabs.net

All'interno di Cloud Shell crea l'istanza di test nel VPC consumer

gcloud compute instances create consumer-vm \
    --zone=us-central1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --subnet=subnet-101 \
    --no-address

Per consentire a IAP di connettersi alle tue istanze VM, crea una regola firewall che:

  • Si applica a tutte le istanze VM a cui vuoi rendere accessibile tramite IAP.
  • Consente il traffico in entrata dall'intervallo IP 35.235.240.0/20. Questo intervallo contiene tutti gli indirizzi IP che utilizzati da IAP per l'inoltro TCP.

In Cloud Shell, crea l'istanza di test nel VPC del consumatore

gcloud compute firewall-rules create ssh-iap-consumer \
    --network consumer-vpc \
    --allow tcp:22 \
    --source-ranges=35.235.240.0/20

Accedi a consumer-vm utilizzando IAP in Cloud Shell per convalidare la connettività al servizio on-premise eseguendo un curl sul servizio dns FQDN service1.codelab.net. Riprova in caso di timeout.

gcloud compute ssh consumer-vm --project=$psclab --zone=us-central1-a --tunnel-through-iap

Esegui un comando curl per convalidare la connettività al servizio on-premise. Una volta convalidato, esci dalla VM per tornare al prompt di Cloud Shell

In Cloud Shell, esegui un comando curl

$ curl -v service1.codelab.net
*   Trying 10.100.2.10...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x5650fc3390f0)
* Connected to service1.codelab.net (10.100.2.10) port 80 (#0)
> GET / HTTP/1.1
> Host: service1.codelab.net
> User-Agent: curl/7.64.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
< Accept-Ranges: bytes
< ETag: "3380914763"
< Last-Modified: Mon, 05 Dec 2022 15:10:56 GMT
< Expires: Mon, 05 Dec 2022 15:15:41 GMT
< Cache-Control: max-age=0
< Content-Length: 37
< Date: Mon, 05 Dec 2022 15:15:41 GMT
< Server: lighttpd/1.4.53
< 
Welcome to my on-premise service!!

Di seguito è riportato un esempio di acquisizione dal servizio on-premise. Tieni presente che l'indirizzo IP di origine 172.16.0.13 proviene dall'intervallo della subnet del proxy 172.16.0.0/23

30802152f51ff751.png

13. Pulizia del producer

Eliminare i componenti del produttore

Elimina le istanze di test nel VPC del produttore all'interno di Cloud Shell

gcloud compute instances delete test-box-us-central1 --zone=us-central1-a --quiet

gcloud compute service-attachments delete service-1 --region=us-central1 --quiet 

gcloud compute forwarding-rules delete http-hybrid-neg-fwd-rule --region=us-central1 --quiet

gcloud compute target-http-proxies delete proxy-subnet-us-central --region=us-central1 --quiet

gcloud compute url-maps delete on-prem-svc-url-map --region=us-central1 --quiet

gcloud compute backend-services delete on-premise-service-backend --region=us-central1 --quiet

gcloud compute network-endpoint-groups delete on-prem-service-neg --zone=us-central1-a --quiet

gcloud compute addresses delete lb-ip --region=us-central1 --quiet

gcloud compute networks subnets delete psc-nat-subnet subnet-201 subnet-202 proxy-subnet-us-central --region=us-central1 --quiet

gcloud compute firewall-rules delete ssh-iap fw-allow-proxy-only-subnet allow-to-ingress-nat-subnet fw-allow-health-check --quiet

gcloud compute health-checks delete http-health-check --region=us-central1 --quiet

gcloud compute networks delete producer-vpc --quiet

14. Pulizia dei dati dei consumatori

Eliminare i componenti consumer

In Cloud Shell, elimina le istanze di test nella VPC consumer

gcloud compute instances delete consumer-vm --zone=us-central1-a --quiet

gcloud compute forwarding-rules delete psc-consumer-1 --region=us-central1 --quiet

gcloud compute addresses delete psc-consumer-ip-1 --region=us-central1 --quiet

gcloud compute networks subnets delete subnet-101 subnet-102 --region=us-central1 --quiet

gcloud compute firewall-rules delete ssh-iap-consumer --quiet

gcloud dns record-sets delete service1.codelab.net --type=A --zone=codelab-zone --quiet

gcloud dns managed-zones delete codelab-zone --quiet 

gcloud compute networks delete consumer-vpc --quiet 

15. Complimenti

Congratulazioni, hai configurato e convalidato Private Service Connect con un bilanciatore del carico HTTP(S) interno.

Hai creato l'infrastruttura del producer e hai aggiunto un collegamento a un servizio nel VPC del producer che punta a un servizio on-premise. Hai imparato a creare un endpoint consumer nel VPC consumer che consenta la connettività al servizio on-premise.

Passaggi successivi

Dai un'occhiata ad alcuni di questi codelab…

Letture e video di approfondimento

Documentazione di riferimento