Vertex AI accede a los extremos de predicción en línea de forma privada con PSC

1. Introducción

Los hosts locales pueden acceder a la predicción en línea de forma nativa a través de Internet pública (opción 1) o con Cloud VPN o Cloud Interconnect con Private Service Connect (PSC) (opción 2) desde tu red local. Ambas opciones ofrecen encriptación SSL/TLS. La conectividad híbrida a la predicción en línea a través de la interconexión tiene un mejor rendimiento que Internet, por lo que se recomienda para aplicaciones críticas, como se ilustra en la Figura 1.

En este instructivo, demostraremos cómo usar una VPN de alta disponibilidad (VPN con alta disponibilidad) para acceder a la predicción en línea de forma privada entre dos redes de VPC que pueden servir como base para la conectividad privada local y de múltiples nubes.

Ten en cuenta que Vertex Online Prediction es un extremo público, por lo que te recomendamos que restrinjas el acceso con los Controles del servicio de VPC (VPC-SC) para crear perímetros seguros que permitan o denieguen el acceso a Vertex y a otras APIs de Google. En este instructivo, no se abordan los Controles del servicio de VPC. Para obtener más detalles, consulta Controles del servicio de VPC con Vertex AI.

24a07ba49a7bcb16.png

Qué compilarás

Configurarás una red de VPC llamada on-prem-vpc para representar un entorno local. En tu implementación, no existiría on-prem-vpc, sino que se usaría una red híbrida para tu centro de datos local o proveedor de servicios en la nube.

Crearás una arquitectura integral de Private Service Connect que ilustre el acceso público a la predicción en línea a través de Cloud NAT y de forma privada con PSC a través de la VPN con alta disponibilidad, según los detalles que se indican a continuación.

b545c808b366341a.png

Una vez que se implemente la predicción en línea en el proyecto de Google Cloud, se explorarán los siguientes casos de uso:

El acceso público a la predicción en línea incluye lo siguiente:

  • Crea una instancia de GCE (nat-client) que aproveche la NAT para el acceso a Internet de salida
  • Usa CURL para realizar inferencias en el modelo
  • Usa TCPDUMP para validar que se accede a la predicción en línea a través de una VIP pública

El acceso privado a la predicción en línea consta de lo siguiente:

  • Implementa un modelo en un extremo de predicción en línea de Vertex en el proyecto
  • Crea un extremo de Private Service Connect (googleapis) en aiml-vpc
  • Exporta la dirección IP de PSC a través del Cloud Router como un anuncio personalizado a la VPC local.
  • Crea una instancia de GCE (private-client) y actualiza el archivo etc/hosts con la IP del extremo de PSC
  • Usa CURL para realizar inferencias en el modelo
  • Usa TCPDUMP para validar que se acceda a la predicción en línea a través de la dirección IP del extremo de PSC

Qué aprenderás

  • Cómo establecer un extremo de Private Service Connect
  • Cómo anunciar la IP del extremo de PSC a través de Cloud Router
  • Cómo usar TCPDUMP para validar el acceso a la predicción en línea, tanto pública como privada

Requisitos

  • Proyecto de Google Cloud

Permisos de IAM

Administrador de red de Compute

Editor del Directorio de servicios

Administrador de DNS

Administrador de redes

Administrador de cuotas

Administrador de notebooks

Service Account User

Administrador de almacenamiento

Usuario de Vertex AI

Administrador de cuenta de servicio

2. Antes de comenzar

Actualiza el proyecto para que admita el instructivo

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

Dentro de Cloud Shell, haz lo siguiente:

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

3. Habilitar servicios

Dentro de Cloud Shell, haz lo siguiente:

gcloud services enable dns.googleapis.com
gcloud services enable aiplatform.googleapis.com
gcloud services enable iam.googleapis.com 
gcloud services enable compute.googleapis.com 
gcloud services enable notebooks.googleapis.com

4. Configuración de aiml-vpc

Crea la VPC de aiml

Dentro de Cloud Shell, haz lo siguiente:

gcloud compute networks create aiml-vpc --project=$projectid --subnet-mode=custom

Crea la subred del notebook administrado por el usuario

Dentro de Cloud Shell, haz lo siguiente:

gcloud compute networks subnets create workbench-subnet --project=$projectid --range=172.16.10.0/28 --network=aiml-vpc --region=us-central1 --enable-private-ip-google-access

Configuración de Cloud Router y NAT

Cloud NAT se usa en el instructivo para las descargas de paquetes de software de notebooks porque la instancia de notebook administrada por el usuario no tiene una dirección IP externa. Cloud NAT también ofrece capacidades de NAT de salida, lo que significa que los hosts de Internet no pueden iniciar la comunicación con un notebook administrado por el usuario, lo que lo hace más seguro.

Dentro de Cloud Shell, crea el Cloud Router regional.

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

Dentro de Cloud Shell, crea la puerta de enlace de Cloud NAT regional.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-aiml-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

5. Configuración de on-prem-vpc

Crea la VPC local

Dentro de Cloud Shell, haz lo siguiente:

gcloud compute networks create on-prem-vpc --project=$projectid --subnet-mode=custom

Crea la subred nat-subnet

Dentro de Cloud Shell, haz lo siguiente:

gcloud compute networks subnets create nat-subnet --project=$projectid --range=192.168.10.0/28 --network=on-prem-vpc --region=us-central1

Crea la subred private-ip-subnet

Dentro de Cloud Shell, haz lo siguiente:

