Usa Private Service Connect para publicar y consumir servicios

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.

45b90d50690dd111.png

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.

28b09284a99eb60b.png

Configuración del entorno de autoaprendizaje

  1. 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.

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

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.

  1. 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:

bce75f34b2c53987.png

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:

f6ef2b5f13479f3a.png

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". &amp; “www-02” y, luego, iniciar una sesión SSH por instancia.

6d0bb8c5cb115876.png

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

  1. En la consola de Cloud, identifica Operations Logging → Explorador de registros
  2. 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")

  1. Los resultados de la consulta proporcionan lo siguiente por captura de pantalla proporcionada.

b573c878a8d6d01f.png

  1. 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.

1b4f46b3e61f6f12.png

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:

  1. En la consola de Cloud, identifica Operations Logging → Explorador de registros
  2. 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")

  1. Los resultados de la consulta proporcionan lo siguiente por captura de pantalla proporcionada.

8ce6b0d17d76ad6d.png

  1. 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.

e157a7af8cb667e.png

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.

e9d1c49971b10ed0.png

Referencia a la documentación

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". &amp; “www-02” y abrir una sesión por instancia.

6d0bb8c5cb115876.png

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

0d0a0d0a000d0a515549540a

Versión, protocolo, longitud

21 11 0017

IP de Src

0a003c02

10.0.60.2

IP de Dst

0a003c64

10.0.60.100

Puerto Src

8138

33080

Puerto D

0050

80

Tipo de TLV (PP2_TYPE_GCP)

e0

Longitud del TLV

0008

pscConnectionId

00004dde290a003c64

43686719580552292

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

e1d90d1563e10731.png

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

35cba9ac640594a2.png

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