1. Introducción
Private Service Connect permite que los productores de servicios expongan servicios de forma privada de una red de VPC a otra. Los consumidores pueden acceder a los servicios de productor a través de extremos o backends de PSC.
El enfoque de este codelab son los backend de PSC. Los backends de PSC se usan junto con los balanceadores de cargas de proxy de Google Cloud (ya sea de aplicaciones o de red). El uso de backend de PSC proporciona controles más detallados para el consumidor, como los siguientes:
- Observabilidad y registro más detallados
- Integración de Cloud Armor
- URL personalizadas
- Administración avanzada del tráfico
- Certificados TLS personalizados
En este codelab, aprenderás a crear un backend de Private Service Connect con el balanceador de cargas de aplicaciones externo global para acceder de forma privada a un servicio de productor en otra red.
Qué aprenderás
- Crea y configura un backend de PSC asociado con el balanceador de cargas de aplicaciones externo global
- Configura un servicio web administrado por Apache y expónlo como un servicio de PSC a través de un adjunto de servicio
- Crea certificados SSL para finalizar la conexión SSL en balanceadores de cargas de aplicaciones internos y externos
- Configura una zona pública de Cloud DNS para acceder al servicio de PSC
Requisitos
- Un proyecto de Google Cloud con permisos de propietario
2. Entorno de pruebas
El entorno que crearás consistirá en una VPC de consumidor y una VPC de productor. En el VPC del productor, implementarás un grupo de instancias administrado a partir de una plantilla de instancias que compila un servicio web de Apache de código abierto. También implementarás una prueba de vm para garantizar la funcionalidad local adecuada del servicio. Exponerás el servicio de Apache como un servicio de productor de PSC a través de un adjunto de servicio
En la VPC de consumidor, implementarás un balanceador de cargas de aplicaciones externo global con un servicio de backend de PSC que apunte al servicio de Apache. Luego, configurarás una zona DNS pública para acceder al servicio de PSC en la Internet pública.
3. Configuración y requisitos
Configuración del entorno de autoaprendizaje
- Accede a Google Cloud Console y crea un proyecto nuevo o reutiliza uno existente. Si aún no tienes una cuenta de Gmail o de Google Workspace, debes crear una.
- El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una cadena de caracteres que no se utiliza en las APIs de Google. Puedes actualizarla cuando quieras.
- El ID del proyecto es único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). La consola de Cloud genera automáticamente una cadena única. Por lo general, no importa cuál sea. En la mayoría de los codelabs, deberás hacer referencia al ID de tu proyecto (suele identificarse como
PROJECT_ID
). Si no te gusta el ID que se generó, podrías generar otro aleatorio. También puedes probar uno propio y ver si está disponible. No se puede cambiar después de este paso y se usa el mismo durante todo el proyecto. - Recuerda que hay un tercer valor, un número de proyecto, que usan algunas APIs. Obtén más información sobre estos tres valores en la documentación.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar las APIs o los recursos de Cloud. Ejecutar este codelab no costará mucho, tal vez nada. Para cerrar recursos y evitar que se generen cobros más allá de este instructivo, puedes borrar los recursos que creaste o borrar el proyecto. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de $300.
Inicia Cloud Shell
Si bien Google Cloud y Spanner se pueden operar de manera remota desde tu laptop, en este codelab usarás Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.
En Google Cloud Console, haz clic en el ícono de Cloud Shell en la barra de herramientas en la parte superior derecha:
El aprovisionamiento y la conexión al entorno deberían tomar solo unos minutos. Cuando termine el proceso, debería ver algo como lo siguiente:
Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y la autenticación. Todo tu trabajo en este codelab se puede hacer en un navegador. No es necesario que instales nada.
4. Antes de comenzar
Habilita las APIs
En Cloud Shell, asegúrate de que tu ID del proyecto esté configurado.
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] export project=YOUR-PROJECT-NAME export region=us-central1 echo $project echo $region
Habilita todos los servicios necesarios
gcloud services enable compute.googleapis.com gcloud services enable servicedirectory.googleapis.com gcloud services enable dns.googleapis.com
5. Configuración de la VPC del productor
Crear red de VPC
Desde Cloud Shell
gcloud compute networks create producer-vpc --subnet-mode custom
Crea subredes
Se implementarán dos subredes de propósito general en la VPC de productor. La subred de servicio se usará para implementar las VMs del servicio web de Apache, así como la regla de reenvío del balanceador de cargas. La subred de cliente de prueba estará en una región diferente y se usará para implementar una VM que pruebe el servicio de Apache con el acceso global habilitado.
Desde Cloud Shell
gcloud compute networks subnets create service-subnet \ --network=producer-vpc \ --range=10.0.0.0/28 \ --region=$region
Desde Cloud Shell
gcloud compute networks subnets create test-client-subnet \ --network=producer-vpc \ --range=10.0.1.0/28 \ --region=us-east4
También debemos implementar una subred de solo proxy para usarla con el balanceador de cargas de aplicaciones interno regional.
Desde Cloud Shell
gcloud compute networks subnets create central-proxy-subnet \ --network=producer-vpc \ --range=10.100.101.0/24 \ --region=$region \ --purpose=REGIONAL_MANAGED_PROXY \ --role=ACTIVE
Cuando se implementa un servicio de PSC, cada servicio único necesita una subred de NAT de PSC correspondiente para asociarse con el adjunto de servicio. El tamaño de esta subred debe ser el adecuado según la cantidad de extremos conectados esperados.
Desde Cloud Shell
gcloud compute networks subnets create psc-nat-subnet \ --network=producer-vpc \ --region=$region \ --range=10.100.100.0/24 \ --purpose=PRIVATE_SERVICE_CONNECT
Crea Cloud NAT
Se requiere una Cloud NAT para instalar los paquetes adecuados para nuestros servicios de productor.
Desde Cloud Shell
gcloud compute routers create central-cr \ --network=producer-vpc \ --region=$region
Desde Cloud Shell
gcloud compute routers nats create central-nat \ --router=central-cr \ --region=$region \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
Crea políticas y reglas de firewall de red
Desde 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
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.
Desde 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
Se necesitarán dos reglas de firewall adicionales para permitir el tráfico de entrada a los backends del balanceador de cargas que provengan de la subred de solo proxy del balanceador de cargas (2000), así como una regla para permitir las verificaciones de estado del balanceador de cargas en las instancias de backend (2001).
Desde Cloud Shell
gcloud compute network-firewall-policies rules create 2000 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "allow traffic from load balancer proxy subnet" \ --direction INGRESS \ --src-ip-ranges 10.100.101.0/24 \ --layer4-configs tcp:443 \ --global-firewall-policy gcloud compute network-firewall-policies rules create 2001 \ --action ALLOW \ --firewall-policy producer-vpc-policy \ --description "allow load balancer health checks" \ --direction INGRESS \ --src-ip-ranges 130.211.0.0/22,35.191.0.0/16 \ --layer4-configs tcp:443 \ --global-firewall-policy
6. Crea un servicio web de Apache
Crearemos un servicio web Apache simple que muestre "Servicio de PSC".
Crea una plantilla de instancias
Desde Cloud Shell
gcloud compute instance-templates create apache-service-template \ --network producer-vpc \ --subnet service-subnet \ --region $region \ --no-address \ --metadata startup-script='#! /bin/bash sudo apt-get update apt-get install apache2 -y a2enmod ssl sudo a2ensite default-ssl echo "PSC Service" | \ tee /var/www/html/index.html systemctl restart apache2'
Crea una verificación de estado para el MIG
Desde Cloud Shell
gcloud compute health-checks create https service-mig-healthcheck \ --port=443 \ --global
Crea un grupo de instancias administrado
Desde Cloud Shell
gcloud compute instance-groups managed create psc-service-mig \ --region $region \ --size=2 \ --template=apache-service-template \ --health-check=service-mig-healthcheck gcloud compute instance-groups managed set-named-ports psc-service-mig \ --named-ports=https:443 \ --region=$region
7. Crea un certificado autofirmado
Completa el paso 1 de las instrucciones aquí para crear un certificado autofirmado. Puedes ejecutar todos los comandos en Cloud Shell. Regresa a esta página cuando completes el paso 1. TU NOMBRE COMÚN DEBE CONFIGURARSE CON EXAMPLE.COM.
Crea un recurso de certificado para asociarlo con tu balanceador de cargas. Reemplaza los parámetros de certificado y clave privada por los nombres de archivo específicos.
Desde Cloud Shell
gcloud compute ssl-certificates create producer-service-cert \ --certificate=<your-producer-certfile.cert> \ --private-key=<your-producer-keyfile.pem> \ --region=$region
8. Crea el balanceador de cargas de aplicaciones interno regional
A continuación, crearemos los componentes del balanceador de cargas para el servicio. Usamos el balanceador de cargas de aplicaciones interno regional, pero puedes usar cualquier balanceador de cargas interno de Google Cloud. Sigue la documentación del balanceador de cargas correspondiente para el manejo de TLS.
Crea la dirección IP interna que se usará para la regla de reenvío de tu balanceador de cargas y toma nota de la IP que se usará más adelante cuando realices una llamada de prueba al servicio.
Desde Cloud Shell
gcloud compute addresses create apache-service-ip \ --region=$region \ --subnet=service-subnet gcloud compute addresses describe apache-service-ip \ --format="get(address)" \ --region=$region
Crea la verificación de estado del balanceador de cargas.
Desde Cloud Shell
gcloud compute health-checks create https lb-apache-service-hc \ --region=$region \ --port-name=https
Crea el servicio de backend.
Desde Cloud Shell
gcloud compute backend-services create apache-bes\ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --port-name=https \ --health-checks=lb-apache-service-hc \ --health-checks-region=$region \ --region=$region gcloud compute backend-services add-backend apache-bes \ --balancing-mode=UTILIZATION \ --instance-group=psc-service-mig \ --region=$region
Crea el mapa de URL.
Desde Cloud Shell
gcloud compute url-maps create producer-url-map \ --default-service=apache-bes \ --region=$region
Crea los proxies HTTPS de destino.
Desde Cloud Shell
gcloud compute target-https-proxies create https-proxy \ --url-map=producer-url-map \ --region=$region \ --ssl-certificates=producer-service-cert
Crea la regla de reenvío.
Desde Cloud Shell
gcloud compute forwarding-rules create apache-fr \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=producer-vpc \ --subnet=service-subnet \ --address=apache-service-ip \ --ports=443 \ --region=$region \ --target-https-proxy=https-proxy \ --target-https-proxy-region=$region \ --allow-global-access
9. Crea una VM de prueba y prueba el servicio de forma local
Antes de crear el adjunto de servicio, crearemos una VM de cliente de prueba en una región diferente para probar que el balanceador de cargas esté configurado correctamente con el acceso global y TLS.
Desde Cloud Shell
gcloud compute instances create vm-client \ --zone=us-east4-a \ --subnet=test-client-subnet \ --no-address
Espera alrededor de un minuto para que se complete el aprovisionamiento y, luego, usa SSH para acceder a la instancia.
Desde Cloud Shell
gcloud compute ssh \ --zone "us-east4-a" "vm-client" \ --tunnel-through-iap \ --project $project
Para probar el servicio de Apache, conéctate a través del puerto 443 mediante el balanceador de cargas. La dirección IP interna es la que reservaste y anotaste antes.
curl https://example.com:443 -k --connect-to example.com:443:<YOUR-INTERNAL-IP>:443
RESULTADO ESPERADO
PSC Service
Sal de la VM.
Desde vm-client
exit
10. Crea el adjunto del servicio
En este ejemplo, configuramos nuestro adjunto de servicio para permitir solo conexiones de PSC desde este proyecto. Se puede configurar para aceptar uno o más proyectos o redes específicos, pero no ambos. Establecimos el límite máximo de conexiones en 5. Cada proyecto o red debe tener un límite establecido.
Desde Cloud Shell
gcloud compute service-attachments create apache-service-attachment \ --region=$region \ --producer-forwarding-rule=apache-fr \ --connection-preference=ACCEPT_MANUAL \ --consumer-accept-list=$project=5 \ --nat-subnets=psc-nat-subnet
Debes anotar el URI de archivo adjunto del servicio (selfLink), ya que lo necesitarás en el siguiente paso para la configuración del backend de PSC. Para obtenerlo, ejecuta lo siguiente en Cloud Shell.
Desde Cloud Shell
gcloud compute service-attachments describe apache-service-attachment \ --region $region
Copia el URI a partir de projects.
Ejemplo: projects/$project/regions/$region/serviceAttachments/apache-service-attachment
11. Configuración de la VPC del consumidor
Crea una red de VPC
Desde Cloud Shell
gcloud compute networks create consumer-vpc --subnet-mode custom
Crear subred
Se necesita una subred en el lado del consumidor en la que se implementará el grupo de extremos de red (NEG) de Private Service Connect.
Desde Cloud Shell
gcloud compute networks subnets create consumer-subnet \ --network=consumer-vpc \ --region=$region \ --range=10.0.0.0/28
12. Reserva una IP externa y crea un certificado autofirmado del lado del consumidor
IP externa
Crea la dirección IP estática externa que se usará más adelante para nuestra regla de reenvío del balanceador de cargas y captura la dirección IP en una variable de Cloud Shell.
Desde Cloud Shell
gcloud compute addresses create external-psc-ip \ --network-tier=PREMIUM \ --ip-version=IPV4 \ --global export externalip=$(gcloud compute addresses describe external-psc-ip \ --format="get(address)" \ --global) echo $externalip
Certificado autofirmado del consumidor
Por segunda vez, completa el paso 1 de las instrucciones aquí para crear un certificado autofirmado. Puedes ejecutar todos los comandos en Cloud Shell. Regresa a esta página cuando completes el paso 1. Usaremos un servicio de DNS comodín público de código abierto llamado nip.io en lugar de tener nuestra propia zona de DNS pública. La URL pública de tu servicio de PSC usará la dirección IP externa que acabas de configurar. TU NOMBRE COMÚN DEBE CONFIGURARSE CON <YOUR-EXTERNAL-IP.nip.io>
Crea un recurso de certificado para asociarlo con tu balanceador de cargas externo. Reemplaza los parámetros de certificado y clave privada por los nombres de archivo específicos.
Desde Cloud Shell
gcloud compute ssl-certificates create consumer-service-cert \ --certificate=<your-consumer-certfile.cert> \ --private-key=<your-consumer-keyfile.pem> \ --global
13. Crea los componentes del balanceador de cargas
Crearemos un balanceador de cargas de aplicaciones externo global con un NEG de PSC que apunte a nuestro archivo adjunto de servicio recién creado como servicio de backend.
Ten a mano el URI del archivo adjunto de servicio que anotaste en el último paso. Reemplaza psc-target-service a continuación por tu URI.
Desde Cloud Shell
gcloud compute network-endpoint-groups create apache-psc-neg \ --network-endpoint-type=private-service-connect \ --psc-target-service=projects/$project/regions/$region/serviceAttachments/apache-service-attachment \ --region=$region \ --network=consumer-vpc \ --subnet=consumer-subnet
Crea el servicio de backend.
Desde Cloud Shell
gcloud compute backend-services create apache-pscneg-bes \ --load-balancing-scheme=EXTERNAL_MANAGED \ --protocol=HTTPS \ --global gcloud compute backend-services add-backend apache-pscneg-bes \ --network-endpoint-group=apache-psc-neg \ --network-endpoint-group-region=$region \ --global
Crea el mapa de URL
Desde Cloud Shell
gcloud compute url-maps create consumer-url-map \ --default-service=apache-pscneg-bes \ --global
Crea los proxies HTTPS de destino.
Desde Cloud Shell
gcloud compute target-https-proxies create psc-https-proxy \ --url-map=consumer-url-map \ --ssl-certificates=consumer-service-cert
Crea la regla de reenvío
Desde Cloud Shell
gcloud compute forwarding-rules create external-fr \ --load-balancing-scheme=EXTERNAL_MANAGED \ --network-tier=PREMIUM \ --address=external-psc-ip \ --global \ --target-https-proxy=psc-https-proxy \ --ports=443
14. Crea una zona del DNS pública
Desde Cloud Shell
gcloud dns managed-zones create "psc-service" \ --dns-name=$externalip.nip.io. \ --description="public dns for psc service" \ --visibility=public
Desde Cloud Shell
gcloud dns record-sets transaction start \ --zone="psc-service" gcloud dns record-sets transaction add $externalip \ --name=$externalip.nip.io \ --ttl=300 \ --type=A \ --zone="psc-service" gcloud dns record-sets transaction execute \ --zone="psc-service"
15. Prueba la conexión del PSC del consumidor
Espera entre 7 y 10 minutos antes de realizar la prueba para permitir que se propague el DNS público.
Desde Cloud Shell
curl https://$externalip.nip.io -k
También puedes realizar pruebas desde tu navegador. Para ello, ingresa https://<TU-IP-EXTERNA>.nip.io en el navegador o la terminal de escritorio.
RESULTADO ESPERADO
PSC Service
16. Pasos de limpieza
Borra componentes del lab desde una sola terminal de Cloud Shell
gcloud dns record-sets delete $externalip.nip.io --zone="psc-service" --type=A -q gcloud dns managed-zones delete "psc-service" -q gcloud compute forwarding-rules delete external-fr --global -q gcloud compute target-https-proxies delete psc-https-proxy -q gcloud compute url-maps delete consumer-url-map --global -q gcloud compute backend-services delete apache-pscneg-bes --global -q gcloud compute network-endpoint-groups delete apache-psc-neg --region=$region -q gcloud compute ssl-certificates delete consumer-service-cert --global -q gcloud compute addresses delete external-psc-ip --global -q gcloud compute networks subnets delete consumer-subnet --region $region -q gcloud compute networks delete consumer-vpc -q gcloud compute instances delete vm-client --zone=us-east4-a -q gcloud compute service-attachments delete apache-service-attachment --region $region -q gcloud compute forwarding-rules delete apache-fr --region $region -q gcloud compute target-https-proxies delete https-proxy --region $region -q gcloud compute url-maps delete producer-url-map --region $region -q gcloud compute backend-services delete apache-bes --region $region -q gcloud compute health-checks delete lb-apache-service-hc --region $region -q gcloud compute addresses delete apache-service-ip --region $region -q gcloud compute ssl-certificates delete producer-service-cert --region $region -q gcloud compute instance-groups managed delete psc-service-mig --region $region -q gcloud compute health-checks delete service-mig-healthcheck --global -q gcloud compute instance-templates delete apache-service-template -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 routers nats delete central-nat --router=central-cr --region $region -q gcloud compute routers delete central-cr --region $region -q gcloud compute networks subnets delete psc-nat-subnet --region $region -q gcloud compute networks subnets delete service-subnet --region $region -q gcloud compute networks subnets delete test-client-subnet --region us-east4 -q gcloud compute networks subnets delete central-proxy-subnet --region $region -q gcloud compute networks delete producer-vpc -q
17. ¡Felicitaciones!
Felicitaciones por completar el codelab.
Temas abordados
- Crea y configura un backend de PSC asociado con el balanceador de cargas de aplicaciones externo global
- Configura un servicio web administrado por Apache y expónlo como un servicio de PSC a través de un adjunto de servicio
- Crea certificados SSL para finalizar la conexión SSL en balanceadores de cargas de aplicaciones internos y externos
- Configura una zona pública de Cloud DNS para acceder al servicio de PSC