Utilizzo di Private Service Connect per pubblicare e utilizzare servizi con GKE

1. Introduzione

Private Service Connect consente a un producer di servizi di offrire servizi privatamente a un consumer di servizi. Private Service Connect offre i seguenti vantaggi:

  • Una rete VPC del producer di servizi può supportare più di un consumer di servizi.
  • Ogni consumatore si connette a un indirizzo IP interno da lui definito. Private Service Connect esegue Network Address Translation (NAT) per instradare la richiesta al producer di servizi.

45b90d50690dd111.png

Figura 2. Private Service Connect utilizza endpoint e collegamenti ai servizi per consentire ai consumer di servizi di inviare traffico dalla rete VPC del consumer ai servizi nella rete VPC del producer di servizi (fai clic per ingrandire).

Cosa imparerai a fare

  • Vantaggi di Private Service Connect
  • Concetti chiave per i consumer di servizi
  • Concetti chiave per i producer di servizi
  • Crea un ambiente producer
  • Esponi il servizio (ambiente producer) tramite il collegamento a un servizio
  • Crea un ambiente consumer
  • Crea una regola di forwarding nella rete consumer
  • Convalidare l'accesso dei consumatori
  • Abilita il controllo dell'accesso ai criteri
  • Utilizza una regola firewall in uscita per bloccare l'accesso a una regola di forwarding consumer

Che cosa ti serve

  • Conoscenza del deployment di cluster e servizi GKE
  • Conoscenza dei bilanciatori del carico interni
  • Possibilità di creare VPC in due progetti
  • Può creare un cluster GKE

2. Vantaggi di Private Service Connect

Con PSC, hai diversi vantaggi rispetto all'utilizzo del peering VPC:

Migliore controllo dello spazio IP privato

  • In qualità di consumer di servizi, puoi controllare l'indirizzo IP privato utilizzato per la connessione al servizio gestito a cui vuoi accedere.
  • In qualità di consumer di servizi, non devi preoccuparti di prenotare intervalli di indirizzi IP privati per i servizi di backend utilizzati nel tuo VPC. Devi solo scegliere un indirizzo IP dalla tua subnet per connetterti ai servizi producer.
  • In qualità di producer di servizi, puoi scegliere di eseguire il deployment di un modello multi-tenant, in cui il VPC contiene servizi che gestiscono più VPC consumer. I consumer con intervalli di subnet sovrapposti non sono più un problema.
  • Come fornitore di servizi, puoi scalare il tuo servizio fino a tutte le istanze VM necessarie, senza dover contattare il tuo consumer per richiedere altri indirizzi IP.

Sicurezza e isolamento migliorati

  • In qualità di consumer di servizi, solo tu puoi avviare la comunicazione con il producer di servizi. Questa connettività unidirezionale semplifica drasticamente la configurazione del firewall, ma riduce anche il rischio di traffico non autorizzato proveniente dal producer di servizi.
  • In qualità di producer di servizi, non devi modificare le regole firewall in base agli intervalli di subnet nel VPC del consumer. Puoi semplicemente creare regole firewall per l'intervallo di indirizzi IP NAT configurato per il tuo servizio.

Maggiore scalabilità

  • PSC consente una progettazione a scalabilità elevata supportando migliaia di consumer e consente ai producer di servizi di offrire servizi multi-tenant o single-tenant altamente scalabili.
  • In qualità di consumer di servizi che utilizza Private Service Connect, puoi creare risorse secondo le necessità nel tuo VPC. La portata di questo errore non è influenzata dal numero di risorse di questo tipo create nel VPC del producer.

3. Concetti chiave per i consumer di servizi

Puoi utilizzare gli endpoint di Private Service Connect per consumare i servizi al di fuori della tua rete VPC. I consumer di servizi creano endpoint Private Service Connect che si connettono a un servizio di destinazione.

Endpoint

Puoi utilizzare gli endpoint Private Service Connect per connetterti a un servizio di destinazione. Gli endpoint hanno un indirizzo IP interno nella rete VPC e si basano sulla risorsa della regola di forwarding.

