Private Service Connect con configuración de DNS automática

1. Introducción

Private Service Connect con configuración automática de DNS usa el Directorio de servicios y Cloud DNS para crear automáticamente registros DNS programados con las direcciones IP de los extremos de Private Service Connect del consumidor.

Qué compilarás

En este codelab, compilarás una arquitectura integral de Private Service Connect que ilustra el uso del DNS automático, como se muestra en la Figura 1.

El DNS automático es posible gracias a lo siguiente:

  1. El adjunto de servicio del productor origina el DNS automático proporcionando un dominio público propio con la marca "–domain-names" cuando se crea el adjunto de servicio de Private Service Connect.
  2. El consumidor define un nombre de extremo.
  3. El DNS automático crea una zona DNS goog-psc-default-us-central1 y un nombre de DNS cosmopup.net, además de una entrada del Directorio de servicios que consta del nombre del extremo del consumidor.

El beneficio del DNS automático se ilustra en (4), donde un usuario final puede comunicarse con el extremo del consumidor a través del DNS, stargazer.cosmopup.net del FQDN.

Figura 1

5e26a358454d1336.png

Qué aprenderás

  • Cómo crear un balanceador de cargas de HTTP(S) interno
  • Cómo crear un adjunto de servicio con DNS automático
  • Cómo establecer un servicio de productor de Private Service Connect
  • Cómo acceder a un extremo del consumidor con DNS automático

Requisitos

  • Proyecto de Google Cloud
  • Un dominio público que te pertenezca

2. Antes de comenzar

Actualiza el proyecto para que sea compatible con el codelab

En este codelab, se usan variables para facilitar la implementación de la configuración de gcloud en Cloud Shell.

Dentro de Cloud Shell, haz lo siguiente:

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

3. Configuración de Producer

Crea la VPC del productor

Dentro de Cloud Shell, haz lo siguiente:

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

Crea las subredes del productor

Dentro de Cloud Shell, haz lo siguiente:

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

Dentro de Cloud Shell, haz lo siguiente:

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

Reserva una dirección IP para el balanceador de cargas interno

Dentro de Cloud Shell, haz lo siguiente:

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

Cómo ver la dirección IP asignada

Usa el comando compute addresses describe para ver la dirección IP asignada.

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

Crea las subredes de proxy regionales

La asignación de proxy se realiza a nivel de la red de VPC, no a nivel del balanceador de cargas. Debes crear una subred de solo proxy en cada región de una red virtual (VPC) en la que uses balanceadores de cargas basados en Envoy. Si implementas múltiples balanceadores de cargas en la misma región y red de VPC, estos comparten la misma subred de solo proxy para el balanceo de cargas.

  1. Un cliente establece una conexión a la dirección IP y al puerto de la regla de reenvío del balanceador de cargas.
  2. Cada proxy escucha en la dirección IP y el puerto que especifica la regla de reenvío del balanceador de cargas correspondiente. Uno de los servidores proxy recibe y finaliza la conexión de red del cliente.
  3. El proxy establece una conexión con la VM de backend adecuada que determinan los servicios de backend y el mapa de URL del balanceador de cargas.

Debes crear subredes de solo proxy sin importar si tu red de VPC está en modo automático o personalizado. Una subred de solo proxy debe proporcionar 64 direcciones IP o más. Esto corresponde a una longitud de prefijo de /26 o menor. El tamaño de subred recomendado es /23 (512 direcciones de solo proxy).

Dentro de Cloud Shell, haz lo siguiente:

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 las subredes de NAT de Private Service Connect

Crea una o más subredes dedicadas para usar con Private Service Connect. Si usas la consola de Google Cloud para publicar un servicio, puedes crear las subredes durante ese procedimiento. Crea la subred en la misma región que el balanceador de cargas del servicio. No puedes convertir una subred normal en una subred de Private Service Connect.

Dentro de Cloud Shell, haz lo siguiente:

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 las reglas de firewall del productor