gcloud compute networks subnets create private-ip-subnet --project=$projectid --range=192.168.20.0/28 --network=on-prem-vpc --region=us-central1

Configuración de Cloud Router y NAT

En el instructivo, se usa Cloud NAT para las descargas de paquetes de software. Cloud NAT también ofrece capacidades de NAT de salida, lo que significa que los hosts de Internet no pueden iniciar la comunicación con el procesamiento, lo que lo hace más seguro.

Dentro de Cloud Shell, crea el Cloud Router regional.

gcloud compute routers create cloud-router-us-central1-on-prem-nat --network on-prem-vpc --region us-central1

Dentro de Cloud Shell, crea la puerta de enlace de Cloud NAT regional.

gcloud compute routers nats create cloud-nat-us-central1 --router=cloud-router-us-central1-on-prem-nat --auto-allocate-nat-external-ips --nat-all-subnet-ip-ranges --region us-central1

6. Crea el extremo de Private Service Connect

En la siguiente sección, crearás un extremo de Private Service Connect (PSC) que se usará para acceder a la API de Vertex desde la VPC local. La dirección IP de PSC 100.100.10.10 se anunciará desde aiml-vpc-cloud-router-vpn como un anuncio de router personalizado a la red local en un próximo paso.

Desde Cloud Shell

gcloud compute addresses create psc-ip \
    --global \
    --purpose=PRIVATE_SERVICE_CONNECT \
    --addresses=100.100.10.10 \
    --network=aiml-vpc

Crea el extremo de PSC

Desde Cloud Shell

gcloud compute forwarding-rules create pscvertex \
    --global \
    --network=aiml-vpc \
    --address=psc-ip \
    --target-google-apis-bundle=all-apis

Enumera los extremos de Private Service Connect configurados

Desde Cloud Shell

gcloud compute forwarding-rules list  \
--filter target="(all-apis OR vpc-sc)" --global

Describe los extremos de Private Service Connect configurados

Desde Cloud Shell

gcloud compute forwarding-rules describe \
    pscvertex --global

7. Conectividad híbrida

En la siguiente sección, crearás un Cloud Router que te permitirá intercambiar rutas de forma dinámica entre tu nube privada virtual (VPC) y la red de intercambio de tráfico mediante el Protocolo de puerta de enlace fronteriza (BGP).

Cloud Router puede configurar una sesión de BGP a través de un túnel de Cloud VPN para conectar tus redes. Aprende automáticamente los rangos de direcciones IP de subredes nuevos y los anuncia en tu red de intercambio de tráfico.

En el instructivo, implementarás una VPN con alta disponibilidad entre aiml-vpc y on-prem-vpc.

Crea la puerta de enlace de VPN con alta disponibilidad para aiml-vpc

Cuando se crea cada puerta de enlace, se asignan de forma automática dos direcciones IPv4 externas, una para cada interfaz de puerta de enlace.

Dentro de Cloud Shell, crea la puerta de enlace de VPN con alta disponibilidad.

gcloud compute vpn-gateways create aiml-vpn-gw \
   --network=aiml-vpc\
   --region=us-central1

Crea la puerta de enlace de VPN con alta disponibilidad para on-prem-vpc

Cuando se crea cada puerta de enlace, se asignan de forma automática dos direcciones IPv4 externas, una para cada interfaz de puerta de enlace. Anota estas direcciones IP para usarlas más adelante en los pasos de configuración.

Dentro de Cloud Shell, crea la puerta de enlace de VPN con alta disponibilidad.

gcloud compute vpn-gateways create on-prem-vpn-gw \
   --network=on-prem-vpc\
   --region=us-central1

Valida la creación de la puerta de enlace de VPN con alta disponibilidad

En la consola, navega a CONECTIVIDAD HÍBRIDA → VPN → PUERTAS DE ENLACE DE CLOUD VPN y valida que se generen las IPs de la puerta de enlace.

66312b1b53c233d7.png

Crea el Cloud Router para aiml-vpc

Dentro de Cloud Shell, crea el Cloud Router ubicado en us-central1.

gcloud compute routers create aiml-cr-us-central1 \
   --region=us-central1 \
   --network=aiml-vpc\
   --asn=65001

Crea el Cloud Router para on-prem-vpc

Dentro de Cloud Shell, crea el Cloud Router ubicado en us-central1.

gcloud compute routers create on-prem-cr-us-central1 \
   --region=us-central1 \
   --network=on-prem-vpc \
   --asn=65002

Crea los túneles VPN para aiml-vpc

Crearás dos túneles VPN en cada puerta de enlace de VPN con alta disponibilidad.

Crea el túnel VPN0

Dentro de Cloud Shell, crea tunnel0:

gcloud compute vpn-tunnels create aiml-vpc-tunnel0 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router aiml-cr-us-central1 \
    --vpn-gateway aiml-vpn-gw \
    --interface 0

Crea el túnel VPN1

Dentro de Cloud Shell, crea tunnel1:

gcloud compute vpn-tunnels create aiml-vpc-tunnel1 \
    --peer-gcp-gateway on-prem-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router aiml-cr-us-central1 \
    --vpn-gateway aiml-vpn-gw \
    --interface 1

Crea los túneles VPN para on-prem-vpc

Crearás dos túneles VPN en cada puerta de enlace de VPN con alta disponibilidad.

Crea el túnel VPN0

Dentro de Cloud Shell, crea tunnel0:

gcloud compute vpn-tunnels create on-prem-tunnel0 \
    --peer-gcp-gateway aiml-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 0

Crea el túnel VPN1

Dentro de Cloud Shell, crea tunnel1:

gcloud compute vpn-tunnels create on-prem-tunnel1 \
    --peer-gcp-gateway aiml-vpn-gw \
    --region us-central1 \
    --ike-version 2 \
    --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
    --router on-prem-cr-us-central1 \
    --vpn-gateway on-prem-vpn-gw \
    --interface 1

Valida la creación del túnel VPN

En la consola, navega a CONECTIVIDAD HÍBRIDA → VPN → TÚNELES DE CLOUD VPN.

e8e13ebaed09f1.png

8. Establece vecinos de BGP

Crea sesiones de BGP

En esta sección, configurarás interfaces de Cloud Router y pares de BGP.

Crea una interfaz de BGP y un intercambio de tráfico para tryl-vpc

Dentro de Cloud Shell, crea la interfaz de BGP:

gcloud compute routers add-interface aiml-cr-us-central1 \
    --interface-name if-tunnel0-to-onprem \
    --ip-address 169.254.1.1 \
    --mask-length 30 \
    --vpn-tunnel aiml-vpc-tunnel0 \
    --region us-central1

Dentro de Cloud Shell, crea el par de BGP:

gcloud compute routers add-bgp-peer aiml-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel0 \
    --interface if-tunnel1-to-onprem \
    --peer-ip-address 169.254.1.2 \
    --peer-asn 65002 \
    --region us-central1

Dentro de Cloud Shell, crea la interfaz de BGP:

gcloud compute routers add-interface aiml-cr-us-central1 \
    --interface-name if-tunnel1-to-onprem \
    --ip-address 169.254.2.1 \
    --mask-length 30 \
    --vpn-tunnel aiml-vpc-tunnel1 \
    --region us-central1

Dentro de Cloud Shell, crea el par de BGP:

gcloud compute routers add-bgp-peer aiml-cr-us-central1 \
    --peer-name bgp-on-premises-tunnel1 \
    --interface if-tunnel2-to-onprem \
    --peer-ip-address 169.254.2.2 \
    --peer-asn 65002 \
    --region us-central1

Crea una interfaz de BGP y un intercambio de tráfico para on-prem-vpc

Dentro de Cloud Shell, crea la interfaz de BGP:

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel0-to-aiml-vpc\
    --ip-address 169.254.1.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel0 \
    --region us-central1

Dentro de Cloud Shell, crea el par de BGP:

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-aiml-vpc-tunnel0 \
    --interface if-tunnel1-to-aiml-vpc\
    --peer-ip-address 169.254.1.1 \
    --peer-asn 65001 \
    --region us-central1

Dentro de Cloud Shell, crea la interfaz de BGP:

gcloud compute routers add-interface on-prem-cr-us-central1 \
    --interface-name if-tunnel1-to-aiml-vpc\
    --ip-address 169.254.2.2 \
    --mask-length 30 \
    --vpn-tunnel on-prem-tunnel1 \
    --region us-central1

Dentro de Cloud Shell, crea el par de BGP:

gcloud compute routers add-bgp-peer on-prem-cr-us-central1 \
    --peer-name bgp-aiml-vpc-tunnel1\
    --interface if-tunnel2-to-aiml-vpc\
    --peer-ip-address 169.254.2.1 \
    --peer-asn 65001 \
    --region us-central1

Navega a CONECTIVIDAD híbrida → VPN para ver los detalles del túnel de VPN.

cb91b4476a88acd3.png

Valida las rutas aprendidas de aiml-vpc a través de la VPN con alta disponibilidad

En la consola, navega a Red de VPC → Redes de VPC → aiml-vpc → RUTAS → REGIÓN → US-CENTRAL1 → VER.

Observa que aiml-vpc aprendió rutas desde on-prem-vpc nat-subnet y private-ip-subnet

f407ed6e1a6233db.png

Valida que on-prem-vpc haya aprendido la subred de la estación de trabajo a través de la VPN con alta disponibilidad

En la consola, navega a Red de VPC → Redes de VPC → on-prem-vpc → RUTAS → REGIÓN → US-CENTRAL1 → VER.

7957e5d898a9e7e0.png

9. Crea anuncios de ruta personalizados para aiml-vpc

El Cloud Router aiml-cr-us-central1 no anuncia automáticamente la IP del extremo de Private Service Connect porque la subred no está configurada en la VPC.

En su lugar, deberás crear un anuncio de ruta personalizado desde el Cloud Router aiml-cr-us-central para la dirección IP del extremo 100.100.10.10 que se anunciará al entorno local a través de BGP a on-prem-vpc.

En la consola, navega a CONECTIVIDAD HÍBRIDA → ENRUTADORES DE CLOUD → aiml-cr-us-central1 y, luego, selecciona EDITAR.

c8fb02ed59a5b068.png

En la sección Rutas anunciadas, selecciona la opción Crear rutas personalizadas, actualiza los campos según el siguiente ejemplo, selecciona LISTO y, luego, haz clic en GUARDAR.

5996464e3aae0665.png

f799082ab2cd7e31.png

Validación

Valida que on-prem-vpc haya aprendido la dirección IP del extremo de PSC a través de la VPN con alta disponibilidad

En la consola, navega a Red de VPC → Redes de VPC → on-prem-vpc → RUTAS → REGIÓN → US-CENTRAL1 → VER.

