Mappatura delle porte di Private Service Connect per i producer di servizi

1. Introduzione

Con Private Service Connect, i producer di servizi possono esporre i servizi in un ambiente VPC tramite un collegamento di servizio e consentire ai consumer in un altro ambiente VPC di accedere a questi servizi tramite un endpoint Private Service Connect. A volte questi servizi di produzione sono progettati come cluster di VM, con ogni VM che espone gli stessi servizi su numeri di porta identici. In precedenza, questi design dei servizi richiedevano il deployment di più endpoint Private Service Connect lato consumer o l'utilizzo del forwarding IP lato producer per assicurarsi che la VM producer corretta fosse scelta come target.

Private Service Connect ora può scegliere come target la destinazione corretta in modo nativo utilizzando la mappatura delle porte. In questo lab scoprirai i casi d'uso in cui è richiesta questa funzionalità e come eseguire il deployment di un NEG di mappatura delle porte in un carico di lavoro Private Service Connect.

Cosa imparerai a fare

  • Casi d'uso della mappatura delle porte Private Service Connect
  • Vantaggi principali della mappatura delle porte PSC
  • Requisiti di rete
  • Crea un servizio producer Private Service Connect utilizzando la mappatura delle porte.
  • Creare un endpoint Private Service Connect
  • Effettuare chiamate tramite un endpoint Private Service Connect a un servizio producer

Che cosa ti serve

  • Progetto Google Cloud con autorizzazioni di proprietario

2. Casi d'uso della mappatura delle porte Private Service Connect

La funzionalità di mappatura delle porte utilizza un gruppo di endpoint di rete (NEG) di mappatura delle porte specifico per i casi d'uso PSC.

I tipi più comuni di produttori che possono trarre vantaggio dall'utilizzo della mappatura delle porte sono i produttori di database NoSQL e i produttori Kafka. Tuttavia, qualsiasi produttore che richieda un cluster di VM che esponga gli stessi servizi su porte identiche con requisiti di mappatura delle VM specifici può utilizzare questa funzionalità.

Il producer definisce la mappatura tra una porta client e una VM producer + porta di destinazione. Il produttore deve quindi condividere queste informazioni con il consumatore. Il consumatore utilizza le porte predefinite per identificare in modo univoco la VM del produttore + la porta di destinazione che deve raggiungere. La porta utilizzata dal consumatore è diversa da quella utilizzata dal produttore.

Vantaggi principali della mappatura delle porte PSC

  • Semplice: i producer eseguono il deployment dei componenti PSC con una mappatura delle porte e i consumer eseguono il deployment di un endpoint PSC. PSC gestisce automaticamente la Network Address Translation.
  • Economico: non richiede risorse PSC aggiuntive o cicli della CPU della VM del produttore. I prezzi sono gli stessi di altri tipi di implementazioni di PSC
  • Elevate prestazioni:la mappatura delle porte offre lo stesso throughput in linea e la stessa latenza ridotta delle altre modalità PSC
  • Scalabilità ed efficienza in termini di IP: un indirizzo IP della VPC del consumatore può accedere a un massimo di 1000 VM del produttore e 1000 mappature delle porte