Configura reglas de firewall para permitir el tráfico entre la subred de NAT de Private Service Connect y la subred solo del proxy del ILB.

Dentro de Cloud Shell, haz lo siguiente:

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

Dentro de Cloud Shell, crea la regla de firewall fw-allow-health-check para permitir que las verificaciones de estado de Google Cloud lleguen al servicio de productor (servicio de backend) en el puerto 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 regla de firewall de permiso de entrada para la subred de solo proxy a fin de permitir que el balanceador de cargas se comunique con instancias de backend en el puerto 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

Configuración de Cloud Router y NAT

Cloud NAT se usa en el codelab para la instalación de paquetes de software, ya que la instancia de VM no tiene una dirección IP externa.

Dentro de Cloud Shell, crea el Cloud Router.

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

Dentro de Cloud Shell, crea la puerta de enlace 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

Configuración del grupo de instancias

En la siguiente sección, crearás la instancia de Compute Engine y el grupo de instancias no administrado. En pasos posteriores, el grupo de instancias se usará como servicio de backend del balanceador de cargas.

Dentro de Cloud Shell, crea la verificación de estado regional que se pasa al servicio del productor.

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"

Dentro de Cloud Shell, crea el grupo de instancias no administrado.

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 el balanceador de cargas

En los siguientes pasos, configurarás el balanceador de cargas HTTP interno que se publicará como una vinculación de servicio en un paso posterior.

Dentro de Cloud Shell, crea la verificación de estado regional.

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

Dentro de Cloud Shell, crea el servicio de 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

Dentro de Cloud Shell, agrega backends al servicio de 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

Dentro de Cloud Shell, crea el mapa de URL para enrutar las solicitudes entrantes al servicio de backend.

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

Crea el proxy HTTP de destino.

gcloud compute target-http-proxies create l7-ilb-proxy\
    --url-map=l7-ilb-map \
    --url-map-region=us-central1 \
    --region=us-central1

Crea una regla de reenvío para enrutar las solicitudes entrantes al proxy. No uses la subred de solo proxy para crear la regla de reenvío.

 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. Valida el balanceador de cargas

En la consola de Cloud, navega a Servicios de red → Balanceo de cargas → Balanceadores de cargas. Observa la verificación de estado correcta del servicio de backend

881567cc11627009.png

Si seleccionas "l7-ilb-map", se muestra la dirección IP de frontend, que debe coincidir con la dirección IP que buscaste con grep en un paso anterior, y se identifica el servicio de backend.

bab89b0a7b4f95e9.png

5. Crea el adjunto del servicio de Private Service Connect

Crea el adjunto del servicio

Dentro de Cloud Shell, crea la vinculación de servicio. Asegúrate de agregar el punto al final del nombre de 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.

Opcional: Si usas una VPC compartida, crea el adjunto de servicio en el proyecto de servicio.

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.

Navega a Servicios de red → Private Service Connect para ver el adjunto de servicio recién establecido.

d27fee9073dbbe2.png

Si seleccionas published-service, se proporciona más información detallada, incluido el URI del adjunto de servicio que usa el consumidor para establecer una conexión de Private Service Connect y el nombre de dominio.

503df63730c62df2.png

Detalles del adjunto de servicio:

projects/<nombre del proyecto>/regions/us-central1/serviceAttachments/published-service

6. Configuración del consumidor

Habilita las APIs para consumidores

En Cloud Shell, haz lo siguiente:

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

Crea la red de VPC del consumidor

Dentro de Cloud Shell, haz lo siguiente:

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

Crea las subredes de consumidor

Dentro de Cloud Shell, crea la subred para la instancia de prueba.

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

Dentro de Cloud Shell, crea una subred para el extremo del consumidor.

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

Crea el extremo del consumidor (regla de reenvío)

Dentro de Cloud Shell, crea la dirección IP estática que se usará para el extremo del consumidor.

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

Usamos el URI del adjunto de servicio generado anteriormente para crear el extremo del consumidor.

