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 una predicción en línea de forma nativa a través de la Internet pública (opción 1) o mediante Cloud VPN o Cloud Interconnect con Private Service Connect (PSC) (opción 2) desde tu red local, y ambos 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 esenciales, como se ilustra en la Figura 1.

En este instructivo, demostraremos cómo usar la 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.

Nota: Vertex Online Prediction es un extremo público, por lo que debes restringir el acceso con los Controles del servicio de VPC (VPC-SC) para crear perímetros seguros y permitir o denegar el acceso a Vertex y otras APIs de Google. En este instructivo no se abarca VPC-SC. Para obtener más detalles, consulta los 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. Para tu implementación, on-prem-vpc no existiría, en su lugar se usaría una red híbrida a tu centro de datos local o a tu proveedor de servicios en la nube.

Compilarás una arquitectura integral de Private Service Connect que ilustre el acceso a la predicción en línea de forma pública a través de Cloud NAT y de forma privada con PSC con VPN con alta disponibilidad, como se detalla 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 consta de lo siguiente:

  • Crear una instancia de GCE (nat-client) que aproveche NAT para el acceso a Internet de salida
  • Usa CURL para realizar inferencias con respecto al modelo
  • Usa TCPDUMP para validar el acceso 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 los siguientes elementos:

  • Implementar un modelo en el extremo de predicción en línea de aVertex en el proyecto
  • Crea un extremo de Private Service Connect (Googleapis) en tryl-vpc
  • Exporta la dirección IP de PSC a través de Cloud Router como anuncio personalizado a la VPC local
  • Crea una instancia de GCE (cliente privado) y actualiza el archivo etc/hosts con la IP de extremo de PSC.
  • Usa CURL para realizar inferencias con respecto al modelo
  • Usa TCPDUMP para validar el acceso 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 del Cloud Router
  • Cómo usar TCPDUMP para validar el acceso a las predicciones en línea, tanto públicas como privadas

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 sea compatible con el instructivo

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

Dentro de Cloud Shell, realiza 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, realiza 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 targetl-vpc

Crea la app de impactl-vpc

Dentro de Cloud Shell, realiza 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, realiza 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 notebook porque la instancia de notebook administrado 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.

En Cloud Shell, crea el Cloud Router regional.

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

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

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 on-prem-vpc

Dentro de Cloud Shell, realiza lo siguiente:

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

Cree la nat-subnet

Dentro de Cloud Shell, realiza 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

Dentro de Cloud Shell, realiza 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

Cloud NAT se usa en el instructivo 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, por lo que es más seguro.

En 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

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

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 on-prem-vpc. En un próximo paso, se anunciará la dirección IP de PSC 100.100.10.10 desde tryl-vpc-cloud-router-vpn como un anuncio de router personalizado a la red local.

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

Genera una lista de los extremos configurados de Private Service Connect

Desde Cloud Shell

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

