Usa Private Service Connect para publicar y consumir servicios con GKE

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
  • Habilitar el control de acceso de las políticas
  • Usa una regla de firewall de salida para bloquear el acceso a una regla de reenvío de consumidor

Requisitos

  • Conocimiento de la implementación de clústeres y servicios de GKE
  • Conocimiento sobre los balanceadores de cargas internos
  • Capacidad de crear VPC en dos proyectos
  • Capacidad de crear clústeres de GKE

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 autorizado procedente 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.

Requisitos y limitaciones

  • Se aplican limitaciones para Private Service Connect.
  • Puedes crear un adjunto de servicio en las versiones de GKE 1.21.4-gke.300 y posteriores.
  • No puedes usar la misma subred para múltiples parámetros de configuración de adjuntos de servicio.
  • Debes crear un servicio GKE que use un balanceador de cargas TCP/UDP interno.

5. Entorno de pruebas

La red del consumidor consiste en una dirección IP estática 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).

1ce5607c0c56d77d.jpeg

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 se expone mediante un ILB (servicio publicado) de entrada de GKE que permite la comunicación con los Pods de GKE. aplicaciones asociadas.

La subred NAT se usa 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.

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.

Para obtener más información sobre L4ILB para GKE Private Service Connect y obtener acceso directo al contenido que se usa para hacer referencia a este lab, consulta lo siguiente .

Configuración del entorno de autoaprendizaje

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

96a9c957bc475304.png

b9a10ebdf5b5a448.png

a1e3c01a38fa61c2.png

  • El Nombre del proyecto es el nombre visible de los participantes de este proyecto. Es una string de caracteres que no se utiliza en las API de Google y se puede actualizar en cualquier momento.
  • El ID del proyecto debe ser único en todos los proyectos de Google Cloud y es inmutable (no se puede cambiar después de configurarlo). Cloud Console genera automáticamente una string única, que, por lo general, no importa cuál sea. En la mayoría de los codelabs, debes hacer referencia al ID del proyecto (suele ser PROJECT_ID). Por lo tanto, si no te gusta, genera otro aleatorio o prueba con uno propio y comprueba si está disponible. Después de crear el proyecto, este ID se “congela” y no se puede cambiar.
  • Además, hay un tercer valor, el Número de proyecto, que usan algunas API. Obtén más información sobre estos tres valores en la documentación.
  1. A continuación, deberás habilitar la facturación en Cloud Console para usar las API o los recursos de Cloud. Ejecutar este codelab no debería costar mucho, tal vez nada. Si quieres cerrar los recursos para no se te facture más allá de este instructivo, sigue las instrucciones de “limpieza” que se encuentran al final del codelab. Los usuarios nuevos de Google Cloud son aptos para participar en el programa Prueba gratuita de USD 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

Ten en cuenta la siguiente convención de códigos de colores:

f251ebb137e37136.png

7. Crea la red de VPC de productores

afe738fc869f0d6e.png

Red de VPC

Desde Cloud Shell

gcloud compute networks create gke-producer-l4-vpc --project=$prodproject --subnet-mode=custom 

Crea una subred de clúster de GKE

Desde Cloud Shell

gcloud compute networks subnets create node-subnet1 --project=$prodproject --range=192.168.10.0/24 --network=gke-producer-l4-vpc --region=us-central1 --secondary-range=pod=10.10.10.0/24,service=10.10.20.0/24 --enable-private-ip-google-access

Crea un clúster de GKE

Desde Cloud Shell

gcloud container clusters create gke-psc-l4 \
    --release-channel=rapid \
    --enable-ip-alias \
    --zone=us-central1-a \
    --network gke-producer-l4-vpc \
    --num-nodes 1 \
    --subnetwork node-subnet1 \
    --cluster-secondary-range-name pod \
    --services-secondary-range-name service

Crea una subred para Private Service Connect (subred de NAT)

Debes crear una o más subredes dedicadas para usar con Private Service Connect. Si usas la consola de Google Cloud para publicar un servicio, puedes crear las subredes durante ese procedimiento.

Para obtener información sobre las subredes de Private Service Connect, consulta Subredes de Private Service Connect.

Desde Cloud Shell

gcloud beta compute networks subnets create gke-nat-subnet \
    --project $prodproject \
    --network gke-producer-l4-vpc \
    --region us-central1 \
    --range 100.100.10.0/24 \
    --purpose PRIVATE_SERVICE_CONNECT

8. Implementa una carga de trabajo y servicios