Invii il traffico all'endpoint, che lo inoltra alle destinazioni al di fuori della tua rete VPC.

Obiettivi

Gli endpoint Private Service Connect hanno una destinazione, ovvero il servizio a cui vuoi connetterti:

  • Un pacchetto API:
  • Tutte le API: la maggior parte delle API di Google
  • VPC-SC: API supportate dai Controlli di servizio VPC
  • Un servizio pubblicato in un'altra rete VPC. Questo servizio può essere gestito dalla tua organizzazione o da una terza parte.

Servizio pubblicato

Per connettere il tuo endpoint al servizio di un producer di servizi, è necessario il collegamento del servizio per il servizio. L'URI del collegamento al servizio ha questo formato: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

4. Concetti chiave per i producer di servizi

Per rendere un servizio disponibile per i consumer, puoi creare una o più subnet dedicate da utilizzare per la Network Address Translation (NAT) degli indirizzi IP consumer. Quindi creerai un collegamento del servizio che fa riferimento a queste subnet.

Subnet Private Service Connect

Per esporre un servizio, il producer di servizi crea prima una o più subnet con Private Service Connect specifiche.

Quando una richiesta viene inviata da una rete VPC consumer, l'indirizzo IP di origine del consumer viene convertito utilizzando NAT (SNAT) di origine in un indirizzo IP selezionato da una delle subnet Private Service Connect.

Se desideri conservare le informazioni sull'indirizzo IP della connessione del consumer, consulta Visualizzazione delle informazioni della connessione del consumer.

Queste subnet non possono essere utilizzate per risorse come istanze VM o regole di forwarding. Le subnet vengono utilizzate solo per fornire indirizzi IP per la SNAT delle connessioni consumer in entrata.

La subnet Private Service Connect deve contenere almeno un indirizzo IP per ogni 63 VM consumer,in modo che a ciascuna VM consumer siano allocate 1024 tuple di origine per la traduzione degli indirizzi di rete.

La dimensione minima di una subnet Private Service Connect è /24.

Collegamenti dei servizi

I producer di servizi espongono il proprio servizio tramite il collegamento a un servizio.

  • Per esporre un servizio, un producer di servizi crea un collegamento al servizio che fa riferimento alla regola di forwarding del bilanciatore del carico del servizio.
  • Per accedere a un servizio, un consumer di servizi crea un endpoint che fa riferimento al collegamento al servizio.

Preferenze di connessione

Quando crei un servizio, scegli come renderlo disponibile. Le opzioni disponibili sono due:

  • Accetta automaticamente le connessioni per tutti i progetti: qualsiasi consumer di servizi può configurare un endpoint e connettersi automaticamente al servizio.
  • Accetta connessioni per i progetti selezionati: i consumer dei servizi configurano un endpoint per la connessione al servizio e il producer di servizi accetta o rifiuta le richieste di connessione.

Requisiti e limitazioni

  • Si applicano limitazioni per Private Service Connect.
  • Puoi creare un collegamento a un servizio in GKE 1.21.4-gke.300 e versioni successive.
  • Non puoi utilizzare la stessa subnet in più configurazioni di collegamenti ai servizi.
  • Devi creare un servizio GKE che utilizzi un bilanciatore del carico TCP/UDP interno.

5. Ambiente di test

La rete consumer è costituita da un indirizzo IP statico utilizzato per generare richieste al producer di servizi, oltre al collegamento del servizio di destinazione che viene mappato al collegamento al servizio del producer (servizio pubblicato).

1ce5607c0c56d77d.jpeg

Ora diamo un'occhiata alla rete di produttori. Puoi notare che la rete dei producer non ha una mappatura alla rete dei consumer. La rete del producer contiene invece un collegamento a un servizio (servizio pubblicato) utilizzato dal consumer per i servizi. Il collegamento al servizio del producer è esposto da un bilanciatore del carico L4 in entrata di GKE (servizio pubblicato) che consente la comunicazione con i pod GKE e applicazioni associate.