1b42673e6f940bf2.png

10. Crea anuncios de ruta personalizados en on-prem-vpc

El Cloud Router on-prem-vpc anuncia todas las subredes de forma predeterminada, pero solo se necesita la subred private-ip-subnet.

En la siguiente sección, actualiza los anuncios de ruta del Cloud Router on-prem-cr-us-central1.

En la consola, navega a CONECTIVIDAD HÍBRIDA → ENRUTADORES DE CLOUD → on-prem-cr-us-central1 y, luego, selecciona EDITAR.

bd96bde9550d516a.png

En la sección Rutas anunciadas, selecciona la opción Crear rutas personalizadas, actualiza los campos según el siguiente ejemplo, selecciona LISTO y, luego, haz clic en GUARDAR.

f8b61f669a9cfeef.png

Validación

Valida que aiml-vpc haya aprendido la ruta private-ip-subnet desde on-prem-vpc.

En la consola, navega a Red de VPC → Redes de VPC → aiml-vpc → RUTAS → REGIÓN → US-CENTRAL1 → VER.

2b1a7a5f918e9f50.png

11. Crea una cuenta de servicio administrada por el usuario (instancias de GCE)

Para proporcionar un nivel de control preciso a la API de Vertex, se requiere una cuenta de servicio administrada por el usuario que se aplicará a las instancias de cliente privadas y de NAT. Una vez generados, los permisos de la cuenta de servicio se pueden modificar según los requisitos de la empresa. En el instructivo, la cuenta de servicio administrada por el usuario, vertex-sa, tendrá los siguientes roles aplicados:

Debes la API de Service Account antes de continuar.

Dentro de Cloud Shell, crea la cuenta de servicio.

gcloud iam service-accounts create gce-vertex-sa \
    --description="service account for vertex" \
    --display-name="gce-vertex-sa"

Dentro de Cloud Shell, actualiza la cuenta de servicio con el rol de administrador de instancias de Compute.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:gce-vertex-sa@$projectid.iam.gserviceaccount.com" --role="roles/compute.instanceAdmin.v1"

Dentro de Cloud Shell, actualiza la cuenta de servicio con el rol de usuario de Vertex AI.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:gce-vertex-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

12. Crea una cuenta de servicio administrada por el usuario (notebook)

En la siguiente sección, crearás una cuenta de servicio administrada por el usuario que se asociará con Vertex Workbench (notebook) que se usa en el instructivo.

En el instructivo, la cuenta de servicio tendrá los siguientes roles aplicados:

Dentro de Cloud Shell, crea la cuenta de servicio.

gcloud iam service-accounts create user-managed-notebook-sa \
    --display-name="user-managed-notebook-sa"

En Cloud Shell, actualiza la cuenta de servicio con el rol de administrador de Storage.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/storage.admin"

Dentro de Cloud Shell, actualiza la cuenta de servicio con el rol de usuario de Vertex AI.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/aiplatform.user"

Dentro de Cloud Shell, actualiza la cuenta de servicio con el rol de administrador de Artifact Registry.

gcloud projects add-iam-policy-binding $projectid --member="serviceAccount:user-managed-notebook-sa@$projectid.iam.gserviceaccount.com" --role="roles/artifactregistry.admin"

Dentro de Cloud Shell, enumera la cuenta de servicio y anota la dirección de correo electrónico que se usará cuando crees el notebook administrado por el usuario.

gcloud iam service-accounts list

13. Se crearon las instancias de prueba

En la siguiente sección, crearás instancias de prueba para validar diferentes métodos para llegar a las APIs de Vertex, específicamente:

  • La instancia, nat-client,, usará Cloud NAT para resolver Vertex AI y, de este modo, acceder al extremo de predicción en línea a través de Internet.
  • La instancia, private-client, usará la IP de Private Service Connect 100.100.10.10 para acceder al extremo de predicción en línea a través de la VPN con alta disponibilidad.

Dentro de Cloud Shell, crea la instancia nat-client.

gcloud compute instances create nat-client \
    --zone=us-central1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=nat-subnet \
    --service-account=vertex-sa@$projectid.iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

Dentro de Cloud Shell, crea la instancia private-client.

gcloud compute instances create private-client \
    --zone=us-central1-a \
    --image-family=debian-11 \
    --image-project=debian-cloud \
    --subnet=private-ip-subnet \
    --service-account=vertex-sa@$projectid.iam.gserviceaccount.com \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --no-address \
    --metadata startup-script="#! /bin/bash
      sudo apt-get update
      sudo apt-get install tcpdump dnsutils -y"

Para permitir que Identity-Aware Proxy (IAP) se conecte a tus instancias de VM, crea una regla de firewall que cumpla con lo siguiente:

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

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

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

14. Crea un notebook administrado por el usuario

la API de Notebooks

En la siguiente sección, crea un notebook administrado por el usuario que incorpore la cuenta de servicio creada anteriormente, user-managed-notebook-sa.

Dentro de Cloud Shell, crea la instancia de private-client.

gcloud notebooks instances create workbench-tutorial \
      --vm-image-project=deeplearning-platform-release \
      --vm-image-family=common-cpu-notebooks \
      --machine-type=n1-standard-4 \
      --location=us-central1-a \
      --subnet-region=us-central1 \
      --subnet=workbench-subnet \
      --no-public-ip    --service-account=user-managed-notebook-sa@$projectid.iam.gserviceaccount.com

15. Implementa el modelo y la predicción en línea