En el siguiente manifiesto, se describe un objeto Deployment que ejecuta una imagen de contenedor de la aplicación web de muestra. Guarda el manifiesto como my-deployment.yaml desde Cloud Shell.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: psc-ilb
spec:
  replicas: 3
  selector:
    matchLabels:
      app: psc-ilb
  template:
    metadata:
      labels:
        app: psc-ilb
    spec:
      containers:
      - name: whereami
        image: gcr.io/google-samples/whereami:v1.2.1
        ports:
          - name: http
            containerPort: 8080
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 5
          timeoutSeconds: 1

Aplica el manifiesto al clúster desde Cloud Shell

kubectl apply -f my-deployment.yaml

Creación de servicio

En el siguiente manifiesto, se describe un servicio que crea un balanceador de cargas TCP/UDP interno en el puerto TCP 8080. Guarda el manifiesto como my-service.yaml desde Cloud Shell.

apiVersion: v1
kind: Service
metadata:
  name: gke-l4-psc
  annotations:
    networking.gke.io/load-balancer-type: "Internal"
spec:
  type: LoadBalancer
  selector:
    app: psc-ilb
  ports:
  - port: 80
    targetPort: 8080
    protocol: TCP

Aplica el manifiesto al clúster desde Cloud Shell

kubectl apply -f my-service.yaml

Crea un ServiceAttachment

En el siguiente manifiesto, se describe un ServiceAttachment que expone el servicio que creaste a los consumidores de servicios. Guarda el manifiesto como my-psc.yaml en Cloud Shell.

apiVersion: networking.gke.io/v1beta1
kind: ServiceAttachment
metadata:
 name: emoji-sa
 namespace: default
spec:
 connectionPreference: ACCEPT_AUTOMATIC
 natSubnets:
 - gke-nat-subnet
 proxyProtocol: false
 resourceRef:
   kind: Service
   name: gke-l4-psc

Aplica el manifiesto al clúster desde Cloud Shell

kubectl apply -f my-psc.yaml

El ServiceAttachment tiene los siguientes campos:

  • connectionPreference: La preferencia de conexión que determina cómo se conectan los clientes al servicio. Puedes usar la aprobación automática del proyecto con ACCEPT_AUTOMATIC o la aprobación explícita del proyecto con ACCEPT_AUTOMATIC. Para obtener más información, consulta Publicación de servicios con Private Service Connect.
  • natSubnets: Una lista de nombres de recursos de subred para usar para el adjunto de servicio
  • proxyProtocol: cuando se configura como verdadero, la IP de origen del consumidor y el ID de conexión de Private Service Connect están disponibles en las solicitudes. Este campo es opcional y su valor predeterminado es falso si no se proporciona.
  • consumerAllowList: la lista de proyectos de consumidor que pueden conectarse al ServiceAttachment. Este campo solo se puede usar cuando connectionPreference es connectionPreference. Para obtener más información sobre este campo y otras opciones, consulta Publicación de servicios con Private Service Connect.

Validación del productor

Visualiza los detalles del adjunto de servicio

Puedes ver los detalles de un ServiceAttachment con el siguiente comando desde Cloud Shell

kubectl describe serviceattachment emoji-sa

Ver el ILB de GKE L4

En la consola de Cloud, navega a Servicios de red → Balanceo de cargas → Frontends

Identifica la dirección IP de frontend que se alinea con la subred de nodo 192.168.10.0/24 definida anteriormente. Observa la siguiente captura de pantalla, ya que tu dirección IP puede ser diferente.

ed7a25ed4774977b.png

Ver el servicio publicado

En la consola de Cloud, navega a Servicios de red → Private Service Connect → Servicios publicados

Identifica el servicio con la red que usaste en el lab, gke-producer-l4-vpc, toma nota de la siguiente captura de pantalla (aunque los valores de Service y Target pueden diferir)

5a00836ee514b918.png

Haz clic en el nombre del servicio que te lleva a la siguiente pantalla. Ten en cuenta los detalles del adjunto de servicio propagados en la información básica. También observa los “proyectos conectados” está vacío, ya que el consumidor aún no se registró en el servicio. Las opciones ACEPTAR y RECHAZAR permanecerán inhabilitadas, ya que Preferencia de conexión está configurada como "ACEPTAR_AUTOMATICAL". Esta opción se puede cambiar en cualquier momento a "ACEPTAR_MANUAL". Para ello, debes modificar el archivo adjunto de servicio yaml (my-psc.yaml).