La subnet NAT viene utilizzata quando viene inviata una richiesta da una rete VPC consumer. L'indirizzo IP di origine del consumer viene convertito utilizzando NAT (SNAT) di origine in un indirizzo IP selezionato da una delle subnet Private Service Connect.

Queste subnet non possono essere utilizzate per risorse come istanze VM o regole di forwarding. Le subnet vengono utilizzate solo per fornire indirizzi IP per la SNAT delle connessioni consumer in entrata.

Per saperne di più su L4ILB per GKE Private Service Connect e ottenere l'accesso diretto ai contenuti utilizzati per questo lab, fai riferimento a quanto segue.

Configurazione dell'ambiente da seguire in modo autonomo

  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.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • Il Nome progetto è il nome visualizzato dei partecipanti del progetto. Si tratta di una stringa di caratteri non utilizzata dalle API di Google e può essere aggiornata in qualsiasi momento.
  • L'ID progetto deve essere univoco in 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 importa cosa sia. Nella maggior parte dei codelab, devi fare riferimento all'ID progetto (che solitamente è identificato come PROJECT_ID), quindi, se non ti piace, generane un altro a caso oppure puoi fare un tentativo personalizzato e controllare se è disponibile. Poi c'è "congelato" dopo la creazione del progetto.
  • C'è un terzo valore, il numero di 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 risorse/le API Cloud. Eseguire questo codelab non dovrebbe costare molto. Per arrestare le risorse in modo da non incorrere in fatturazione oltre questo tutorial, segui eventuali "pulizie" istruzioni riportate alla fine del codelab. I nuovi utenti di Google Cloud sono idonei al programma prova senza costi di 300$.

Avvia Cloud Shell

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

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

bce75f34b2c53987.png

Dovrebbe richiedere solo qualche istante per eseguire il provisioning e connettersi all'ambiente. Al termine, dovresti vedere una schermata simile al seguente:

f6ef2b5f13479f3a.png

Questa macchina virtuale viene caricata con tutti gli strumenti di sviluppo necessari. Offre una home directory permanente da 5 GB e viene eseguita su Google Cloud, migliorando notevolmente le prestazioni di rete e l'autenticazione. Tutto il lavoro in questo lab può essere svolto semplicemente con un browser.

6. Prima di iniziare

Il codelab richiede due progetti, anche se non è un requisito per PSC. Prendi nota dei riferimenti per supportare progetti singoli o multipli.

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
consumerproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

Più progetti - Aggiorna il progetto per supportare la rete del producer

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

Tieni presente la seguente convenzione sui codici di colorazione:

f251ebb137e37136.png

7. Crea rete VPC dei producer

afe738fc869f0d6e.png

Rete VPC

Da Cloud Shell

gcloud compute networks create gke-producer-l4-vpc --project=$prodproject --subnet-mode=custom 

Crea una subnet del cluster GKE

Da Cloud Shell

gcloud compute networks subnets create node-subnet1 --project=$prodproject --range=192.168.10.0/24 --network=gke-producer-l4-vpc --region=us-central1 --secondary-range=pod=10.10.10.0/24,service=10.10.20.0/24 --enable-private-ip-google-access

Crea un cluster GKE

Da Cloud Shell

gcloud container clusters create gke-psc-l4 \
    --release-channel=rapid \
    --enable-ip-alias \
    --zone=us-central1-a \
    --network gke-producer-l4-vpc \
    --num-nodes 1 \
    --subnetwork node-subnet1 \
    --cluster-secondary-range-name pod \
    --services-secondary-range-name service

Crea una subnet per Private Service Connect (subnet NAT)

Devi creare una o più subnet dedicate da utilizzare con Private Service Connect. Se utilizzi la console Google Cloud per pubblicare un servizio, puoi creare le subnet durante la procedura.

Per informazioni sulle subnet Private Service Connect, vedi Subnet Private Service Connect.

Da Cloud Shell