Dentro de Cloud Shell, crea el extremo del consumidor.

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. Valida la conexión en la red de VPC del consumidor

Desde la red de VPC del consumidor, verifica que la conexión de Private Service Connect se haya realizado correctamente. Para ello, navega a Servicios de red → Private Service Connect → Extremos conectados. Ten en cuenta la conexión establecida de Stargazer y la dirección IP correspondiente que creamos anteriormente.

c60812433c3e1676.png

Cuando se seleccionan los detalles de psc-consumer-1, se proporciona el URI del adjunto de servicio.

14d3e3b1e0aee3c2.png

8. Valida la conexión en la red de VPC del productor

Desde la red de VPC del productor, verifica que la conexión de Private Service Connect se haya realizado correctamente. Para ello, navega a Servicios de red → Private Service Connect → Servicio publicado. Ten en cuenta que la conexión de servicio publicada ahora indica 1 regla de reenvío (extremo de conexión).

911dbd7421bcfd3a.png

9. Valida la configuración de DNS automática

Evaluemos la configuración de DNS y del Directorio de servicios.

Configuración de Cloud DNS

Navega a Servicios de red → Cloud DNS → Zonas. La zona goog-psc-default-us-central & y el nombre de DNS cosmopup.net. se generan automáticamente.

4395e7b33fc42faa.png

Consulta la configuración de DNS y del Directorio de servicios

Si seleccionamos el nombre de la zona, podemos ver cómo se integra el Directorio de servicios con Cloud DNS.

e4fe44d945b20451.png

Configuración del directorio de servicios

Navega a Servicios de red → Directorio de servicios.

¿Recuerdas el nombre del extremo del consumidor "stargazer"? Se programa automáticamente en el Directorio de servicios, lo que nos permite llegar al extremo del consumidor con el FQDN stargazer.goog-psc-default–us-central1.

602deab65b5ac315.png

10. Valida el acceso del consumidor al servicio de productores

Desde la red de VPC del consumidor, crearemos una VM para probar la conectividad del servicio publicado accediendo al extremo del consumidor stargazer.cosmopup.net.

Dentro de Cloud Shell, crea la instancia de prueba en la VPC del consumidor.

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

Para permitir que IAP se conecte a tus instancias de VM, crea una regla de firewall que cumpla con lo siguiente:

  • Se aplica a todas las instancias de VM a las que deseas acceder mediante IAP.
  • Permite el tráfico de entrada desde el rango de IP 35.235.240.0/20. Este rango contiene todas las direcciones IP que IAP usa para el reenvío de TCP.

Dentro de Cloud Shell, crea la regla de firewall de IAP.

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

Accede a consumer-vm con IAP en Cloud Shell para validar la conectividad con el servicio de productor realizando un curl. Vuelve a intentarlo si se agota el tiempo de espera.

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

Realiza una solicitud curl para validar la conectividad con el servicio del productor. Una vez validada, sal de la VM y regresa al símbolo del sistema de Cloud Shell.

Dentro de Cloud Shell, ejecuta un curl en tu dominio personalizado, por ejemplo, stargazer.[custom-domain.com]. En el siguiente resultado, se realiza una solicitud curl en 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 !!

Sal de la VM y regresa al símbolo del sistema de Cloud Shell para iniciar las tareas de limpieza.

11. Limpia

En Cloud Shell, borra los componentes 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. Felicitaciones

Felicitaciones. Configuraste y validaste correctamente un extremo de Private Service Connect con configuración automática de DNS.

Creaste la infraestructura del productor y agregaste un adjunto de servicio con registro de dominio público. Aprendiste a crear un extremo del consumidor en la red de VPC del consumidor que permitía la conectividad al servicio local con el DNS generado automáticamente.

Cosmopup cree que los codelabs son increíbles.

8c2a10eb841f7b01.jpeg

¿Qué sigue?

Consulta algunos codelabs sobre los siguientes temas:

Lecturas y videos adicionales

Documentos de referencia