Describir los extremos configurados de Private Service Connect

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 permita intercambiar rutas de forma dinámica entre tu Nube privada virtual (VPC) y la red de intercambio de tráfico usando el Protocolo de puerta de enlace de frontera (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 nuevos rangos de direcciones IP de subredes y los notifica a 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 automáticamente 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 automáticamente dos direcciones IPv4 externas, una para cada interfaz de puerta de enlace. Toma nota de estas direcciones IP para usarlas más adelante en los pasos de configuración.

En 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 → GATEWAYS DE CLOUD VPN y valida que se generen las IP de las puertas de enlace.

66312b1b53c233d7.png

Crea el Cloud Router para targetl-vpc

En 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

En 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 “targetl-vpc”

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

Crear túnel VPN0

En 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

Crear túnel VPN1

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

Crear túnel VPN0

En 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

Crear túnel VPN1

En 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

Validar la creación del túnel VPN

En la consola, navega a CONECTIVIDAD HÍBRIDA → VPN → TUNNELS DE CLOUD VPN.

e8e13ebaed09f1.png

8. Establecer vecinos de BGP

Crea sesiones de BGP

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

Crea una interfaz de BGP y el intercambio de tráfico para “targetl-vpc”

En 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

En 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

En 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

En 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

En 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

En 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

En 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

En 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 VPN.

cb91b4476a88acd3.png

Valida las rutas aprendidas de targetl-vpc a través de una VPN con alta disponibilidad

En la consola, ve a Red de VPC → Redes de VPC → Targetl-vpc→ ROUTES → REGIÓN → US-CENTRAL1 → VISTA

Observa que targetl-vpc aprendió las rutas de on-prem-vpc nat-subnet y private-ip-subnet

f407ed6e1a6233db.png

Valide que on-prem-vpc haya aprendido a workbench-subnet mediante VPN con alta disponibilidad

En la consola, ve a Red de VPC → Redes de VPC → on-prem-vpc → ROUTES → REGIÓN → US-CENTRAL1 → VISTA

7957e5d898a9e7e0.png

9. Crea anuncios de ruta personalizados.

El Cloud Router 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 punto de acceso de Cloud Router basado en la nube para la dirección IP del extremo, 100.100.10.10, que se anunciará en el entorno local a través de BGP a on-prem-vpc.

Desde la consola, ve a CONECTIVIDAD HÍBRIDA → ROUTERS DE LA NUBE → targetl-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 aprendió la dirección IP del extremo de PSC a través de la VPN con alta disponibilidad.

En la consola, ve a Red de VPC → Redes de VPC → on-prem-vpc → ROUTES → REGIÓN → US-CENTRAL1 → VISTA

1b42673e6f940bf2.png

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

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

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

En la consola, navega a CONECTIVIDAD HÍBRIDA → ROUTERS DE LA NUBE → 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 targetl-vpc aprendió la ruta private-ip-subnet en on-prem-vpc.

En la consola, ve a Red de VPC → Redes de VPC → Targetl-vpc → ROUTES → REGIÓN → US-CENTRAL1 → VISTA

2b1a7a5f918e9f50.png

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

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

Debes la API de Service Account antes de continuar.

En 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"

En Cloud Shell, actualiza la cuenta de servicio con el rol Administrador de instancias de procesamiento

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

En Cloud Shell, actualiza la cuenta de servicio con el rol 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 el notebook Vertex que se usa en el instructivo.

En el instructivo, se le aplicarán los siguientes roles a la cuenta de servicio:

En 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 Administrador de almacenamiento.

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

En Cloud Shell, actualiza la cuenta de servicio con el rol 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"

En Cloud Shell, actualiza la cuenta de servicio con el rol 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"

En Cloud Shell, enumera la cuenta de servicio y toma nota de la dirección de correo electrónico que se usará cuando se cree el notebook administrado por el usuario.

gcloud iam service-accounts list

13. Creaste las instancias de prueba.

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

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

En 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"

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

En 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. Crear un notebook administrado por el usuario

la API del notebook.

En la siguiente sección, crearás un notebook administrado por el usuario que incorpore la cuenta de servicio creada con anterioridad, user-managed-notebook-sa.

En Cloud Shell, crea la instancia 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 codelab Vertex AI:Usa rutinas de predicción personalizadas con Sklearn para realizar el procesamiento previo y posterior de los datos para predicciones a partir de la sección 7,dado que ya creaste un notebook en el paso anterior. Una vez implementado el modelo, vuelve al instructivo para comenzar la siguiente sección.

ee68b7ba0cfd2746.png

16. Valida el acceso a la API de Vertex por Internet

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

Accede a nat-client mediante IAP en Cloud Shell para validar la conectividad a la API de Vertex. Para ello, realiza un análisis 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 la dig.

dig us-central1-aiplatform.googleapis.com

Por ejemplo, toma nota de las IP 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

En el SO nat-client, ejecuta tcpdump para validar la resolución de DNS cuando realices un curl en función de 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

Selecciona el signo "+" para abrir una terminal nueva de Cloud Shell. Cuando 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 dos, 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.

En el SO 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 de extremo de predicción en línea de la consola de Cloud que se usará en los pasos posteriores.

Navega a VERTEX AI → PREDICCIÓN EN LÍNEA

237d413ccde1e95b.png

En el SO 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 nat-client, realiza 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 (VIPS) públicas para las APIs de Vertex, como se muestra 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 usando 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 usado en el instructivo, actualizarás el archivo /etc/hosts en la instancia private-client.

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

Como ejemplo, el extremo de psc creado en el instructivo se llama pscvertex y 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 de 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 configurarlo para usar extremos personalizados. Por ejemplo:

Selecciona el signo "+" para abrir una terminal nueva de Cloud Shell. Cuando 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 usando IAP en un nuevo Cloud Shell para validar la conectividad a la API de Vertex realizando un análisis en el dominio de Vertex us-central1-aiplatform.googleapis.com.

En Cloud Shell, accede a la instancia del SO del cliente privado.

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

Ejecuta la dig.

dig us-central1-aiplatform.googleapis.com

Por ejemplo, toma nota de las IP públicas basadas en la respuesta 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 la instancia private-client, /etc/hosts, con el editor sudo VI o nano para crear un registro del FQDN de Vertex AI us-central1-aiplatform.googleapis.com que dirija 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 en el extremo de la API de Vertex.

ping us-central1-aiplatform.googleapis.com

Ejemplo, PING devuelve la IP del extremo de PSC, pero no se espera una 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.

En el SO del cliente privado, ejecuta tcpdump para validar la resolución de DNS y la ruta de datos de 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

Selecciona el signo "+" para abrir una cuarta terminal de Cloud Shell. Cuando 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 cuatro, realiza una conexión SSH a la instancia de cliente privado.

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.

En el SO private-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@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:$

Desde el SO private-client, 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 cuatro, 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 del cliente privado 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 TCPDUMP de Cloud Shell tres, podemos validar que no se observó una búsqueda de DNS a 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 a través de Internet y de forma privada con el uso de redes híbridas y Private Service Connect (googleapis). Sal del SO y vuelve a la ventana de Cloud Shell.

20. Limpia

En Cloud Shell, borra los componentes del instructivo.

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 de contenedor, navega a Artifact Registry, selecciona el repositorio que creaste y haz clic en Borrar.

616a3108bc2e48c8.png

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

eddd1f9fdfaede8.png

Anula la implementación del modelo en 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 → Registro de modelos → Borrar modelo

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 las redes híbridas.

Creaste un cliente nat-client y un cliente privado, y usaste TCPDUMP para validar las direcciones IP que se usan para llegar 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 múltiples nubes aprovechando un extremo de PSC del cliente.

Cosmopup cree que los instructivos son increíbles.

e6d3675ca7c6911f.jpeg

¿Qué sigue?

Consulta algunos de estos instructivos...

Lecturas adicionales y Videos

Documentos de referencia