gcloud beta compute networks subnets create gke-nat-subnet \
    --project $prodproject \
    --network gke-producer-l4-vpc \
    --region us-central1 \
    --range 100.100.10.0/24 \
    --purpose PRIVATE_SERVICE_CONNECT

8. Esegui il deployment di un carico di lavoro e dei servizi

Il manifest seguente descrive un deployment che esegue un'immagine container di applicazione web di esempio. Salva il manifest come my-deployment.yaml da Cloud Shell

apiVersion: apps/v1
kind: Deployment
metadata:
  name: psc-ilb
spec:
  replicas: 3
  selector:
    matchLabels:
      app: psc-ilb
  template:
    metadata:
      labels:
        app: psc-ilb
    spec:
      containers:
      - name: whereami
        image: gcr.io/google-samples/whereami:v1.2.1
        ports:
          - name: http
            containerPort: 8080
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 5
          timeoutSeconds: 1

Applica il manifest al cluster da Cloud Shell

kubectl apply -f my-deployment.yaml

Creare un servizio

Il manifest seguente descrive un servizio che crea un bilanciatore del carico TCP/UDP interno sulla porta TCP 8080. Salva il manifest come my-service.yaml da Cloud Shell.

apiVersion: v1
kind: Service
metadata:
  name: gke-l4-psc
  annotations:
    networking.gke.io/load-balancer-type: "Internal"
spec:
  type: LoadBalancer
  selector:
    app: psc-ilb
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

Applica il manifest al cluster da Cloud Shell

kubectl apply -f my-service.yaml

Crea ServiceAttachment

Il manifest seguente descrive un ServiceAttachment che espone il servizio che hai creato ai consumer del servizio. Salva il manifest come my-psc.yaml da Cloud Shell.

apiVersion: networking.gke.io/v1beta1
kind: ServiceAttachment
metadata:
 name: emoji-sa
 namespace: default
spec:
 connectionPreference: ACCEPT_AUTOMATIC
 natSubnets:
 - gke-nat-subnet
 proxyProtocol: false
 resourceRef:
   kind: Service
   name: gke-l4-psc

Applica il manifest al cluster da Cloud Shell

kubectl apply -f my-psc.yaml

ServiceAttachment include i seguenti campi:

  • connectionPreference: la preferenza di connessione che determina il modo in cui i clienti si connettono al servizio. Puoi utilizzare l'approvazione automatica del progetto utilizzando ACCEPT_AUTOMATIC o l'approvazione esplicita del progetto utilizzando ACCEPT_MANUAL. Per maggiori informazioni, consulta la pagina relativa alla pubblicazione di servizi tramite Private Service Connect.
  • natSubnets: un elenco di nomi di risorse della subnet da utilizzare per il collegamento al servizio.
  • proxyProtocol: se impostato su true, l'IP di origine consumer e l'ID connessione Private Service Connect sono disponibili nelle richieste. Questo campo è facoltativo e il valore predefinito è false se non viene specificato.
  • consumerAllowList: l'elenco di progetti consumer a cui è consentito connettersi a ServiceAttachment. Questo campo può essere utilizzato solo se connectionPreference è ACCEPT_MANUAL. Per ulteriori informazioni su questo campo e su altre opzioni, consulta l'articolo sulla pubblicazione di servizi tramite Private Service Connect.

Convalida producer

Visualizzazione dei dettagli del collegamento al servizio

Puoi visualizzare i dettagli di un ServiceAttachment utilizzando il seguente comando da Cloud Shell

kubectl describe serviceattachment emoji-sa

Visualizza il bilanciatore del carico interno di GKE L4

Dalla console Cloud, vai a Servizi di rete → Bilanciamento del carico → Frontend

Identifica l'indirizzo IP del frontend che si allinea nella subnet del nodo precedentemente definita 192.168.10.0/24 (nota nello screenshot di seguito, il tuo indirizzo IP può variare).

ed7a25ed4774977b.png

Visualizza il servizio pubblicato

Nella console Cloud, vai a Servizi di rete → Private Service Connect → Servizi pubblicati