En la siguiente sección, usa el codelabproporcionado, Vertex AI:Usa rutinas de predicción personalizadas con Sklearn para preprocesar y posprocesar datos para predicciones, y comienza con la sección 7, ya que creaste un notebook en el paso anterior. Una vez que se implemente el modelo, regresa al instructivo para comenzar la siguiente sección.

ee68b7ba0cfd2746.png

16. Valida el acceso a la API de Vertex a través de Internet

En la siguiente sección, accederás a la instancia nat-client y validarás la conectividad a Vertex AI con dig y tcpdump en el dominio us-central1-aiplatform.googleapis.com que se usa para resolver las APIs de Vertex.

Accede a nat-client con IAP en Cloud Shell para validar la conectividad a la API de Vertex realizando un dig en el dominio de Vertex us-central1-aiplatform.googleapis.com

gcloud compute ssh nat-client --project=$projectid --zone=us-central1-a --tunnel-through-iap

Ejecuta el comando dig.

dig us-central1-aiplatform.googleapis.com

Por ejemplo, observa las IPs públicas en la respuesta de DNS.

user@nat-client:~$ dig us-central1-aiplatform.googleapis.com

; <<>> DiG 9.16.42-Debian <<>> us-central1-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 56761
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-aiplatform.googleapis.com. IN A

;; ANSWER SECTION:
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.111.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.250.1.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.121.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.250.103.95
us-central1-aiplatform.googleapis.com. 300 IN A 108.177.120.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.171.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.250.159.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.120.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.161.95
us-central1-aiplatform.googleapis.com. 300 IN A 142.251.172.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.126.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.70.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.132.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.201.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.202.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.69.95

;; Query time: 4 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Thu Jun 29 01:35:57 UTC 2023
;; MSG SIZE  rcvd: 322

Desde el SO de nat-client, ejecuta tcpdump para validar la resolución de DNS cuando realices un curl en la predicción en línea.

 sudo tcpdump -i any port 53 -n

Ejemplo:

user@nat-client:~$ sudo tcpdump -i any port 53 -n 
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes

Abre una nueva terminal de Cloud Shell seleccionando el signo "+". Una vez que se abra la nueva pestaña, actualiza la variable del nombre del proyecto.

En Cloud Shell, actualiza la variable del nombre del proyecto.

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

Dentro de Cloud Shell 2, realiza una conexión SSH a la instancia nat-client.

gcloud compute ssh --zone "us-central1-a" "nat-client" --project "$projectid"

En la siguiente sección, crearás un archivo instances.json con el editor sudo VI o nano, y luego insertarás la cadena de datos que se usa para obtener una predicción del modelo implementado.

Desde el SO de nat-client, crea un archivo instances.json con la siguiente cadena de datos:

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

Ejemplo:

user@nat-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@nat-client:$

Obtén el ID del extremo de predicción en línea de Cloud Console que se usará en los pasos posteriores.

Navega a VERTEX AI → ONLINE PREDICTION.

237d413ccde1e95b.png

Desde el SO de nat-client, crea las siguientes variables:

gcloud config list project
gcloud config set project [YOUR-PROJECT-NAME]
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

Ejemplo:

ENDPOINT_ID="3328226095324463104"

Desde el SO de nat-client, ejecuta un curl para obtener una respuesta del modelo.

curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

Ejemplo: Observa la predicción exitosa.

user@nat-client$ curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "1949163636186415104",
  "model": "projects/234086459238/locations/us-central1/models/947543727654567936",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}

17. Validación: Acceso a Internet a la API de Vertex

Ahora que ejecutaste la predicción, veamos los resultados de TCPDUMP (terminal 1) que indican que la instancia nat-client (192.168.10.2) realiza una consulta de DNS al servidor DNS local 169.254.169.254 para el dominio de Vertex AI us-central1-aiplatform.googleapis.com. El resultado de la consulta de DNS son direcciones IP virtuales (VIP) públicas para las APIs de Vertex, como se indica a continuación:

user@nat-client:~$ sudo tcpdump -i any port 53 -n
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
20:05:09.260937 ens4  Out IP 192.168.10.2.40782 > 169.254.169.254.53: 47190+ A? oauth2.googleapis.com. (39)
20:05:09.260946 ens4  Out IP 192.168.10.2.40782 > 169.254.169.254.53: 28075+ AAAA? oauth2.googleapis.com. (39)
20:05:09.263556 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.40782: 28075 4/0/0 AAAA 2607:f8b0:4001:c34::5f, AAAA 2607:f8b0:4001:c54::5f, AAAA 2607:f8b0:4001:c16::5f, AAAA 2607:f8b0:4001:c17::5f (151)
20:05:09.265018 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.40782: 47190 16/0/0 A 74.125.201.95, A 74.125.202.95, A 74.125.69.95, A 64.233.183.95, A 173.194.193.95, A 173.194.194.95, A 173.194.195.95, A 173.194.196.95, A 173.194.197.95, A 64.233.191.95, A 173.194.74.95, A 173.194.192.95, A 209.85.145.95, A 209.85.146.95, A 209.85.147.95, A 142.250.125.95 (295)
20:05:09.474478 ens4  Out IP 192.168.10.2.57356 > 169.254.169.254.53: 36008+ A? us-central1-aiplatform.googleapis.com. (55)
20:05:09.474488 ens4  Out IP 192.168.10.2.57356 > 169.254.169.254.53: 47020+ AAAA? us-central1-aiplatform.googleapis.com. (55)
20:05:09.477190 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.57356: 36008 16/0/0 A 173.194.194.95, A 173.194.195.95, A 173.194.196.95, A 173.194.197.95, A 173.194.74.95, A 173.194.192.95, A 209.85.145.95, A 209.85.146.95, A 209.85.147.95, A 142.250.125.95, A 142.250.136.95, A 142.250.148.95, A 209.85.200.95, A 209.85.234.95, A 142.250.152.95, A 142.250.128.95 (311)
20:05:09.478607 ens4  In  IP 169.254.169.254.53 > 192.168.10.2.57356: 47020 4/0/0 AAAA 2607:f8b0:4001:c1b::5f, AAAA 2607:f8b0:4001:c0c::5f, AAAA 2607:f8b0:4001:c0e::5f, AAAA 2607:f8b0:4001:c1e::5f (167)