497f5f43920018c0.png

e246063a23771273.png

9. Crea la red de VPC de consumidores

1f3c90f1e139e906.png

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.

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 admitir 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

Red de VPC

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-central1

Crea una subred para instancias de VM

Desde Cloud Shell

gcloud compute networks subnets create consumer-subnet-vm --project=$consumerproject  --range=10.0.70.0/24 --network=vpc-demo-consumer --region=us-central1

Crea una dirección IP estática para acceder al servicio publicado

Desde Cloud Shell

gcloud compute addresses create vpc-consumer-psc --region=us-central1 --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

10. Crea la instancia de prueba de consumidor 1

Desde Cloud Shell

gcloud compute instances create consumer-instance-1 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.10 --no-address --subnet=consumer-subnet-vm --tags=google1 --image-family=debian-10 --image-project=debian-cloud

11. Crea la instancia de prueba de consumidor 2

Desde Cloud Shell

gcloud compute instances create consumer-instance-2 --zone=us-central1-a --machine-type=e2-micro --private-network-ip=10.0.70.20 --no-address --subnet=consumer-subnet-vm --tags=google2 --image-family=debian-10 --image-project=debian-cloud

12. Crea un adjunto de servicio

En un paso anterior, copiaste la cadena del adjunto de servicio del productor en un lugar seguro. Insertemos el valor almacenado en “target-service-attach” .

7abaccc4e24f1ef7.png

Desde Cloud Shell

gcloud compute forwarding-rules create vpc-consumer-psc-fr --region=us-central1 --network=vpc-demo-consumer --address=vpc-consumer-psc --target-service-attachment=yoursavedproducerserviceattachment

13. Validación: Consumidor

Usaremos CURL & 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.

1f3c90f1e139e906.png

Desde las VPC de consumidor, Cloud usa la shell para identificar la regla de reenvío y la IP estática

gcloud compute forwarding-rules describe vpc-consumer-psc-fr --region us-central1

En el resultado que se muestra a continuación, usaremos 10.0.60.100 para llegar al productor en un paso posterior.

IPAddress: 10.0.60.100
creationTimestamp: '2021-09-30T21:13:54.124-07:00'
id: '3564572805904938477'
kind: compute#forwardingRule
labelFingerprint: 42WmSpB8rSM=
name: vpc-consumer-psc-fr
network: https://www.googleapis.com/compute/v1/projects/deepakmichaelstage/global/networks/vpc-demo-consumer
networkTier: PREMIUM
pscConnectionId: '36583161500548196'
pscConnectionStatus: ACCEPTED

Visualiza el servicio conectado

Desde la consola de Cloud, navega a Servicios de red → Private Service Connect → Extremos conectados y ver el extremo recién creado

206bc00297aaa260.png

Permite acceder a consumer-instance-1 y probar el acceso al servicio publicado por el productor

En Cloud Shell, haz clic en el botón + para abrir una pestaña nueva.

81f3210b29faebd3.png

En Cloud Shell, haz lo siguiente:

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

gcloud compute ssh --zone "us-central1-a" "consumer-instance-1" --project "$projectname"

Una vez que hayas accedido a la instancia consumer-instance-1, realiza un curl en la dirección IP 10.0.60.100 de la regla de reenvío.

En Cloud Shell, haz lo siguiente:

user@consumer-instance-1:~$ curl 10.0.60.100

Resultado de ejemplo

user@consumer-instance-1:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodprojectid.internal",
  "pod_name": "psc-ilb-588887dfdb-w7tbr",
  "pod_name_emoji": "🤷",
  "project_id": "prodorijectid",
  "timestamp": "2021-10-01T17:43:37",
  "zone": "us-central1-a"

Permite acceder a consumer-instance-2 y probar el acceso al servicio publicado por el productor

En Cloud Shell, haz clic en el botón + para abrir una pestaña nueva.

81f3210b29faebd3.png

En Cloud Shell, haz lo siguiente:

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

gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"

En Cloud Shell, haz lo siguiente:

user@consumer-instance-2:~$ curl 10.0.60.100

Resultado de ejemplo