Identifica il servizio con la rete utilizzata nel lab, gke-producer-l4-vpc, nota sullo screenshot riportato di seguito, anche se i valori dei servizi e di destinazione potrebbero essere diversi.

5a00836ee514b918.png

Fai clic sul nome del servizio per passare alla schermata seguente; prendi nota dei dettagli del collegamento del servizio inseriti nelle Informazioni di base. Nota anche "Progetti collegati" è vuoto perché il consumer deve ancora registrarsi al servizio. ACCETTA e RIFIUTA rimarranno in grigio poiché la Preferenza di connessione è impostata su "ACCEPT_AUTOMATICALLY"", questa opzione può essere modificata in qualsiasi momento in "ACCEPT_MANUAL" modificando il file yaml del collegamento al servizio (my-psc.yaml).

497f5f43920018c0.png

e246063a23771273.png

9. Crea rete VPC dei consumer

1f3c90f1e139e906.png

Nella sezione seguente, il VPC consumer è configurato in un progetto separato. La comunicazione tra la rete del consumatore e del producer viene effettuata tramite il collegamento al servizio definito nella rete del consumatore.

Il codelab richiede due progetti, anche se non è un requisito per PSC. Prendi nota dei riferimenti per supportare progetti singoli o multipli.

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]
consumerproject=YOUR-PROJECT-NAME
prodproject=YOUR-PROJECT-NAME
echo $prodproject
echo $consumerproject

Più progetti - Aggiorna il progetto per supportare una rete consumer

All'interno di Cloud Shell, assicurati che l'ID progetto sia configurato

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

Rete VPC

Da Cloud Shell

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

Crea una subnet per PSC

Da Cloud Shell

gcloud compute networks subnets create consumer-subnet --project=$consumerproject  --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-central1

Crea una subnet per le istanze VM

Da Cloud Shell

gcloud compute networks subnets create consumer-subnet-vm --project=$consumerproject  --range=10.0.70.0/24 --network=vpc-demo-consumer --region=us-central1

Crea un indirizzo IP statico per accedere al servizio pubblicato

Da Cloud Shell

gcloud compute addresses create vpc-consumer-psc --region=us-central1 --subnet=consumer-subnet --addresses 10.0.60.100

Crea regole firewall

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 utilizzati da IAP per l'inoltro TCP

Da Cloud Shell

gcloud compute firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging

Sebbene non sia necessario per PSC, è necessario creare una regola firewall in uscita per monitorare il traffico PSC consumer verso il collegamento del servizio dei producer

gcloud compute --project=$consumerproject firewall-rules create vpc-consumer-psc --direction=EGRESS --priority=1000 --network=vpc-demo-consumer --action=ALLOW --rules=all --destination-ranges=10.0.60.0/24 --enable-logging

10. Crea istanza di test consumer 1

Da Cloud Shell

gcloud compute instances create consumer-instance-1 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.10 --no-address --subnet=consumer-subnet-vm --tags=google1 --image-family=debian-10 --image-project=debian-cloud

11. Crea istanza di test consumer 2

Da Cloud Shell

gcloud compute instances create consumer-instance-2 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.20 --no-address --subnet=consumer-subnet-vm --tags=google2 --image-family=debian-10 --image-project=debian-cloud

12. Crea un collegamento a un servizio

In un passaggio precedente, hai copiato la stringa dell'allegato del servizio Producer in un luogo sicuro. Inseriamo il valore memorizzato nel file "target-service-attachment" .

7ababb4e24f1ef7.png

Da Cloud Shell

gcloud compute forwarding-rules create vpc-consumer-psc-fr --region=us-central1 --network=vpc-demo-consumer --address=vpc-consumer-psc --target-service-attachment=yoursavedproducerserviceattachment

13. Convalida - Consumatori

Useremo CURL e log dei firewall per convalidare le comunicazioni tra consumatori e producer.

All'interno del progetto del consumatore, gli indirizzi IP statici vengono utilizzati per trasmettere le comunicazioni con il producer. Questa mappatura dell'indirizzo IP statico alla regola di forwarding del consumer viene convalidata eseguendo la sintassi seguente.

