Private Service Connect con configurazione DNS automatica

1. Introduzione

Private Service Connect con la configurazione DNS automatica utilizza Service Directory e Cloud DNS per creare automaticamente record DNS programmati con gli indirizzi IP dell'endpoint consumer Private Service Connect.

Cosa creerai

In questo codelab, creerai un'architettura completa di Private Service Connect che illustra l'uso del DNS automatico, come illustrato nella Figura 1.

Il DNS automatico è reso possibile da quanto segue:

  1. Il collegamento del servizio producer ha origine nel DNS automatico fornendo a un dominio pubblico di proprietà il carattere "– domain-names" durante la creazione del collegamento al servizio Private Service Connect.
  2. Il consumer definisce un nome di endpoint.
  3. Il DNS automatico crea sia una zona DNS goog-psc-default-us-central1 sia un nome DNS cosmopup.net, oltre a una voce di Service Directory composta dal nome dell'endpoint consumer.

Il vantaggio del DNS automatico è illustrato nel punto (4) dove un utente finale può comunicare con l'endpoint del consumatore tramite DNS, FQDN stargazer.cosmopup.net.

Figura 1

5e26a358454d1336.png

Cosa imparerai a fare

  • Creare un bilanciatore del carico HTTP(S) interno
  • Come creare un collegamento a un servizio con DNS automatico
  • Come stabilire un servizio Producer di Private Service Connect
  • Accedere a un endpoint consumer utilizzando il DNS automatico

Che cosa ti serve

  • Progetto Google Cloud
  • Un dominio pubblico di tua proprietà.

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.

All'interno di Cloud Shell, esegui queste operazioni:

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

3. Configurazione del producer

Crea il VPC del producer

All'interno di Cloud Shell, esegui queste operazioni:

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

Crea le subnet del producer

All'interno di Cloud Shell, esegui queste operazioni:

gcloud compute networks subnets create gce-subnet --project=$projectname --range=172.16.20.0/28 --network=producer-vpc --region=us-central1

All'interno di Cloud Shell, esegui queste operazioni:

gcloud compute networks subnets create load-balancer-subnet --project=$projectname --range=172.16.10.0/28 --network=producer-vpc --region=us-central1

Prenota un indirizzo IP per il bilanciatore del carico interno

All'interno di Cloud Shell, esegui queste operazioni:

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

Visualizza l'indirizzo IP allocato

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 del proxy è a livello di rete 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 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 stabilisce una connessione all'indirizzo IP e alla porta della regola di forwarding 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 alla VM di backend appropriata determinata dalla mappa URL e dai servizi di backend del bilanciatore del carico.

Devi creare subnet solo proxy indipendentemente dal fatto che la tua rete VPC 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).

All'interno di Cloud Shell, esegui queste operazioni:

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 subnet durante la 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.

All'interno di Cloud Shell, esegui queste operazioni:

gcloud compute networks subnets create psc-nat-subnet \
    --project $projectname \
    --network producer-vpc \
    --region us-central1 \
    --range 100.100.10.0/24 \
    --purpose PRIVATE_SERVICE_CONNECT

Crea le regole firewall del producer

Configura le regole firewall per consentire il traffico tra la subnet NAT Private Service Connect e la subnet solo proxy ILB.

All'interno di Cloud Shell, esegui queste operazioni:

gcloud compute --project=$projectname 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 firewall fw-allow-health-check per consentire ai controlli di integrità di Google Cloud di raggiungere il servizio producer (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

Router Cloud e configurazione NAT

Cloud NAT viene utilizzato nel codelab per l'installazione dei pacchetti software poiché l'istanza VM non ha un indirizzo IP esterno.

All'interno di Cloud Shell, crea il router Cloud.

gcloud compute routers create cloud-router-for-nat --network producer-vpc --region us-central1

In Cloud Shell, crea il gateway NAT.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-for-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

Configurazione del gruppo di istanze

Nella sezione seguente, creerai l'istanza Compute Engine e gruppo di istanze non gestite. Nei passaggi successivi, il gruppo di istanze verrà utilizzato come servizio di backend del bilanciatore del carico.

In Cloud Shell, crea il controllo di integrità a livello di regione passato al servizio producer.

gcloud compute instances create app-server-1 \
    --project=$projectname \
    --machine-type=e2-micro \
    --image-family debian-10 \
    --no-address \
    --image-project debian-cloud \
    --zone us-central1-a \
    --subnet=gce-subnet \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install apache2 -y
      sudo service apache2 restart
      echo 'Welcome to App-Server-1 !!' | tee /var/www/html/index.html
      EOF"

In Cloud Shell, crea il gruppo di istanze non gestite.

gcloud compute instance-groups unmanaged create psc-instance-group --zone=us-central1-a

gcloud compute instance-groups unmanaged set-named-ports psc-instance-group --project=$projectname --zone=us-central1-a --named-ports=http:80

gcloud compute instance-groups unmanaged add-instances psc-instance-group --zone=us-central1-a --instances=app-server-1

Configura il bilanciatore del carico

Nei passaggi seguenti configurerai il bilanciatore del carico HTTP interno che verrà pubblicato come collegamento al servizio in un passaggio successivo.

All'interno di Cloud Shell, crea il controllo di integrità a livello di regione.

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

In Cloud Shell, crea il servizio di backend.

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

In Cloud Shell, aggiungi i backend al servizio di backend.

gcloud compute backend-services add-backend l7-ilb-backend-service \
  --balancing-mode=UTILIZATION \
  --instance-group=psc-instance-group \
  --instance-group-zone=us-central1-a \
  --region=us-central1

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

gcloud compute url-maps create l7-ilb-map \
    --default-service l7-ilb-backend-service \
    --region=us-central1

Crea il proxy di destinazione HTTP.

gcloud compute target-http-proxies create l7-ilb-proxy\
    --url-map=l7-ilb-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 forwarding.

 gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
      --load-balancing-scheme=INTERNAL_MANAGED \
      --network=producer-vpc \
      --subnet=load-balancer-subnet \
      --address=lb-ip \
      --ports=80 \
      --region=us-central1 \
      --target-http-proxy=l7-ilb-proxy \
      --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. Nota che il controllo di integrità del servizio di backend è stato eseguito correttamente

881567cc11627009.png

Se selezioni "l7-ilb-map", viene restituito l'indirizzo IP del frontend, che dovrebbe corrispondere all'indirizzo IP creato in precedenza con la libreria grepped in un passaggio precedente, e verrà identificato il servizio di backend.

bab89b0a7b4f95e9.png

5. Crea il collegamento al servizio Private Service Connect

Crea il collegamento al servizio

In Cloud Shell, crea il collegamento al servizio. Assicurati di aggiungere il carattere "." alla fine del nome di dominio.

gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=psc-nat-subnet --domain-names=cosmopup.net.

Facoltativo:se utilizzi un VPC condiviso, crea il collegamento al servizio nel progetto di servizio.

gcloud compute service-attachments create published-service --region=us-central1 --producer-forwarding-rule=l7-ilb-forwarding-rule --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=projects/<hostproject>/regions/us-central1/subnetworks/psc-nat-subnet --domain-names=cosmopup.net.

Vai a Servizi di rete → Private Service Connect per visualizzare il collegamento al servizio appena stabilito

d27fee9073dbbe2.png

La selezione di published-service fornisce maggiori dettagli, tra cui l'URI del collegamento al servizio utilizzato dal consumer per stabilire una connessione privata ai servizi. il nome di dominio.

503df63730c62df2.png

Dettagli del collegamento al servizio:

projects/<nome progetto>/regions/us-central1/serviceAttachments/published-service

6. Configurazione consumer

Abilita le API consumer

All'interno di Cloud Shell, esegui queste operazioni:

gcloud services enable dns.googleapis.com
gcloud services enable servicedirectory.googleapis.com

Crea la rete VPC consumer

All'interno di Cloud Shell, esegui queste operazioni:

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

Crea le subnet consumer

In Cloud Shell, crea la subnet per l'istanza di test.

gcloud compute networks subnets create db1-subnet --project=$projectname --range=10.20.0.0/28 --network=consumer-vpc --region=us-central1

In Cloud Shell, crea una subnet per l'endpoint consumer.

gcloud compute networks subnets create consumer-ep-subnet --project=$projectname --range=10.10.0.0/28 --network=consumer-vpc --region=us-central1

Crea l'endpoint consumer (regola di forwarding)

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

gcloud compute addresses create psc-consumer-ip-1 --region=us-central1 --subnet=consumer-ep-subnet --addresses 10.10.0.10

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

In Cloud Shell, crea l'endpoint consumer.

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

7. Convalida la connessione nella rete VPC del consumer

Dalla rete VPC consumer, verifica la riuscita di una connessione privata ai servizi andando a Servizi di rete → Private Service Connect → Endpoint connessi. Prendi nota della connessione con il osservatore stellare e dell'indirizzo IP corrispondente che abbiamo creato in precedenza.

c60812433c3e1676.png

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

14d3e3b1e0aee3c2.png

8. Convalida la connessione nella rete VPC del producer

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

911dbd7421bcfd3a.png

9. Convalida la configurazione DNS automatica

Analizziamo la configurazione di DNS e Service Directory.

Configurazione di Cloud DNS

Vai a Servizi di rete → Cloud DNS → Zone. Il nome DNS della zona goog-psc-default-us-central & cosmopup.net. viene generato automaticamente.

4395e7b33fc42faa.png

Visualizza la configurazione di DNS e Service Directory

La selezione del nome della zona ci consente di vedere come Service Directory è integrato con Cloud DNS.

e4fe44d945b20451.png

Configurazione di Service Directory

Vai a Servizi di rete → Service Directory.

Ti ricordi il nome dell'endpoint del consumatore "stargazer"? Viene programmato automaticamente in Service Directory, consentendoci di raggiungere l'endpoint del consumatore utilizzando il nome di dominio completo stargazer.goog-psc-default–us-central1.

602deab65b5ac315.png

10. Convalida l'accesso consumer al servizio producer

Dalla rete VPC del consumer creeremo una VM per testare la connettività del servizio pubblicato accedendo all'endpoint consumer stargazer.cosmopup.net

In Cloud Shell crea l'istanza di test nel VPC consumer.

gcloud compute instances create db1 \
    --zone=us-central1-a \
    --image-family=debian-10 \
    --image-project=debian-cloud \
    --subnet=db1-subnet \
    --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 utilizzati da IAP per l'inoltro TCP.

In Cloud Shell, crea la regola firewall IAP.

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 producer eseguendo un comando curl. Riprova in caso di timeout.

gcloud compute ssh db1 --project=$projectname --zone=us-central1-a --tunnel-through-iap

Eseguire un comando curl di convalida della connettività al servizio producer. Dopo la convalida, l'uscita dalla VM che torna al prompt di Cloud Shell

All'interno di Cloud Shell, esegui un comando curl sul tuo dominio personalizzato, ad esempio stargazer.[custom-domain.com]. Nell'output seguente, viene eseguito un curl su stargazer.cosmopup.net.

user@db1:~$ curl -v stargazer.cosmopup.net
*   Trying 10.10.0.10...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x55d3aa8190f0)
* Connected to stargazer.cosmopup.net (10.10.0.10) port 80 (#0)
> GET / HTTP/1.1
> Host: stargazer.cosmopup.net
> User-Agent: curl/7.64.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< date: Thu, 22 Dec 2022 00:16:25 GMT
< server: Apache/2.4.38 (Debian)
< last-modified: Wed, 21 Dec 2022 20:26:32 GMT
< etag: "1b-5f05c5e43a083"
< accept-ranges: bytes
< content-length: 27
< content-type: text/html
< via: 1.1 google
< 
Welcome to App-Server-1 !!

Esci dalla VM che torna al prompt di Cloud Shell per avviare le attività di pulizia

11. Esegui la pulizia

Da Cloud Shell, elimina i componenti del codelab.

gcloud compute forwarding-rules delete stargazer --region=us-central1 --quiet

gcloud compute instances delete db1 --zone=us-central1-a --quiet 

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

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

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

gcloud compute networks delete consumer-vpc --quiet 

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

gcloud compute forwarding-rules delete l7-ilb-forwarding-rule --region=us-central1 --quiet 

gcloud compute target-http-proxies delete l7-ilb-proxy --region=us-central1 --quiet 
 
gcloud compute url-maps delete l7-ilb-map --region=us-central1 --quiet 
 
gcloud compute backend-services delete l7-ilb-backend-service --region=us-central1 --quiet
 
gcloud compute instance-groups unmanaged delete psc-instance-group --zone=us-central1-a --quiet
 
gcloud compute instances delete app-server-1 --zone=us-central1-a --quiet 
 
gcloud compute firewall-rules delete allow-to-ingress-nat-subnet fw-allow-health-check fw-allow-proxy-only-subnet --quiet 
 
gcloud compute addresses delete lb-ip --region=us-central1 --quiet 
 
gcloud compute networks subnets delete gce-subnet load-balancer-subnet psc-nat-subnet proxy-subnet-us-central --region=us-central1 --quiet 
 
gcloud compute routers delete cloud-router-for-nat --region=us-central1 --quiet 
 
gcloud compute networks delete producer-vpc --quiet 

12. Complimenti

Congratulazioni, hai configurato e convalidato un endpoint Private Service Connect con configurazione DNS automatica.

Hai creato l'infrastruttura producer e aggiunto un collegamento a un servizio con registrazione di dominio pubblico. Hai imparato a creare un endpoint consumer nella rete VPC consumer che consentisse la connettività al servizio on-premise utilizzando il DNS generato automaticamente.

Cosmopup pensa che i codelab siano straordinari.

8c2a10eb841f7b01.jpeg

Passaggi successivi

Dai un'occhiata ad alcuni di questi codelab...

Per approfondire Video

Documenti di riferimento