18. Habilita el acceso privado a las APIs de Vertex

En la siguiente sección, accederás a las APIs de Vertex con Private Service Connect a través de redes híbridas (VPN con alta disponibilidad) para acceder de forma privada a la predicción en línea. En el ejemplo que se usa en el instructivo, actualizarás el archivo /etc/hosts en la instancia private-client.

En tu entorno local, es adecuado actualizar el archivo /etc/hosts de una o varias máquinas para realizar pruebas. Sin embargo, para entornos de producción y a gran escala, es más conveniente crear una nueva zona de reenvío con el FQDN del extremo de PSC.

Por ejemplo, el extremo de PSC creado en el instructivo se llama pscvertex, que se traduce a pscvertex.p.googleapis.com. Cuando se usa el extremo para Vertex, agrega el FQDN con el servicio, p. ej., us-central1-aiplatform-pscvertex.p.googleapis.com.

La actualización del DNS local con el extremo de PSC también requiere la refactorización de las aplicaciones locales para llamar al FDQN, p. ej., us-central1-aiplatform-pscvertex.p.googleapis.com en lugar del extremo público nativo us-central1-aiplatform.googleapis.com.

Los clientes que se pueden configurar para usar un extremo personalizado pueden usar los nombres de DNS p.googleapis.com para enviar solicitudes a un extremo.

Consulta la documentación de tu cliente o biblioteca cliente para obtener información sobre cómo configurarla con el fin de usar extremos personalizados. Por ejemplo:

  • Python: Puedes configurar api_endpoint en la clase Client options del paquete google-api-core.
  • Go: Puedes configurar WithEndpoint en el paquete Client options del paquete api.
  • gcloud: You can configure api_endpoint_overrides

Abre una nueva terminal de Cloud Shell seleccionando el signo "+". Una vez que se abra la nueva pestaña, actualiza la variable del nombre del proyecto.

Desde Cloud Shell

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

Accede a private-client con IAP en un nuevo Cloud Shell para validar la conectividad a la API de Vertex realizando un dig en el dominio de Vertex us-central1-aiplatform.googleapis.com

Desde Cloud Shell, accede a la instancia del SO de private-client.

gcloud compute ssh private-client --project=$projectid --zone=us-central1-a --tunnel-through-iap

Ejecuta el comando dig.

dig us-central1-aiplatform.googleapis.com

Por ejemplo, ten en cuenta las IPs públicas según la respuesta de DNS.

user@private-client:~$ dig us-central1-aiplatform.googleapis.com

; <<>> DiG 9.16.42-Debian <<>> us-central1-aiplatform.googleapis.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33311
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;us-central1-aiplatform.googleapis.com. IN A

;; ANSWER SECTION:
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.132.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.201.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.202.95
us-central1-aiplatform.googleapis.com. 300 IN A 74.125.69.95
us-central1-aiplatform.googleapis.com. 300 IN A 64.233.182.95
us-central1-aiplatform.googleapis.com. 300 IN A 64.233.183.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.193.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.194.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.195.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.196.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.197.95
us-central1-aiplatform.googleapis.com. 300 IN A 64.233.191.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.74.95
us-central1-aiplatform.googleapis.com. 300 IN A 173.194.192.95
us-central1-aiplatform.googleapis.com. 300 IN A 209.85.145.95
us-central1-aiplatform.googleapis.com. 300 IN A 209.85.146.95

;; Query time: 4 msec
;; SERVER: 169.254.169.254#53(169.254.169.254)
;; WHEN: Sun Jul 02 20:5

Actualiza el archivo /etc/hosts de la instancia private-client con el editor sudo VI o nano para crear un registro del FQDN de Vertex AI us-central1-aiplatform.googleapis.com que apunte al extremo de PSC 100.100.10.10. No se requieren más cambios.

Ejemplo:

user@private-client:~$ more /etc/hosts
127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters

100.100.10.10 us-central1-aiplatform.googleapis.com
192.168.20.2 private-client.c.$projectid.internal private-client  # Added by Google
169.254.169.254 metadata.google.internal  # Added by Google

Desde el SO del cliente privado, realiza un PING al extremo de la API de Vertex.

ping us-central1-aiplatform.googleapis.com

Por ejemplo, PING devuelve la IP del extremo de PSC, pero no se espera ninguna respuesta.

user@private-client:~$ ping us-central1-aiplatform.googleapis.com
PING us-central1-aiplatform.googleapis.com (100.100.10.10) 56(84) bytes of data.