1f3c90f1e139e906.png

Dai VPC consumer utilizza Cloud Shell identifica la regola di forwarding e l'IP statico

gcloud compute forwarding-rules describe vpc-consumer-psc-fr --region us-central1

Output qui sotto, useremo 10.0.60.100 per raggiungere il producer in una fase successiva.

IPAddress: 10.0.60.100
creationTimestamp: '2021-09-30T21:13:54.124-07:00'
id: '3564572805904938477'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr
network: https://www.googleapis.com/compute/v1/projects/deepakmichaelstage/global/networks/vpc-demo-consumer
networkTier: PREMIUM
pscConnectionId: '36583161500548196'
pscConnectionStatus: ACCEPTED

Visualizza il servizio connesso

Dalla console Cloud, vai a Servizi di rete → Private Service Connect → Endpoint connessi e visualizza l'endpoint appena creato

206bc00297aaa260.png

Consente di accedere a consumer-instance-1 e testare l'accesso al servizio pubblicato da Producer

Da Cloud Shell, apri una nuova scheda facendo clic sul segno +

81f3210b29faebd3.png

Da Cloud Shell, esegui queste operazioni:

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

gcloud compute ssh --zone "us-central1-a" "consumer-instance-1" --project "$projectname"

Dopo aver effettuato l'accesso all'istanza consumer-instance-1, esegui un comando curl sull'indirizzo IP della regola di forwarding 10.0.60.100

Da Cloud Shell, esegui queste operazioni:

user@consumer-instance-1:~$ curl 10.0.60.100

Output di esempio

user@consumer-instance-1:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodprojectid.internal",
  "pod_name": "psc-ilb-588887dfdb-w7tbr",
  "pod_name_emoji": "🤷",
  "project_id": "prodorijectid",
  "timestamp": "2021-10-01T17:43:37",
  "zone": "us-central1-a"

Consente di accedere a consumer-instance-2 e testare l'accesso al servizio pubblicato da Producer

Da Cloud Shell, apri una nuova scheda facendo clic sul segno +

81f3210b29faebd3.png

Da Cloud Shell, esegui queste operazioni:

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

gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"

Da Cloud Shell, esegui queste operazioni:

user@consumer-instance-2:~$ curl 10.0.60.100

Output di esempio

deepakmichael@consumer-instance-2:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodproject.internal",
  "pod_name": "psc-ilb-588887dfdb-4jdql",
  "pod_name_emoji": "🧑🏿",
  "project_id": "prodproject",
  "timestamp": "2021-10-01T17:49:51",
  "zone": "us-central1-a"

14. Logging firewall - Convalida allocata

Con Esplora log, convalida la regola firewall "vpc-consumner-psc" sta acquisendo il flusso tra l'istanza della VM e l'IP statico

  1. Dalla console Cloud, Identifica il logging delle operazioni → Esplora log
  2. Nel campo Query aggiorna la voce seguente con yourconsumerproject e seleziona "Esegui query"

logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")

  1. I risultati della query forniscono quanto segue per ogni screenshot fornito

23e427b3060473.png

  1. Espandi il log (jsonPayload → Connessione) e identifica l'output fornito di seguito. Prendi nota di dest_ip: 10.0.60.100 è l'IP TCP STATICO usato per accedere al servizio Producer e src_ip: 10.0.70.10 o 10.0.70.20 sono gli indirizzi IP delle istanze VM. Disposizione consentita.

2669743fd1f1cb0d.png

15. Convalida - Producer

afe738fc869f0d6e.png

Dal progetto Producers verifica che il collegamento al servizio sia connesso correttamente. Vai a Servizi di rete → Private Service Connect → Servizi pubblicati

89ded87a63888f60.png

Fai clic sul servizio per visualizzare il tuo progetto e lo stato del consumatore connesso, come illustrato di seguito

15966d47423ebc5f.png

16. Limitazione dell'accesso a un servizio pubblicato

1f3c90f1e139e906.png