deepakmichael@consumer-instance-2:~$ curl 10.0.60.100
{
  "cluster_name": "gke-psc-l4",
  "host_header": "10.0.60.100",
  "node_name": "gke-gke-psc-l4-default-pool-f2c6e301-vnlz.c.prodproject.internal",
  "pod_name": "psc-ilb-588887dfdb-4jdql",
  "pod_name_emoji": "🧑🏿",
  "project_id": "prodproject",
  "timestamp": "2021-10-01T17:49:51",
  "zone": "us-central1-a"

14. Registro de firewall: Validación asignada

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/yourconsumerprojectID/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.

23e427b3060473.png

  1. Expande el registro (jsonPayload → Connection) e 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 que se usa para acceder a Producer Service y src_ip: 10.0.70.10 o 10.0.70.20 son las direcciones IP de la instancia de VM. Se permite la disposición.

2669743fd1f1cb0d.png

15. Validación: Productor

afe738fc869f0d6e.png

Desde el proyecto de productores, verifica que el adjunto de servicio se haya conectado correctamente. Navega a Network Services → Private Service Connect → Published Services

89ded87a63888f60.png

Si haces clic en el servicio, se mostrará el proyecto y el estado de tu consumidor conectado, como se ilustra a continuación

15966d47423ebc5f.png

16. Restringe el acceso a un servicio publicado

1f3c90f1e139e906.png

Hasta ahora, confirmamos que ambas instancias tienen acceso a los servicios publicados. Vamos a crear una regla de firewall de salida para denegar el acceso de consumer-instance-2 al servicio publicado.

De forma predeterminada, GCP permite todas las salidas, pero rechaza todo el tráfico de entrada. En los siguientes pasos, crearemos una regla de firewall basada en una etiqueta de red definida anteriormente “google2” se usará cuando se cree consumer-instance-2 para denegar el acceso al servicio publicado.

8fa2cda1dfec33a.png

Haz clic en + ejecutar la siguiente regla de firewall en Cloud Shell para abrir una pestaña nueva de Cloud Shell

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

gcloud compute --project=$projectname firewall-rules create psc-endpoint-deny-egress --direction=EGRESS --priority=999 --network=vpc-demo-consumer --action=DENY --rules=all --destination-ranges=10.0.60.100/32 --target-tags=google2 --enable-logging

Ahora, probemos si consumer-instance-2 puede acceder al servicio publicado. Si se agotó el tiempo de espera de tu sesión, deberás abrir una nueva instancia de Cloud Shell + y acceder a la VM como se detalla a continuación.

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

gcloud compute ssh --zone "us-central1-a" "consumer-instance-2" --project "$projectname"

En Cloud Shell, haz lo siguiente:

user@consumer-instance-2:~$ curl 10.0.60.100

Resultado de ejemplo

user@consumer-instance-2:~$ curl 10.0.60.100
curl: (7) Failed to connect to 10.0.60.100 port 80: Connection timed out

Registro de firewall: Validación denegada

Usa el Explorador de registros para validar la regla de firewall “psc-endpoint-deny-egress” 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/yourconsumerprojectID/logs/compute.googleapis.com%2Ffirewall) AND jsonPayload.rule_details.reference:("network:vpc-demo-consumer/firewall:psc-endpoint-deny-egress")

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

83b4fc7348ac93cd.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.70.10 o 10.0.70.20 son las direcciones IP de la instancia de VM. Disposición denegada.

a344f75f67590655.png

17. Pasos de limpieza

Pasos de limpieza de la red del productor

afe738fc869f0d6e.png

Borra los componentes del lab desde una sola Cloud Shell en la terminal del proyecto de Producer

gcloud container clusters delete gke-psc-l4 --region us-central1-a --quiet

gcloud compute networks subnets delete gke-nat-subnet --region=us-central1 --quiet

gcloud compute networks subnets delete node-subnet1 --region=us-central1 --quiet

gcloud compute networks delete gke-producer-l4-vpc --quiet

1f3c90f1e139e906.png

Pasos para limpiar la red del consumidor

Borra los componentes del lab desde una sola Cloud Shell en la terminal del proyecto de consumidor.

gcloud compute instances delete consumer-instance-1 --zone=us-central1-a --quiet

gcloud compute instances delete consumer-instance-2 --zone=us-central1-a --quiet

gcloud compute forwarding-rules delete vpc-consumer-psc-fr --region=us-central1 --quiet

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

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

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

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

gcloud compute firewall-rules delete vpc-consumer-psc --quiet

gcloud compute firewall-rules delete psc-endpoint-deny-egress --quiet

gcloud compute networks delete vpc-demo-consumer --quiet

18. ¡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
  • Habilitar el control de acceso de las políticas
  • Usaste una regla de firewall de salida para bloquear el acceso a una regla de reenvío de consumidor