3. Requisiti di rete

  • La mappatura delle porte richiede l'utilizzo di un bilanciatore del carico di rete passthrough interno come bilanciatore del carico del produttore.
  • Solo gli endpoint PSC possono essere utilizzati con il mapping delle porte (non i backend o l'interfaccia PSC).
  • I NEG di mappatura delle porte sono costrutti regionali.
  • I NEG di mappatura delle porte possono essere utilizzati solo tramite una connessione PSC. Non funzioneranno se la VM client chiama direttamente la regola di inoltro del bilanciatore del carico del produttore. Questo si riflette nel modo in cui il servizio di produzione viene testato in questo codelab.
  • L'endpoint PSC e lo stack di servizi del producer devono trovarsi in VPC diversi.

4. Topologia del codelab

ad37cfc003475b7c.png

Nella VPC producer verranno create due VM che eseguiranno ciascuna due server web, uno sulla porta 1000 e uno sulla porta 2000. Testeremo ogni servizio prima di configurare il NEG di mappatura delle porte, il bilanciatore del carico di rete passthrough interno e l'attacco del servizio.

Nel VPC consumer, configureremo un endpoint PSC e testeremo la connettività al servizio producer da una VM client.

5. Configurazione e requisiti

Configurazione dell'ambiente a tuo ritmo

  1. Accedi alla console Google Cloud e crea un nuovo progetto o riutilizzane uno esistente. Se non hai ancora un account Gmail o Google Workspace, devi crearne uno.

fbef9caa1602edd0.png

a99b7ace416376c4.png

5e3ff691252acf41.png

  • Il nome del progetto è il nome visualizzato per i partecipanti al progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google. Puoi sempre aggiornarlo.
  • L'ID progetto è univoco per tutti i progetti Google Cloud ed è immutabile (non può essere modificato dopo essere stato impostato). La console Cloud genera automaticamente una stringa univoca; di solito non ti interessa quale sia. Nella maggior parte dei codelab, dovrai fare riferimento al tuo ID progetto (in genere identificato come PROJECT_ID). Se l'ID generato non ti piace, puoi generarne un altro casuale. In alternativa, puoi provare il tuo e vedere se è disponibile. Non può essere modificato dopo questo passaggio e rimane invariato per tutta la durata del progetto.
  • Per tua informazione, esiste un terzo valore, un Numero progetto, utilizzato da alcune API. Scopri di più su tutti e tre questi valori nella documentazione.
  1. Successivamente, dovrai abilitare la fatturazione nella console Cloud per utilizzare le API/risorse Cloud. La partecipazione a questo codelab non ha costi, o quasi. Per arrestare le risorse ed evitare di incorrere in fatturazione al termine di questo tutorial, puoi eliminare le risorse che hai creato o il progetto. I nuovi utenti di Google Cloud sono idonei al programma Prova senza costi di 300$.

Avvia Cloud Shell

Sebbene Google Cloud possa essere utilizzato da remoto dal tuo laptop, in questo codelab utilizzerai Google Cloud Shell, un ambiente a riga di comando in esecuzione nel cloud.

Nella console Google Cloud, fai clic sull'icona di Cloud Shell nella barra degli strumenti in alto a destra:

55efc1aaa7a4d3ad.png

Dovrebbe richiedere solo pochi istanti per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere qualcosa di simile a questo:

7ffe5cbb04455448.png

Questa macchina virtuale contiene tutti gli strumenti di sviluppo di cui avrai bisogno. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni e l'autenticazione di rete. Tutto il lavoro in questo codelab può essere svolto in un browser. Non devi installare nulla.

6. Prima di iniziare

Abilita API

In Cloud Shell, assicurati che l'ID progetto sia configurato

gcloud config list project
gcloud config set project [YOUR-PROJECT-ID]
project=[YOUR-PROJECT-ID]
region=us-central1
zone=us-central1-a
echo $project
echo $region
echo $zone

Attivare tutti i servizi necessari

gcloud services enable compute.googleapis.com

7. Crea la rete VPC del producer

Rete VPC

Da Cloud Shell

gcloud compute networks create producer-vpc --subnet-mode custom

Creare subnet

Da Cloud Shell

gcloud compute networks subnets create producer-service-subnet --network producer-vpc --range 10.0.0.0/24 --region $region --enable-private-ip-google-access

gcloud compute networks subnets create psc-nat-subnet --network producer-vpc --range 10.100.100.0/24 --region $region --purpose=PRIVATE_SERVICE_CONNECT

La subnet del PSC verrà associata al collegamento del servizio PSC ai fini della Network Address Translation. Per i casi d'uso di produzione, le dimensioni di questa subnet devono essere adeguate per supportare la quantità di traffico in entrata da tutti gli endpoint PSC collegati. Per ulteriori informazioni, consulta la documentazione relativa al dimensionamento delle sottoreti NAT PSC.

Creare criteri firewall di rete e regole firewall

Da Cloud Shell

gcloud compute network-firewall-policies create producer-vpc-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy producer-vpc-policy --network producer-vpc --name network-producer-vpc --global-firewall-policy

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 accedere 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.

Da Cloud Shell

gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy producer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22  --global-firewall-policy

La seguente regola firewall consente il traffico sulle porte TCP 1000-2000 dalla subnet PSC a tutte le istanze della rete. In un ambiente di produzione, questa regola firewall deve essere limitata solo alle istanze associate al servizio del produttore specifico.

Da Cloud Shell

gcloud compute network-firewall-policies rules create 2000 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic from PSC NAT subnet" --direction INGRESS --src-ip-ranges 10.100.100.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy

La seguente regola firewall consente tutto il traffico all'interno della subnet dei servizi sulle porte TCP 1000-2000. Questa regola verrà utilizzata per verificare il corretto funzionamento del nostro servizio per i produttori.

Da Cloud Shell

gcloud compute network-firewall-policies rules create 2001 --action ALLOW --firewall-policy producer-vpc-policy --description "allow traffic within the service subnet" --direction INGRESS --src-ip-ranges 10.0.0.0/24 --layer4-configs tcp:1000-2000 --global-firewall-policy

Crea e configura le VM di produzione

Creare VM

Da Cloud Shell

gcloud compute instances create portmap-vm1 --zone=$zone --subnet=producer-service-subnet --no-address

gcloud compute instances create portmap-vm2 --zone=$zone --subnet=producer-service-subnet --no-address

gcloud compute instances create test-client-vm --zone=$zone --subnet=producer-service-subnet --no-address

Nella sezione seguente, avvia il server HTTP sulle porte 1000 e 2000 su ogni VM Producer.

Configurare le VM

Da Cloud Shell

gcloud compute ssh --zone $zone "portmap-vm1" --tunnel-through-iap --project $project

In Cloud Shell dalla sessione portmap-vm1

mkdir 1000
cd 1000
echo "portmap-vm1 1000">index.html
sudo python3 -m http.server 1000 &
cd ..
mkdir 2000
cd 2000
echo "portmap-vm1 2000">index.html
sudo python3 -m http.server 2000 &

Aprire una nuova finestra Cloud Shell

Inizia reimpostando le variabili. In Cloud Shell

project=[YOUR-PROJECT-ID]
region=us-central1
zone=us-central1-a
echo $project
echo $region
echo $zone

gcloud compute ssh --zone $zone "portmap-vm2" --tunnel-through-iap --project $project

In Cloud Shell dalla sessione portmap-vm2

mkdir 1000
cd 1000
echo "portmap-vm2 1000">index.html
sudo python3 -m http.server 1000 &
cd ..
mkdir 2000
cd 2000
echo "portmap-vm2 2000">index.html
sudo python3 -m http.server 2000 &

8. Test Producer Service

Per prima cosa, dobbiamo ottenere gli indirizzi IP delle istanze di portmap. Prendi nota di entrambi gli indirizzi IP.

Aprire una nuova finestra Cloud Shell

Inizia reimpostando le variabili. In Cloud Shell

project=[YOUR-PROJECT-ID]
region=us-central1
zone=us-central1-a
echo $project
echo $region
echo $zone

gcloud compute instances describe portmap-vm1 \
  --format='get(networkInterfaces[0].networkIP)' --zone $zone

gcloud compute instances describe portmap-vm2\
  --format='get(networkInterfaces[0].networkIP)' --zone $zone

Accedi all'istanza di test. In Cloud Shell

gcloud compute ssh --zone $zone "test-client-vm" --tunnel-through-iap --project $project

curl [portmap-vm1 IP]:1000

Risultato previsto

portmap-vm1 1000

In Cloud Shell

curl [portmap-vm1 IP]:2000

Risultato previsto

portmap-vm1 2000

In Cloud Shell

curl [portmap-vm2 IP]:1000

Risultato previsto

portmap-vm2 1000

In Cloud Shell

curl [portmap-vm2 IP]:2000

Risultato previsto

portmap-vm2 2000

Esci da test-client-vm

9. Creare un servizio di produzione con NEG Portmap

Creare componenti del bilanciatore del carico

Da Cloud Shell

gcloud compute network-endpoint-groups create portmap-neg --region=$region --network=producer-vpc --subnet=producer-service-subnet --network-endpoint-type=GCE_VM_IP_PORTMAP

Aggiungi endpoint al NEG Portmap per creare il mapping dalla porta client alla porta del produttore. Il produttore crea questa mappatura e avrà il proprio metodo per comunicare queste informazioni ai consumatori. La mappatura delle porte specifiche non viene condivisa tramite PSC.

In Cloud Shell

gcloud compute network-endpoint-groups update portmap-neg --region=$region --add-endpoint=client-destination-port=1001,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=1000 --add-endpoint=client-destination-port=1002,instance=projects/$project/zones/$zone/instances/portmap-vm1,port=2000 --add-endpoint=client-destination-port=1003,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=1000 --add-endpoint=client-destination-port=1004,instance=projects/$project/zones/$zone/instances/portmap-vm2,port=2000

Completa la configurazione del bilanciatore del carico.

In Cloud Shell

gcloud compute backend-services create portmap-bes --load-balancing-scheme=internal --region=$region --network=producer-vpc

gcloud compute backend-services add-backend portmap-bes --network-endpoint-group=portmap-neg --network-endpoint-group-region=$region

gcloud compute forwarding-rules create portmap-fr --load-balancing-scheme=INTERNAL --network=producer-vpc --subnet=producer-service-subnet --ports=ALL --region=$region --backend-service=portmap-bes

Creare un collegamento al servizio

Da Cloud Shell

gcloud compute service-attachments create portmap-service-attachment --region=$region --producer-forwarding-rule=portmap-fr --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet

Successivamente, recupera e prendi nota dell'URI del collegamento a un servizio per configurare l'endpoint PSC nell'ambiente consumer.

In Cloud Shell

gcloud compute service-attachments describe portmap-service-attachment --region=$region

Esempio di output previsto

connectionPreference: ACCEPT_AUTOMATIC
creationTimestamp: '2024-07-19T10:02:29.432-07:00'
description: ''
enableProxyProtocol: false
fingerprint: LI8D6JNQsLA=
id: '6207474793859982026'
kind: compute#serviceAttachment
name: portmap-service-attachment
natSubnets:
- https://www.googleapis.com/compute/v1/projects/$project/regions/$zone/subnetworks/psc-nat-subnet
pscServiceAttachmentId:
  high: '94288091358954472'
  low: '6207474793859982026'
reconcileConnections: false
region: https://www.googleapis.com/compute/v1/projects/$project/regions/$region
selfLink: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/serviceAttachments/portmap-service-attachment
targetService: https://www.googleapis.com/compute/v1/projects/$project/regions/$region/forwardingRules/portmap-fr

10. Crea la rete VPC consumer

Rete VPC

Da Cloud Shell

gcloud compute networks create consumer-vpc --subnet-mode custom

Crea subnet

Da Cloud Shell

gcloud compute networks subnets create consumer-client-subnet --network consumer-vpc --range=10.0.0.0/24 --region $region --enable-private-ip-google-access

Creare criteri firewall di rete e regole firewall

Da Cloud Shell

gcloud compute network-firewall-policies create consumer-vpc-policy --global

gcloud compute network-firewall-policies associations create --firewall-policy consumer-vpc-policy --network consumer-vpc --name network-consumer-vpc --global-firewall-policy

gcloud compute network-firewall-policies rules create 1000 --action ALLOW --firewall-policy consumer-vpc-policy --description "SSH with IAP" --direction INGRESS --src-ip-ranges 35.235.240.0/20 --layer4-configs tcp:22  --global-firewall-policy

Per la rete del consumatore è necessario solo l'accesso SSH da IAP.

11. Crea VM, endpoint PSC e verifica la connettività

A questo punto, dovrebbero essere aperte tre finestre di Cloud Shell. Dovresti avere una sessione aperta con portmap-vm1. Una deve avere una sessione aperta con portmap-vm2 e l'altra deve essere la sessione di lavoro.

Crea VM di test

Da Cloud Shell

gcloud compute instances create consumer-client-vm --zone $zone --subnet=consumer-client-subnet --no-address

Crea endpoint PSC

Da Cloud Shell

gcloud compute addresses create psc-endpoint-ip --region=$region --subnet=consumer-client-subnet --addresses 10.0.0.10

gcloud compute forwarding-rules create psc-portmap-endpoint --region=$region --network=consumer-vpc --address=psc-endpoint-ip --target-service-attachment=[SERVICE ATTACHMENT URI]

Testa la connettività

Da Cloud Shell

gcloud compute ssh --zone $zone "consumer-client-vm" --tunnel-through-iap --project $project

curl 10.0.0.10:1001

Risultato previsto

portmap-vm1 1000

Da Cloud Shell

curl 10.0.0.10:1002

Risultato previsto

portmap-vm1 2000

Da Cloud Shell

curl 10.0.0.10:1003

Risultato previsto

portmap-vm2 1000

Da Cloud Shell

curl 10.0.0.10:1004

Risultato previsto

portmap-vm2 2000

12. Procedura di pulizia

Esci dall'istanza VM (tutte le finestre)

exit

Eliminare i componenti del lab da un singolo terminale Cloud Shell

gcloud compute forwarding-rules delete psc-portmap-endpoint --region=$region -q

gcloud compute addresses delete psc-endpoint-ip --region=$region -q

gcloud compute instances delete consumer-client-vm --zone=$zone -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy=consumer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=consumer-vpc-policy  --name=network-consumer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete consumer-vpc-policy --global -q

gcloud compute networks subnets delete consumer-client-subnet  --region=$region -q

gcloud compute networks delete consumer-vpc -q

gcloud compute service-attachments delete portmap-service-attachment --region=$region -q

gcloud compute forwarding-rules delete portmap-fr --region=$region -q

gcloud compute backend-services delete portmap-bes --region=$region -q

gcloud compute network-endpoint-groups delete portmap-neg --region=$region -q

gcloud compute instances delete test-client-vm --zone=$zone -q

gcloud compute instances delete portmap-vm2 --zone=$zone -q

gcloud compute instances delete portmap-vm1 --zone=$zone -q

gcloud compute network-firewall-policies rules delete 2001 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 2000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies rules delete 1000 --firewall-policy producer-vpc-policy --global-firewall-policy -q

gcloud compute network-firewall-policies associations delete --firewall-policy=producer-vpc-policy  --name=network-producer-vpc --global-firewall-policy -q

gcloud compute network-firewall-policies delete producer-vpc-policy --global -q

gcloud compute networks subnets delete psc-nat-subnet --region $region -q

gcloud compute networks subnets delete producer-service-subnet --region $region -q

gcloud compute networks delete producer-vpc -q

13. Complimenti!

Complimenti per aver completato il codelab.

Argomenti trattati

  • Casi d'uso della mappatura delle porte Private Service Connect
  • Vantaggi principali della mappatura delle porte PSC
  • Requisiti di rete
  • Crea un servizio producer Private Service Connect utilizzando la mappatura delle porte.
  • Creare un endpoint Private Service Connect
  • Effettuare chiamate tramite un endpoint Private Service Connect a un servizio producer