1. Introducción
Private Service Connect permite que un productor de servicios ofrezca servicios de forma privada a un consumidor de servicios. Private Service Connect ofrece los siguientes beneficios:
- Una red de VPC del productor de servicios puede admitir más de un consumidor de servicios.
- Cada consumidor se conecta a una dirección IP interna que ellos mismos definen. Private Service Connect realiza la traducción de direcciones de red (NAT) para enrutar la solicitud al productor de servicios.
Figura 2: Private Service Connect usa extremos y adjuntos de servicio para permitir que los consumidores de servicios envíen tráfico desde la red de VPC del consumidor a los servicios en la red de VPC del productor de servicios (haz clic para ampliar).
Qué aprenderás
- Beneficios de Private Service Connect
- Conceptos clave para los consumidores de servicios
- Conceptos clave para los productores de servicios
- Crear un entorno de productor
- Expón el servicio (entorno de productor) a través de un adjunto de servicio
- Crea un entorno de consumidor
- Crea una regla de reenvío en la red del consumidor
- Valida el acceso de los consumidores de TCP
- Habilitar y validar el protocolo de proxy
- Habilitar el control de acceso de las políticas
Requisitos
- Conocimiento sobre los balanceadores de cargas internos
- Capacidad de crear VPC en dos proyectos
2. Beneficios de Private Service Connect
Con PSC, tienes varios beneficios en comparación con el uso del intercambio de tráfico entre VPC:
Mejor control del espacio de IP privado
- Como consumidor de servicios, puedes controlar la dirección IP privada que se usa para conectarte al servicio administrado al que deseas acceder.
- Como consumidor de servicios, no tienes que preocuparte por reservar rangos de direcciones IP privadas para los servicios de backend que se consumen en tu VPC. Solo debes elegir una dirección IP de tu propia subred para conectarte a los servicios del productor.
- Como productor de servicios, puedes implementar un modelo multiusuario, en el que tu VPC contiene servicios que entregan varias VPC de consumidor. Los consumidores que tienen rangos de subredes superpuestos ya no son un problema.
- Como proveedor de servicios, puedes escalar tu servicio a tantas instancias de VM como sea necesario, sin necesidad de comunicarte con tu consumidor para obtener más direcciones IP.
Mejoras en la seguridad y el aislamiento
- Como consumidor del servicio, solo tú puedes iniciar la comunicación con el productor del servicio. Esta conectividad unidireccional simplifica drásticamente la configuración del firewall, pero también reduce el riesgo de tráfico no deseado proveniente del productor de servicios.
- Como productor de servicios, no es necesario que cambies las reglas de tu firewall en función de los rangos de subred en la VPC del consumidor. Solo tienes que crear reglas de firewall para el rango de direcciones IP de NAT configurado en tu servicio.
Mejor escalabilidad
- PSC permite un diseño altamente escalable, ya que es compatible con miles de consumidores, y permite que los productores de servicios ofrezcan servicios altamente escalables de multiusuario o únicos.
- Como consumidor de servicios que usa Private Service Connect, puedes crear recursos según sea necesario en tu VPC. La escala del valor no se ve afectada por la cantidad de recursos creados en la VPC del productor.
3. Conceptos clave para los consumidores de servicios
Puedes usar los extremos de Private Service Connect para consumir servicios que están fuera de tu red de VPC. Los consumidores del servicio crean extremos de Private Service Connect que se conectan a un servicio de destino.
Extremos
Usas extremos de Private Service Connect para conectarte a un servicio de destino. Los extremos tienen una dirección IP interna en tu red de VPC y se basan en el recurso de regla de reenvío.
Envías tráfico al extremo, que lo reenvía a destinos fuera de tu red de VPC.
Objetivos
Los extremos de Private Service Connect tienen un destino, que es el servicio al que quieres conectarte:
- Un paquete de API:
- Todas las API: la mayoría de las API de Google
- VPC-SC: las API que admiten los Controles del servicio de VPC
- Un servicio publicado en otra red de VPC. Tu propia organización o una externa puede administrar este servicio.
Servicio publicado
Para conectar tu extremo al servicio de un productor de servicios, necesitas el adjunto de servicio para el servicio. El URI del adjunto de servicio tiene este formato: projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME
4. Conceptos clave para los productores de servicios
Para que un servicio esté disponible para los consumidores, debes crear una o más subredes dedicadas que se usarán en la traducción de direcciones de red (NAT) de las direcciones IP del consumidor. Luego, crearás un adjunto de servicio que haga referencia a esas subredes.
Subredes de Private Service Connect
Para exponer un servicio, el productor de servicios primero crea una o más subredes con el propósito de Private Service Connect.
Cuando se envía una solicitud desde una red de VPC del consumidor, la dirección IP de origen del consumidor se traduce con NAT de origen (SNAT) a una dirección IP seleccionada de una de las subredes de Private Service Connect.
Si deseas conservar la información de la dirección IP de conexión del consumidor, consulta Cómo ver la información de conexión del consumidor.
Estas subredes no se pueden usar para recursos como instancias de VM o reglas de reenvío. Las subredes se usan solo para proporcionar direcciones IP para SNAT de conexiones de consumidores entrantes.
La subred de Private Service Connect debe contener al menos una dirección IP por cada 63 VMs del consumidor, de modo que cada VM del consumidor tenga asignada 1,024 tuplas de origen para la traducción de direcciones de red.
El tamaño mínimo de una subred de Private Service Connect es /24.
Adjuntos de servicio
Los productores de servicios exponen sus servicios a través de un adjunto de servicio.
- Para exponer un servicio, un productor de servicios crea un adjunto de servicio que hace referencia a la regla de reenvío del balanceador de cargas del servicio.
- Para acceder a un servicio, un consumidor de servicios crea un extremo que hace referencia al adjunto de servicio.
Preferencias de conexión
Cuando creas un servicio, eliges cómo ponerlo a disposición. Existen dos opciones:
- Aceptar automáticamente conexiones para todos los proyectos: cualquier consumidor de servicios puede configurar un extremo y conectarse al servicio automáticamente.
- Acepta conexiones para proyectos seleccionados: Los consumidores de servicios configuran un extremo para conectarse al servicio, y el productor de servicios acepta o rechaza las solicitudes de conexión.
5. Entorno de pruebas
La red del consumidor consiste en una dirección IP estática de TCP que se usa para originar solicitudes al productor de servicios, además del adjunto de servicio de destino que se asigna al adjunto de servicio del productor (servicio publicado).
Ahora, veamos la red de productores. Observa que la red de productores no tiene una asignación a la red de consumidores, sino que contiene un adjunto de servicio (servicio publicado) que el consumidor usa para los servicios. El adjunto de servicio del productor en nuestro lab es un balanceador de cargas interno de capa 4 (regla de reenvío del productor) asignado a un servicio de backend que admite una aplicación de TCP.
La subred NAT y las reglas de firewall asociadas permiten la comunicación con la aplicación del productor.
Configuración del entorno de autoaprendizaje
- Accede a la consola de Cloud 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.
Recuerde el ID de proyecto, un nombre único en todos los proyectos de Google Cloud (el nombre anterior ya se encuentra en uso y no lo podrá usar). Se mencionará más adelante en este codelab como PROJECT_ID
.
- A continuación, deberás habilitar la facturación en la consola de Cloud para usar los recursos de Google Cloud recursos.
Ejecutar este codelab no debería costar mucho, tal vez nada. Asegúrate de seguir las instrucciones de la sección “Realiza una limpieza” en la que se aconseja cómo cerrar recursos para no incurrir en facturación más allá de este instructivo. 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 GCP Console, haga clic en el ícono de Cloud Shell en la barra de herramientas 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. Puedes realizar todo tu trabajo en este lab usando simplemente un navegador.
6. Antes de comenzar
El codelab requiere dos proyectos, pero no es un requisito para PSC. Ten en cuenta las referencias para admitir uno o varios proyectos.
Proyecto único: Actualizar el proyecto para admitir la red de productores y consumidores
En Cloud Shell, asegúrate de que el ID del proyecto esté configurado
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME consumerproject=YOUR-PROJECT-NAME echo $prodproject echo $consumerproject
Varios proyectos: Actualiza el proyecto para que admita la red de productores
En Cloud Shell, asegúrate de que el ID del proyecto esté configurado
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] prodproject=YOUR-PROJECT-NAME echo $prodproject
7. Crea la red de VPC de productores
Nota: En la siguiente sección, ejecuta las actualizaciones de configuración en el proyecto que contiene tu servicio de productor.
Red de VPC
Desde Cloud Shell
gcloud compute networks create vpc-demo-producer --project=$prodproject --subnet-mode=custom
Crear subred
Desde Cloud Shell
gcloud compute networks subnets create vpc-demo-us-west2 --project=$prodproject --range=10.0.2.0/24 --network=vpc-demo-producer --region=us-west2
Crea una instancia de Cloud NAT
Cloud NAT no es la misma NAT que se usa para PSC. Cloud NAT se usa explícitamente para el acceso a Internet con el objetivo de descargar paquetes de aplicaciones.
Crea un Cloud Router
Desde Cloud Shell
gcloud compute routers create crnatprod --network vpc-demo-producer --region us-west2
Crea Cloud NAT
Desde Cloud Shell
gcloud compute routers nats create cloudnatprod --router=crnatprod --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2
8. Crea instancias de procesamiento
Desde Cloud Shell, crea la instancia www-01
gcloud compute instances create www-01 \ --zone=us-west2-a \ --image-family=debian-9 \ --image-project=debian-cloud \ --subnet=vpc-demo-us-west2 --no-address \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install tcpdump -y apt-get install apache2 -y a2ensite default-ssl apt-get install iperf3 -y a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" filter="{print \$NF}" vm_zone="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/zone \ | awk -F/ "${filter}")" echo "Page on $vm_hostname in $vm_zone" | \ tee /var/www/html/index.html systemctl restart apache2 iperf3 -s -p 5050'
Desde Cloud Shell, crea la instancia www-02
gcloud compute instances create www-02 \ --zone=us-west2-a \ --image-family=debian-9 \ --image-project=debian-cloud \ --subnet=vpc-demo-us-west2 --no-address \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install tcpdump -y apt-get install apache2 -y a2ensite default-ssl apt-get install iperf3 -y a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/name)" filter="{print \$NF}" vm_zone="$(curl -H "Metadata-Flavor:Google" \ http://169.254.169.254/computeMetadata/v1/instance/zone \ | awk -F/ "${filter}")" echo "Page on $vm_hostname in $vm_zone" | \ tee /var/www/html/index.html systemctl restart apache2 iperf3 -s -p 5050'
9. Crear grupo de instancias no administrado
Crear un grupo de instancias no administrado que consista en www-01 y www-02
Desde Cloud Shell
gcloud compute instance-groups unmanaged create vpc-demo-ig-www --zone=us-west2-a gcloud compute instance-groups unmanaged add-instances vpc-demo-ig-www --zone=us-west2-a --instances=www-01,www-02 gcloud compute health-checks create http hc-http-80 --port=80
10. Crear servicios de backend de TCP, regla de reenvío y firewall
En Cloud Shell, crea el servicio de backend
gcloud compute backend-services create vpc-demo-www-be-tcp --load-balancing-scheme=internal --protocol=tcp --region=us-west2 --health-checks=hc-http-80 gcloud compute backend-services add-backend vpc-demo-www-be-tcp --region=us-west2 --instance-group=vpc-demo-ig-www --instance-group-zone=us-west2-a
En Cloud Shell, crea la regla de reenvío
gcloud compute forwarding-rules create vpc-demo-www-ilb-tcp --region=us-west2 --load-balancing-scheme=internal --network=vpc-demo-producer --subnet=vpc-demo-us-west2 --address=10.0.2.10 --ip-protocol=TCP --ports=all --backend-service=vpc-demo-www-be-tcp --backend-service-region=us-west2
En Cloud Shell, crea una regla de firewall para habilitar las verificaciones de estado del backend.
gcloud compute firewall-rules create vpc-demo-health-checks --allow tcp:80,tcp:443 --network vpc-demo-producer --source-ranges 130.211.0.0/22,35.191.0.0/16 --enable-logging
Para permitir que IAP se conecte a tus instancias de VM, crea una regla de firewall que haga lo siguiente:
- Se aplica a todas las instancias de VM a las que deseas que se pueda acceder mediante IAP.
- Permite el tráfico de entrada del 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 firewall-rules create psclab-iap-prod --network vpc-demo-producer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
11. Crea una subred TCP NAT
Desde Cloud Shell
gcloud compute networks subnets create vpc-demo-us-west2-psc-tcp --network=vpc-demo-producer --region=us-west2 --range=192.168.0.0/24 --purpose=private-service-connect
12. Crear adjuntos de servicio TCP y reglas de firewall
En Cloud Shell, crea el adjunto de servicio de TCP
gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 --producer-forwarding-rule=vpc-demo-www-ilb-tcp --connection-preference=ACCEPT_AUTOMATIC --nat-subnets=vpc-demo-us-west2-psc-tcp
Valida el adjunto de servicio de TCP
gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region us-west2
En Cloud Shell, crea la regla de firewall que permita el acceso de la subred TCP NAT al backend de ILB.
gcloud compute --project=$prodproject firewall-rules create vpc-demo-allowpsc-tcp --direction=INGRESS --priority=1000 --network=vpc-demo-producer --action=ALLOW --rules=all --source-ranges=192.168.0.0/24 --enable-logging
13. Crea la red de VPC de consumidores
Nota: En la siguiente sección, ejecuta las actualizaciones de configuración en el proyecto que contiene tu cuenta de Servicio al consumidor.
En la siguiente sección, la VPC del consumidor se configura en un proyecto independiente. La comunicación entre la red del consumidor y el productor se realiza a través del adjunto de servicio definido en la red de los consumidores.
Red de VPC
El codelab requiere dos proyectos, pero no es un requisito para PSC. Ten en cuenta las referencias para admitir uno o varios proyectos.
Proyecto único: Actualizar el proyecto para admitir la red de productores y consumidores
En Cloud Shell, asegúrate de que el ID del proyecto esté configurado
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] consumerproject=YOUR-PROJECT-NAME prodproject=YOUR-PROJECT-NAME echo $prodproject echo $consumerproject
Varios proyectos: Actualiza el proyecto para respaldar una red al consumidor
En Cloud Shell, asegúrate de que el ID del proyecto esté configurado
gcloud config list project gcloud config set project [YOUR-PROJECT-NAME] consumerproject=YOUR-PROJECT-NAME echo $consumerproject
Desde Cloud Shell
gcloud compute networks create vpc-demo-consumer --project=$consumerproject --subnet-mode=custom
Crea una subred para PSC
Desde Cloud Shell
gcloud compute networks subnets create consumer-subnet --project=$consumerproject --range=10.0.60.0/24 --network=vpc-demo-consumer --region=us-west2
Crea una dirección IP estática para aplicaciones de TCP
Desde Cloud Shell
gcloud compute addresses create vpc-consumer-psc-tcp --region=us-west2 --subnet=consumer-subnet --addresses 10.0.60.100
Crea reglas de firewall
Para permitir que IAP se conecte a tus instancias de VM, crea una regla de firewall que haga lo siguiente:
- Se aplica a todas las instancias de VM a las que deseas que se pueda acceder mediante IAP.
- Permite el tráfico de entrada del 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 firewall-rules create psclab-iap-consumer --network vpc-demo-consumer --allow tcp:22 --source-ranges=35.235.240.0/20 --enable-logging
Aunque no es necesario para PSC, crea una regla de firewall de salida para supervisar el tráfico de PSC del consumidor al adjunto de servicio del productor.
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
Crea una instancia de Cloud NAT
Cloud NAT no es la misma NAT que se usa para PSC. Cloud NAT se usa explícitamente para el acceso a Internet con el objetivo de descargar paquetes de aplicaciones
Crea un Cloud Router
Desde Cloud Shell
gcloud compute routers create crnatconsumer --network vpc-demo-consumer --region us-west2
Crea Cloud NAT
Desde Cloud Shell
gcloud compute routers nats create cloudnatconsumer --router=crnatconsumer --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --enable-logging --region us-west2
14. Crea una VM de instancia de prueba
Desde Cloud Shell
gcloud compute instances create test-instance-1 \ --zone=us-west2-a \ --image-family=debian-9 \ --image-project=debian-cloud \ --subnet=consumer-subnet --no-address \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install iperf3 -y apt-get install tcpdump -y'
15. Crear adjunto de servicio de TCP
Desde Cloud Shell
gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp --region=us-west2 --network=vpc-demo-consumer --address=vpc-consumer-psc-tcp --target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp
16. Validación
Usaremos CURL, TCPDUMP y Registros de firewall para validar la comunicación entre consumidores y productores.
Dentro del proyecto del consumidor, las direcciones IP estáticas se usan para originar la comunicación con el productor. Esta asignación de la dirección IP estática a la regla de reenvío del consumidor se valida con la siguiente sintaxis.
Nota: En la siguiente sección, ejecuta las actualizaciones de configuración en el proyecto que contiene tu cuenta de Servicio al consumidor.
Desde las VPC de consumidor, Cloud Shell identifica la regla de reenvío de TCP y la IP estática
gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region us-west2
Resultado:
IPAddress: 10.0.60.100 IPProtocol: TCP creationTimestamp: '2021-07-14T13:34:23.359-07:00' id: '2768158450402915488' kind: compute#forwardingRule labelFingerprint: 42WmSpB8rSM= name: vpc-consumer-psc-fr-tcp <snip>
17. Validación de TCP
Nota: En la siguiente sección, ejecuta las actualizaciones de configuración en el proyecto que contiene tu servicio de productor.
En el proyecto Producer, identifica "www-01". & “www-02” y, luego, iniciar una sesión SSH por instancia.
De "www-01" realizar TCPDUMP para supervisar NAT
sudo tcpdump -i any net 192.168.0.0/16 -n
De "www-02" realizar TCPDUMP para supervisar NAT
sudo tcpdump -i any net 192.168.0.0/16 -n
Nota: En la siguiente sección, ejecuta las actualizaciones de configuración en el proyecto que contiene tu cuenta de Servicio al consumidor.
En el Proyecto del consumidor,identifica "test-instance-1". y lanzar dos sesiones.
Desde “test-instance-1” sesión uno realiza TCPDUMP para supervisar al consumidor
sudo tcpdump -i any host 10.0.60.100 -n
Desde “test-instance-1” la sesión dos realiza la validación de TCP
curl -v 10.0.60.100
18. Observaciones: Consumidor
Desde “test-instance-1” CURL de la sesión dos es exitosa y produce 200 OK.
@test-instance-1:~$ curl -v 10.0.60.100 * Rebuilt URL to: 10.0.60.100/ * Trying 10.0.60.100... * TCP_NODELAY set * Connected to 10.0.60.100 (10.0.60.100) port 80 (#0) > GET / HTTP/1.1 > Host: 10.0.60.100 > User-Agent: curl/7.52.1 > Accept: */* > < HTTP/1.1 200 OK < Date: Wed, 14 Jul 2021 21:20:22 GMT < Server: Apache/2.4.25 (Debian) < Last-Modified: Wed, 14 Jul 2021 20:09:09 GMT < ETag: "1d-5c71aed5edabd" < Accept-Ranges: bytes < Content-Length: 29 < Content-Type: text/html < Page on www-01 in us-west2-a * Curl_http_done: called premature == 0 * Connection #0 to host 10.0.60.100 left intact
Desde “test-instance-1” TCPDUMP de sesión uno identifica la instancia de VM → comunicación y respuesta de IP de TCP estático
21:20:22.572052 IP 10.0.60.2.59432 > 10.0.60.100.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1 21:20:22.572688 IP 10.0.60.100.80 > 10.0.60.2.59432: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK
Registros de firewall
Con el Explorador de registros, valida la regla de firewall “vpc-consumner-psc”. es capturar el flujo entre la instancia de VM y la IP estática
- En la consola de Cloud, identifica Operations Logging → Explorador de registros
- En el campo Consulta, actualiza la entrada que aparece a continuación con yourconsumerproject y selecciona "Ejecutar consulta"
logName:(projects/yourconsumerproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:vpc-consumer-psc")
- Los resultados de la consulta proporcionan lo siguiente por captura de pantalla proporcionada.
- Expande el registro y, luego, identifica el resultado que se proporciona a continuación. Toma nota de dest_ip: 10.0.60.100 es la IP de TCP ESTÁTICA y src_ip: 10.0.60.2 es la dirección IP de la instancia de VM.
19. Observaciones: Productor
Desde la instancia de backend "www-01" o "www-02" se observa la siguiente comunicación entre la subred TCP NAT y el ILB de TCP.
21:20:22.572186 IP 192.168.0.2.1024 > 10.0.2.10.80: Flags [P.], seq 1:76, ack 1, win 222, options [nop,nop,TS val 634554 ecr 998739], length 75: HTTP: GET / HTTP/1.1 21:20:22.572679 IP 10.0.2.10.80 > 192.168.0.2.1024: Flags [P.], seq 1:257, ack 76, win 220, options [nop,nop,TS val 998739 ecr 634554], length 256: HTTP: HTTP/1.1 200 OK
20. Registros de firewall
Con el Explorador de registros, valida la regla de firewall “vpc-demo-allowpsc-tcp” es capturar la NAT de TCP y Flujo de ILB de TCP mediante los siguientes pasos:
- En la consola de Cloud, identifica Operations Logging → Explorador de registros
- En el campo Consulta, actualiza la entrada que aparece a continuación con tu proyecto y selecciona "Ejecutar consulta"
logName:(projects/yourprodproject/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-producer/firewall:vpc-demo-allowpsc-tcp")
- Los resultados de la consulta proporcionan lo siguiente por captura de pantalla proporcionada.
- Expande el registro y, luego, identifica el resultado que se proporciona a continuación. Toma nota de TCP ILB dest_ip: 10.0.2.10 y de NAT TCP source_range (192.168.0.0/24). el src_ip respectivo: 192.168.0.2.
21. Habilitar el protocolo de proxy
De forma predeterminada, Private Service Connect traduce la dirección IP de origen del consumidor a una dirección en una de las subredes de Private Service Connect en la red de VPC del productor de servicios. Si deseas ver la dirección IP de origen original del consumidor, puedes habilitar el protocolo PROXY. Si el protocolo PROXY está habilitado, puedes obtener la dirección IP de origen del consumidor y el ID de conexión de PSC del encabezado del protocolo PROXY.
Borra los servicios publicados por el productor
Nota: En la siguiente sección, ejecuta las actualizaciones de configuración en el proyecto que contiene tu servicio de productor.
En Cloud Shell, borra los adjuntos del servicio TCP
gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet
Se borran los adjuntos de servicio validados desde Cloud Shell (0 elementos enumerados)
gcloud compute service-attachments list
Crear adjunto de servicio TCP con el protocolo de proxy habilitado
gcloud compute service-attachments create vpc-demo-psc-west2-tcp --region=us-west2 \ --producer-forwarding-rule=vpc-demo-www-ilb-tcp \ --connection-preference=ACCEPT_AUTOMATIC \ --nat-subnets=vpc-demo-us-west2-psc-tcp \ --enable-proxy-protocol
Desde Cloud Shell, valida que los adjuntos de servicio se creen con el protocolo de proxy habilitado (verdadero).
gcloud compute service-attachments describe vpc-demo-psc-west2-tcp --region=us-west2 | grep -i enableProxyProtocol:
Nota: En la siguiente sección, ejecuta las actualizaciones de configuración en el proyecto que contiene tu cuenta de Servicio al consumidor.
Desde Cloud Shell, borra las reglas de reenvío de TCP
gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet
Vuelve a crear las reglas de reenvío de TCP para asociarlas con el adjunto de servicio (productor) creado previamente
Desde Cloud Shell, crea la regla de reenvío de TCP
gcloud compute forwarding-rules create vpc-consumer-psc-fr-tcp \ --region=us-west2 --network=vpc-demo-consumer \ --address=vpc-consumer-psc-tcp \ --target-service-attachment=projects/$prodproject/regions/us-west2/serviceAttachments/vpc-demo-psc-west2-tcp
Validación del protocolo de proxy
Nota: En la siguiente sección, ejecuta las actualizaciones de configuración en el proyecto que contiene tu servicio de productor.
En el proyecto Producer, identifica "www-01". & “www-02” y abrir una sesión por instancia.
De "www-01" realizar TCPDUMP para supervisar NAT
sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16
De "www-02" realizar TCPDUMP para supervisar NAT
sudo tcpdump -nnvvXSs 1514 net 192.168.0.0/16
Nota: En la siguiente sección, ejecuta las actualizaciones de configuración en el proyecto que contiene tu cuenta de Servicio al consumidor.
En el Proyecto del consumidor,identifica "test-instance-1". y lanzar una única sesión
Desde “test-instance-1” realiza un curl
curl 10.0.60.100
Observaciones: Consumidor
Ten en cuenta que si el protocolo PROXY v2 está habilitado, pero la aplicación no está configurada para admitirlo, aparecerá un mensaje de error si te conectas desde el cliente, como se indica en el siguiente ejemplo. Se requieren actualizaciones de Apache para admitir el encabezado v2 del proxy adicional y no se trata en el codelab.
Desde “test-instance-1” CURL de la sesión producirá 400 solicitudes incorrectas esperadas, aunque la consulta de backend sea exitosa.
@test-instance-1:~$ curl 10.0.60.100 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>400 Bad Request</title> </head><body> <h1>Bad Request</h1> <p>Your browser sent a request that this server could not understand.<br /> </p> <hr> <address>Apache/2.4.25 (Debian) Server at www-02.c.deepakmichaelprod.internal Port 80</address>
Observaciones: Consumidor
Desde la instancia de backend "www-01" o "www-02" La siguiente comunicación entre la subred TCP NAT y el ILB de TCP se observa con el protocolo de proxy incorporado en la captura.
En la mayoría de los casos, el tercer paquete de tcpdump contiene los elementos de información de protocolo de proxy (IE) relevantes. De manera opcional, identifica el paquete con 39 bytes que contiene el protocolo IE del protocolo de proxy.
192.168.0.3.1025 > 10.0.2.10.80: Flags [P.], cksum 0xb617 (correct), seq 2729454396:2729454435, ack 1311105819, win 28160, length 39: HTTP 0x0000: 4500 004f 0000 4000 4006 6df4 c0a8 0003 E..O..@.@.m..... 0x0010: 0a00 020a 0401 0050 a2b0 2b3c 4e25 e31b .......P..+<N%.. 0x0020: 5018 6e00 b617 0000 0d0a 0d0a 000d 0a51 P.n............Q 0x0030: 5549 540a 2111 0017 0a00 3c02 0a00 3c64 UIT.!.....<...<d 0x0040: 8138 0050 e000 0800 9b34 d70a 003c 64 .8.P.....4...<d
Identifica la firma del protocolo PROXY: 0d0a0d0a000d0a515549540a en la captura de paquetes
Al identificar la firma del protocolo PROXY, es posible desglosar y decodificar los campos de la siguiente manera:
Firma del protocolo PROXY: 0d0a0d0a000d0a515549540a
Otros campos del protocolo PROXY: 21 11 00 17
IP y puertos: 0a003c02 0a003c64 8138 0050
Tipo de TLV: e0
Longitud del TLV: 00 08
ID de pscConnection: 009b34d70a003c64
Hexadecimal | Decimales / IP | ||
Firma del protocolo PROXY |
| ||
Versión, protocolo, longitud |
| ||
IP de Src |
|
| |
IP de Dst |
|
| |
Puerto Src |
|
| |
Puerto D |
|
| |
Tipo de TLV (PP2_TYPE_GCP) |
| ||
Longitud del TLV |
| ||
pscConnectionId |
|
|
El pscConnectionId también se puede validar describiendo la regla de reenvío del consumidor como se muestra a continuación y asegurándote de que coincida:
Nota: En la siguiente sección, ejecuta las actualizaciones de configuración en el proyecto que contiene tu cuenta de Servicio al consumidor.
Desde Cloud Shell, describe las reglas de reenvío de TCP
gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2
Salida que describe el pscConnectionID
$ gcloud compute forwarding-rules describe vpc-consumer-psc-fr-tcp --region=us-west2 IPAddress: 10.0.60.100 IPProtocol: TCP creationTimestamp: '2021-07-14T16:50:31.766-07:00' id: '4443494505307621032' kind: compute#forwardingRule labelFingerprint: 42WmSpB8rSM= name: vpc-consumer-psc-fr-tcp network: https://www.googleapis.com/compute/v1/projects/deepakmichaeldev/global/networks/vpc-demo-consumer networkTier: PREMIUM pscConnectionId: '43686719580552292' pscConnectionStatus: ACCEPTED
22. Política de conexión
Puedes alternar entre la aceptación de proyecto automática y la explícita para un servicio publicado.
El cambio de aceptación automática a aceptación explícita no afecta los endpoints del consumidor que se habían conectado al servicio antes de este cambio. Los extremos del consumidor existentes pueden conectarse al servicio publicado hasta que se borre el adjunto de servicio. Se deben aceptar los extremos del consumidor nuevos antes de que puedan conectarse al servicio. Consulta Administra solicitudes de acceso a un servicio publicado para obtener más información.
En esta sección del lab, modificarás la política de conexión del productor para aprobar explícitamente el adjunto de servicio del consumidor.
Nota: En la siguiente sección, ejecuta las actualizaciones de configuración en el proyecto que contiene tu servicio de productor.
Desde el servicio de productores, Cloud Shell, actualiza la política de preferencia de conexión para que acepte de forma automática a Aceptarla de forma manual
gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --connection-preference ACCEPT_MANUAL
Para identificar el estado del extremo, navega a Servicios de red → Private Service Connect → Servicios publicados → vpc-demo-psc-west2-tcp → Proyectos conectados
Aviso: El proyecto del consumidor cambió a “Pendiente” en Proyectos conectados.
Para aceptar el proyecto del consumidor, ejecuta el siguiente comando en Cloud Shell. Asegúrate de actualizar con el nombre del proyecto adecuado.
gcloud compute service-attachments update vpc-demo-psc-west2-tcp --region=us-west2 --consumer-accept-list $consumerproject=20
Para identificar el estado del extremo, navega a Servicios de red → Private Service Connect → Servicios publicados → vpc-demo-psc-west2-tcp → Proyectos conectados
Aviso: El proyecto del consumidor cambió a "Aceptado". en Proyectos conectados.
23. Pasos de limpieza
Pasos de limpieza de la red del productor
Nota: En la siguiente sección, ejecuta las actualizaciones de configuración en el proyecto que contiene tu servicio de productor.
Borra los componentes del lab desde una sola Cloud Shell en la terminal del proyecto de Producer
gcloud compute routers nats delete cloudnatprod --router=crnatprod --region=us-west2 --quiet gcloud compute routers delete crnatprod --region=us-west2 --quiet gcloud compute instances delete www-01 --zone=us-west2-a --quiet gcloud compute instances delete www-02 --zone=us-west2-a --quiet gcloud compute service-attachments delete vpc-demo-psc-west2-tcp --region=us-west2 --quiet gcloud compute forwarding-rules delete vpc-demo-www-ilb-tcp --region=us-west2 --quiet gcloud compute backend-services delete vpc-demo-www-be-tcp --region=us-west2 --quiet gcloud compute instance-groups unmanaged delete vpc-demo-ig-www --zone=us-west2-a --quiet gcloud compute health-checks delete hc-http-80 --quiet gcloud compute firewall-rules delete vpc-demo-allowpsc-tcp --quiet gcloud compute firewall-rules delete vpc-demo-health-checks --quiet gcloud compute firewall-rules delete psclab-iap-prod --quiet gcloud compute networks subnets delete vpc-demo-us-west2 --region=us-west2 --quiet gcloud compute networks subnets delete vpc-demo-us-west2-psc-tcp --region=us-west2 --quiet gcloud compute networks delete vpc-demo-producer --quiet
Nota: En la siguiente sección, ejecuta las actualizaciones de configuración en el proyecto que contiene tu cuenta de Servicio al consumidor.
Pasos para limpiar la red del consumidor
Borra los componentes del lab desde una sola Cloud Shell en la terminal del proyecto de Producer
gcloud compute routers nats delete cloudnatconsumer --router=crnatconsumer --region=us-west2 --quiet gcloud compute routers delete crnatconsumer --region=us-west2 --quiet gcloud compute instances delete test-instance-1 --zone=us-west2-a --quiet gcloud compute forwarding-rules delete vpc-consumer-psc-fr-tcp --region=us-west2 --quiet gcloud compute addresses delete vpc-consumer-psc-tcp --region=us-west2 --quiet gcloud compute firewall-rules delete psclab-iap-consumer --quiet gcloud compute networks subnets delete consumer-subnet --region=us-west2 --quiet gcloud compute firewall-rules delete vpc-consumer-psc --quiet gcloud compute networks delete vpc-demo-consumer --quiet
24. ¡Felicitaciones!
Felicitaciones por completar el codelab.
Temas abordados
- Beneficios de Private Service Connect
- Conceptos clave para los consumidores de servicios
- Conceptos clave para los productores de servicios
- Crear un entorno de productor
- Expón el servicio (entorno de productor) a través de un adjunto de servicio
- Crea un entorno de consumidor
- Crea una regla de reenvío en la red del consumidor
- Valida el acceso de los consumidores de TCP
- Habilitar y validar el protocolo de proxy
- Habilitar el control de acceso de las políticas