Desde el SO del cliente privado, ejecuta tcpdump para validar la resolución de DNS y la ruta de acceso de los datos IP al extremo de PSC cuando realices un curl en la predicción en línea.

 sudo tcpdump -i any port 53 -n or host 100.100.10.10

Abre una cuarta terminal de Cloud Shell seleccionando el signo "+". Una vez que se abra la pestaña nueva, actualiza la variable del nombre del proyecto.

En Cloud Shell, actualiza la variable del nombre del proyecto.

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

Dentro de Cloud Shell cuatro, realiza una conexión SSH a la instancia private-client.

gcloud compute ssh --zone "us-central1-a" "private-client" --project "$projectid"

En la siguiente sección, crearás un archivo instances.json con el editor sudo VI o nano, y luego insertarás la cadena de datos que se usa para obtener una predicción del modelo implementado.

Desde el SO del cliente privado, crea un archivo instances.json con la siguiente cadena de datos:

{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

Ejemplo:

user@private-client:$ more instances.json 
{"instances": [
  [0.23, 'Ideal', 'E', 'VS2', 61.5, 55.0, 3.95, 3.98, 2.43],
  [0.29, 'Premium', 'J', 'Internally Flawless', 52.5, 49.0, 4.00, 2.13, 3.11]]}

user@private-client:$

En el SO del cliente privado, crea las siguientes variables:

gcloud config list project
projectid=YOUR-PROJECT-NAME
echo $projectid
ENDPOINT_ID="insert-your-endpoint-id-here"

Ejemplo:

ENDPOINT_ID="3328226095324463104"

Desde el SO del cliente privado en Cloud Shell 4, realiza un curl para obtener una respuesta del modelo.

curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json

19. Validación: Acceso privado a la API de Vertex

Desde el SO de private-client en Cloud Shell cuatro, observa que se usó la IP del extremo de PSC (100.100.10.10) para acceder a la API de Vertex.

user@private-client$ curl -v -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${projectid}/locations/us-central1/endpoints/${ENDPOINT_ID}:predict -d @instances.json
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 100.100.10.10:443...
* Connected to us-central1-aiplatform.googleapis.com (100.100.10.10) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*  CAfile: /etc/ssl/certs/ca-certificates.crt
*  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=upload.video.google.com
*  start date: May 29 08:21:36 2023 GMT
*  expire date: Aug 21 08:21:35 2023 GMT
*  subjectAltName: host "us-central1-aiplatform.googleapis.com" matched cert's "*.googleapis.com"
*  issuer: C=US; O=Google Trust Services LLC; CN=GTS CA 1C3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x55f2ab65c2c0)
> POST /v1/projects/$projectid/locations/us-central1/endpoints/3328226095324463104:predict HTTP/2
> Host: us-central1-aiplatform.googleapis.com
> user-agent: curl/7.74.0
> accept: */*
> authorization: Bearer ya29.a0AbVbY6NdCbIJYj0mQROeq-xYgQCw534TTtjRc1kBAEOimKCFxb3gqgD5AvhfefJatSNr33eW1YJirfQVMptFoqfjRoB-i8zEJJ_GGCVqhsVnpSOjK0hzJQSuo2YGjIiSe1o1zdo7lWmh1Px-vLe8FImieGkrQ1hqVaa6aCgYKAXgSARESFQFWKvPlUQ_FuKB2hrDJRyFDjupL1g0171
> content-type: application/json
> content-length: 154
> 
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
* We are completely uploaded and fine
< HTTP/2 200 
< content-type: application/json; charset=UTF-8
< x-vertex-ai-internal-prediction-backend: harpoon
< date: Mon, 03 Jul 2023 22:13:35 GMT
< vary: X-Origin
< vary: Referer
< vary: Origin,Accept-Encoding
< server: scaffolding on HTTPServer2
< cache-control: private
< x-xss-protection: 0
< x-frame-options: SAMEORIGIN
< x-content-type-options: nosniff
< accept-ranges: none
< 
{
  "predictions": [
    "$479.0",
    "$586.0"
  ],
  "deployedModelId": "1949163636186415104",
  "model": "projects/234086459238/locations/us-central1/models/947543727654567936",
  "modelDisplayName": "diamonds-cpr",
  "modelVersionId": "1"
}
* Connection #0 to host us-central1-aiplatform.googleapis.com left intact

Desde la terminal de TCPDUMP en Cloud Shell tres, podemos validar que no se observó una búsqueda de DNS en us-central1-aiplatform.googleapis.com, ya que el archivo /etc/host tuvo prioridad, pero se usó la dirección IP de PSC 100.100.10.10 en la ruta de datos.

user@private-client:~$ sudo tcpdump -i any port 53 -n or host 100.100.10.10
tcpdump: data link type LINUX_SLL2
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
22:13:35.507625 ens4  Out IP 192.168.20.2.37004 > 169.254.169.254.53: 58585+ A? oauth2.googleapis.com. (39)
22:13:35.507631 ens4  Out IP 192.168.20.2.37004 > 169.254.169.254.53: 15580+ AAAA? oauth2.googleapis.com. (39)
22:13:35.511796 ens4  In  IP 169.254.169.254.53 > 192.168.20.2.37004: 58585 16/0/0 A 142.251.6.95, A 108.177.112.95, A 74.125.124.95, A 172.217.212.95, A 172.217.214.95, A 172.253.114.95, A 172.253.119.95, A 108.177.111.95, A 142.250.1.95, A 108.177.121.95, A 142.250.103.95, A 108.177.120.95, A 142.251.171.95, A 142.250.159.95, A 142.251.120.95, A 142.251.161.95 (295)
22:13:35.512002 ens4  In  IP 169.254.169.254.53 > 192.168.20.2.37004: 15580 4/0/0 AAAA 2607:f8b0:4001:c2b::5f, AAAA 2607:f8b0:4001:c18::5f, AAAA 2607:f8b0:4001:c5f::5f, AAAA 2607:f8b0:4001:c58::5f (151)
22:13:35.722145 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [S], seq 1951267724, win 65320, options [mss 1420,sackOK,TS val 1371205990 ecr 0,nop,wscale 7], length 0
22:13:35.730727 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [S.], seq 3198878726, ack 1951267725, win 65535, options [mss 1366,sackOK,TS val 67847676 ecr 1371205990,nop,wscale 8], length 0
22:13:35.730760 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [.], ack 1, win 511, options [nop,nop,TS val 1371205999 ecr 67847676], length 0
22:13:35.738339 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 1:518, ack 1, win 511, options [nop,nop,TS val 1371206006 ecr 67847676], length 517
22:13:35.739922 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [.], ack 518, win 261, options [nop,nop,TS val 67847688 ecr 1371206006], length 0
22:13:35.740860 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [.], seq 1:2709, ack 518, win 261, options [nop,nop,TS val 67847689 ecr 1371206006], length 2708
22:13:35.740863 ens4  In  IP 100.100.10.10.443 > 192.168.20.2.47304: Flags [P.], seq 2709:4699, ack 518, win 261, options [nop,nop,TS val 67847689 ecr 1371206006], length 1990
22:13:35.740874 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [.], ack 2709, win 497, options [nop,nop,TS val 1371206009 ecr 67847689], length 0
22:13:35.740886 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [.], ack 4699, win 485, options [nop,nop,TS val 1371206009 ecr 67847689], length 0
22:13:35.742709 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 518:598, ack 4699, win 501, options [nop,nop,TS val 1371206011 ecr 67847689], length 80
22:13:35.743996 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 598:644, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 46
22:13:35.744011 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 644:693, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 49
22:13:35.744082 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 693:728, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 35
22:13:35.744165 ens4  Out IP 192.168.20.2.47304 > 100.100.10.10.443: Flags [P.], seq 728:1069, ack 4699, win 501, options [nop,nop,TS val 1371206012 ecr 67847689], length 341

Validaste correctamente la conexión a la predicción en línea a través de un extremo público por Internet y de forma privada con el uso de redes híbridas y Private Service Connect (googleapis). Sal del SO y regresa al símbolo del sistema de Cloud Shell.

20. Limpia

Borra los componentes del instructivo desde Cloud Shell.

gcloud compute forwarding-rules delete pscvertex --global --quiet

gcloud compute instances delete workbench-tutorial --zone=us-central1-a --quiet 

gcloud compute addresses delete psc-ip --global --quiet

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

gcloud compute vpn-tunnels delete aiml-vpc-tunnel0 aiml-vpc-tunnel1 on-prem-tunnel0 on-prem-tunnel1 --region=us-central1 --quiet

gcloud compute vpn-gateways delete aiml-vpn-gw on-prem-vpn-gw --region=us-central1 --quiet 

gcloud compute routers delete aiml-cr-us-central1 cloud-router-us-central1-aiml-nat --region=us-central1 --quiet 

gcloud compute routers delete cloud-router-us-central1-on-prem-nat on-prem-cr-us-central1 --region=us-central1 --quiet

gcloud compute instances delete nat-client private-client --zone=us-central1-a --quiet

gcloud compute firewall-rules delete ssh-iap-on-prem-vpc --quiet

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

gcloud compute networks delete on-prem-vpc --quiet

gcloud compute networks delete aiml-vpc --quiet

Borra componentes de Vertex

Para borrar la imagen del contenedor, navega a Artifact Registry, selecciona el repositorio que creaste y, luego, Borrar.

616a3108bc2e48c8.png

Para borrar el bucket de Storage, en el menú de navegación de la consola de Cloud, navega a Storage, selecciona tu bucket y haz clic en Borrar:

eddd1f9fdfaede8.png

Anula la implementación del modelo desde el extremo. Navega a Vertex AI → Predicción en línea → Selecciona diamonds-cpr_endpoint → Anular la implementación del modelo en el extremo → Anular la implementación.

bc95f092d21d4698.png

Borra el modelo. Navega a Vertex AI → Model Registry → Delete Model

ec4afff091e11606.png

Borra el extremo de predicción en línea. Navega a Vertex AI → Predicción en línea → Selecciona diamonds-cpr_endpoint → Borrar extremo.

7453760299bdfb9a.png

21. Felicitaciones

¡Felicitaciones! Configuraste y validaste correctamente la conexión a la predicción en línea de forma nativa a través de Internet y de forma privada con Private Service Connect y redes híbridas.

Creaste un nat-client y un private-client, y usaste TCPDUMP para validar las direcciones IP que se usan para acceder a las APIs de Vertex. Además, aprendiste sobre Private Service Connect (googleapis) y cómo se puede usar para aislar aplicaciones locales y de varias nubes aprovechando un extremo de PSC del cliente.

Cosmopup cree que los instructivos son geniales.

e6d3675ca7c6911f.jpeg

¿Qué sigue?

Consulta algunos de estos instructivos…

Lecturas y videos adicionales

Documentos de referencia