Finora abbiamo verificato che entrambe le istanze hanno accesso ai Servizi pubblicati. Creiamo una regola firewall in uscita per negare l'accesso a consumer-instance-2 al servizio pubblicato.

Per impostazione predefinita, Google Cloud consente tutto il traffico in uscita, ma nega tutto il traffico in entrata. Nei seguenti passaggi creeremo una regola firewall basata su un tag di networking "google2" precedentemente definito utilizzato durante la creazione di consumer-instance-2 per negare l'accesso al servizio pubblicato.

7fa2cda1dfec33a.png

Apri una nuova scheda Cloud Shell facendo clic su + esegui la seguente regola firewall in Cloud Shell

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

gcloud compute --project=$projectname firewall-rules create psc-endpoint-deny-egress --direction=EGRESS --priority=999 --network=vpc-demo-consumer --action=DENY --rules=all --destination-ranges=10.0.60.100/32 --target-tags=google2 --enable-logging

Ora, verifichiamo se consumer-instance-2 è in grado di accedere al Servizio pubblicato. Se la sessione è scaduta, devi aprire una nuova shell di Cloud e accedere alla VM come descritto di seguito.

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

gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"

Da Cloud Shell, esegui queste operazioni:

user@consumer-instance-2:~$ curl 10.0.60.100

Output di esempio

user@consumer-instance-2:~$ curl 10.0.60.100
curl: (7) Failed to connect to 10.0.60.100 port 80: Connection timed out

Logging firewall - Convalida negata

Utilizzando Esplora log, convalida la regola firewall "psc-endpoint-deny-egress" sta acquisendo il flusso tra l'istanza VM e l'IP statico

  1. Dalla console Cloud, Identifica il logging delle operazioni → Esplora log
  2. Nel campo Query aggiorna la voce seguente con il tuoprogettoconsumer e seleziona "Esegui query".

logName:(projects/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:psc-endpoint-deny-egress")

  1. I risultati della query forniscono quanto segue per ogni screenshot fornito

83b4fc7348ac93cd.png

  1. Espandi il log e identifica l'output fornito di seguito. Prendi nota di dest_ip: 10.0.60.100 è l'IP TCP STATICO e src_ip: 10.0.70.10 o 10.0.70.20 sono gli indirizzi IP delle istanze VM. Disposizione negata.

a344f75f67590655.png

17. Passaggi per la pulizia

Passaggi di pulizia della rete del producer

afe738fc869f0d6e.png

Elimina i componenti del lab da una singola Cloud Shell nel terminale del progetto Producer

gcloud container clusters delete gke-psc-l4 --region us-central1-a --quiet

gcloud compute networks subnets delete gke-nat-subnet --region=us-central1 --quiet

gcloud compute networks subnets delete node-subnet1 --region=us-central1 --quiet

gcloud compute networks delete gke-producer-l4-vpc --quiet

1f3c90f1e139e906.png

Passaggi di pulizia della rete del consumatore

Elimina i componenti del lab da un'unica Cloud Shell nel terminale del progetto consumer

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

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

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

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

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

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

gcloud compute networks subnets delete consumer-subnet-vm --region=us-central1 --quiet

gcloud compute firewall-rules delete vpc-consumer-psc --quiet

gcloud compute firewall-rules delete psc-endpoint-deny-egress --quiet

gcloud compute networks delete vpc-demo-consumer --quiet

18. Complimenti!

Complimenti per aver completato il codelab.

Argomenti trattati

  • Vantaggi di Private Service Connect
  • Concetti chiave per i consumer di servizi
  • Concetti chiave per i producer di servizi
  • Crea un ambiente producer
  • Esponi il servizio (ambiente producer) tramite il collegamento a un servizio
  • Crea un ambiente consumer
  • Crea una regola di forwarding nella rete consumer
  • Convalidare l'accesso dei consumatori
  • Abilita il controllo dell'accesso ai criteri
  • Utilizzo di una regola firewall in uscita per bloccare l'accesso a una regola di forwarding consumer