A Vertex AI acessa endpoints de previsão on-line de maneira particular usando PSC

1. Introdução

Os hosts locais podem acessar uma previsão on-line de forma nativa pela Internet pública (opção 1) ou usando o Cloud VPN ou o Cloud Interconnect com o Private Service Connect (PSC) (opção 2) da rede local. Ambas as opções oferecem criptografia SSL/TLS. A conectividade híbrida para previsão on-line por interconexão tem um desempenho melhor do que a Internet e, portanto, é recomendada para aplicativos essenciais, conforme ilustrado na Figura 1.

Neste tutorial, vamos demonstrar como usar a VPN de alta disponibilidade (HA VPN) para acessar a previsão on-line de maneira particular entre duas redes VPC que podem servir como base para conectividade particular multicloud e no local.

Observação: a previsão on-line da Vertex é um endpoint público. Portanto, é recomendável restringir o acesso usando o VPC Service Controls (VPC-SC) para criar perímetros seguros e permitir ou negar o acesso à Vertex e a outras APIs do Google. Este tutorial não aborda o VPC-SC. Para mais detalhes, consulte VPC Service Controls com a Vertex AI.

24a07ba49a7bcb16.png

O que você vai criar

Você vai configurar uma rede VPC chamada on-prem-vpc para representar um ambiente local. Na sua implantação, o on-prem-vpc não existiria. Em vez disso, seria usada uma rede híbrida para seu data center local ou provedor de nuvem.

Você vai criar uma arquitetura abrangente do Private Service Connect que ilustra o acesso público à previsão on-line pelo Cloud NAT e particular usando o PSC pela VPN de alta disponibilidade, conforme os detalhes abaixo.

b545c808b366341a.png

Depois que a previsão on-line for implantada no projeto do Google Cloud, os seguintes casos de uso serão analisados:

O acesso público à previsão on-line consiste no seguinte:

  • Crie uma instância do GCE (nat-client) que use o NAT para acesso à Internet de saída.
  • Usar CURL para fazer inferência no modelo
  • Use o TCPDUMP para validar se a previsão on-line é acessada por um VIP público

O acesso particular à previsão on-line consiste no seguinte:

  • Implante um modelo em um endpoint de previsões on-line da Vertex no projeto
  • Criar um endpoint do Private Service Connect (Googleapis) na aiml-vpc
  • Exporte o endereço IP do PSC pelo Cloud Router como um anúncio personalizado para a VPC no local.
  • Crie uma instância do GCE (private-client) e atualize o arquivo etc/hosts com o IP do endpoint do PSC.
  • Usar CURL para fazer inferência no modelo
  • Use o TCPDUMP para validar se a previsão on-line é acessada pelo endereço IP do endpoint do PSC

O que você vai aprender

  • Como estabelecer um endpoint do Private Service Connect
  • Como anunciar o IP do endpoint do PSC no Cloud Router
  • Como usar o TCPDUMP para validar o acesso à previsão on-line, tanto pública quanto privada

O que é necessário

  • Projeto do Google Cloud

Permissões do IAM

Administrador de rede do Compute

Editor do Diretório de serviços

Administrador do DNS

Administrador de rede

Administrador de cota

Administrador de notebooks

Usuário da conta de serviço

Administrador de armazenamento

Usuário da Vertex AI

Administrador da conta de serviço

2. Antes de começar

Atualizar o projeto para oferecer suporte ao tutorial

Este tutorial usa $variáveis para ajudar na implementação da configuração do gcloud no Cloud Shell.

No Cloud Shell, faça o seguinte:

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

3. Ativar o Services

No Cloud Shell, faça o seguinte:

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. Configuração do aiml-vpc

Criar a aiml-vpc

No Cloud Shell, faça o seguinte:

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

Criar a sub-rede de notebooks gerenciados pelo usuário

No Cloud Shell, faça o seguinte:

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

Configuração do Cloud Router e do NAT

O Cloud NAT é usado no tutorial para downloads de pacotes de software de notebook porque a instância de notebook gerenciada pelo usuário não tem um endereço IP externo. O Cloud NAT também oferece recursos de NAT de saída, o que significa que os hosts da Internet não podem iniciar a comunicação com um notebook gerenciado pelo usuário, tornando-o mais seguro.

No Cloud Shell, crie o Cloud Router regional.

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

No Cloud Shell, crie o gateway regional do 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. Configuração da VPC no local

Criar a vpc no local

No Cloud Shell, faça o seguinte:

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

Criar a nat-subnet

No Cloud Shell, faça o seguinte:

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

Criar a private-ip-subnet

No Cloud Shell, faça o seguinte:

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

Configuração do Cloud Router e do NAT

O Cloud NAT é usado no tutorial para downloads de pacotes de software. O Cloud NAT também oferece recursos de NAT de saída, o que significa que os hosts da Internet não podem iniciar a comunicação com a computação, tornando-a mais segura.

No Cloud Shell, crie o Cloud Router regional.

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

No Cloud Shell, crie o gateway regional do 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. Criar o endpoint do Private Service Connect

Na seção a seguir, você vai criar um endpoint do Private Service Connect (PSC) que será usado para acessar a API Vertex na vpc no local. O endereço IP do PSC 100.100.10.10 será anunciado pelo aiml-vpc-cloud-router-vpn como uma divulgação de roteador personalizada para a rede local em uma etapa futura.

No Cloud Shell

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

Criar o endpoint do PSC

No Cloud Shell

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

Listar os endpoints do Private Service Connect configurados

No Cloud Shell

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

Descrever os endpoints do Private Service Connect configurados

No Cloud Shell

gcloud compute forwarding-rules describe \
    pscvertex --global

7. Conectividade híbrida

Na seção a seguir, você vai criar um Cloud Router que permite trocar rotas dinamicamente entre sua nuvem privada virtual (VPC) e a rede de peering usando o Border Gateway Protocol (BGP).

O Cloud Router pode configurar uma sessão do BGP em um túnel do Cloud VPN para conectar suas redes. Ele aprende automaticamente novos intervalos de endereços IP de sub-rede e os anuncia na sua rede de peering.

No tutorial, você vai implantar a VPN de alta disponibilidade entre aiml-vpc e on-prem-vpc.

Crie o gateway de VPN de alta disponibilidade para a aiml-vpc

Quando cada gateway é criado, dois endereços IPv4 externos são alocados automaticamente, um para cada interface de gateway.

No Cloud Shell, crie o gateway de VPN de alta disponibilidade.

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

Crie o gateway de VPN de alta disponibilidade para a on-prem-vpc

Quando cada gateway é criado, dois endereços IPv4 externos são alocados automaticamente, um para cada interface de gateway. Anote esses endereços IP para usar mais tarde nas etapas de configuração.

No Cloud Shell, crie o gateway de VPN de alta disponibilidade.

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

Validar a criação do gateway de VPN de alta disponibilidade

No console, navegue até CONECTIVIDADE HÍBRIDA → VPN → GATEWAYS DO CLOUD VPN e valide se os IPs do gateway foram gerados.

66312b1b53c233d7.png

Crie o Cloud Router para aiml-vpc

No Cloud Shell, crie o Cloud Router localizado em us-central1.

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

Crie o Cloud Router para a VPC no local

No Cloud Shell, crie o Cloud Router localizado em us-central1.

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

Crie os túneis VPN para aiml-vpc

Você vai criar dois túneis de VPN em cada gateway de VPN de alta disponibilidade.

Criar túnel VPN0

No Cloud Shell, crie o 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

Criar VPN tunnel1

No Cloud Shell, crie o 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

Crie os túneis VPN para a VPC no local

Você vai criar dois túneis de VPN em cada gateway de VPN de alta disponibilidade.

Criar túnel VPN0

No Cloud Shell, crie o 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

Criar VPN tunnel1

No Cloud Shell, crie o 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 a criação do túnel VPN

No console, navegue até CONECTIVIDADE HÍBRIDA → VPN → TÚNEIS DO CLOUD VPN.

e8e13ebaed09f1.png

8. Estabelecer vizinhos do BGP

Criar sessões do BGP

Nesta seção, você configura as interfaces do Cloud Router e os peerings do BGP.

Criar uma interface e um peering do BGP para aiml-vpc

No Cloud Shell, crie a interface do 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

No Cloud Shell, crie o peering do 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

No Cloud Shell, crie a interface do 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

No Cloud Shell, crie o peering do 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

Criar uma interface e um peering do BGP para VPC no local

No Cloud Shell, crie a interface do 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

No Cloud Shell, crie o peering do 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

No Cloud Shell, crie a interface do 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

No Cloud Shell, crie o peering do 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

Navegue até CONECTIVIDADE HÍBRIDA → VPN para conferir os detalhes do túnel VPN.

cb91b4476a88acd3.png

Validar as rotas aprendidas da aiml-vpc pela VPN de alta disponibilidade

No console, acesse Rede VPC → Redes VPC → aiml-vpc → ROTAS → REGIÃO → US-CENTRAL1 → VER

Observe que o aiml-vpc aprendeu rotas da sub-rede nat e da sub-rede de IP privado da VPC no local

f407ed6e1a6233db.png

Verifique se a VPC no local aprendeu a sub-rede workbench pela VPN de alta disponibilidade

No console, acesse Rede VPC → Redes VPC → on-prem-vpc → ROTAS → REGIÃO → US-CENTRAL1 → VER

7957e5d898a9e7e0.png

9. Criar divulgações de rota personalizadas para aiml-vpc

O IP do endpoint do Private Service Connect não é divulgado automaticamente pelo Cloud Router aiml-cr-us-central1 porque a sub-rede não está configurada na VPC.

Em vez disso, você precisará criar um anúncio de rota personalizado do Cloud Router aiml-cr-us-central para o endereço IP do endpoint 100.100.10.10, que será anunciado no ambiente local pelo BGP para a VPC no local.

No console, navegue até CONECTIVIDADE HÍBRIDA → ROTEADORES DE NUVEM → aiml-cr-us-central1 e selecione EDITAR.

c8fb02ed59a5b068.png

Na seção "Rotas divulgadas", selecione a opção Criar rotas personalizadas, atualize os campos com base no exemplo abaixo, selecione CONCLUÍDO e clique em SALVAR.

5996464e3aae0665.png

f799082ab2cd7e31.png

Validação

Verifique se a VPC no local aprendeu o endereço IP do endpoint do PSC pela VPN de alta disponibilidade

No console, acesse Rede VPC → Redes VPC → on-prem-vpc → ROTAS → REGIÃO → US-CENTRAL1 → VER

1b42673e6f940bf2.png

10. Criar divulgações de rota personalizadas no local-VPC

O Cloud Router no local-vpc divulga todas as sub-redes por padrão, mas apenas a private-ip-subnet é necessária.

Na seção a seguir, atualize os anúncios de rota do Cloud Router no local on-prem-cr-us-central1.

No console, navegue até CONECTIVIDADE HÍBRIDA → CLOUD ROUTERS → on-prem-cr-us-central1 e selecione EDITAR.

bd96bde9550d516a.png

Na seção "Rotas divulgadas", selecione a opção Criar rotas personalizadas, atualize os campos com base no exemplo abaixo, selecione CONCLUÍDO e clique em SALVAR.

f8b61f669a9cfeef.png

Validação

Valide se o aiml-vpc aprendeu a rota da sub-rede de IP privado usando a VPC no local.

No console, acesse Rede VPC → Redes VPC → aiml-vpc → ROTAS → REGIÃO → US-CENTRAL1 → VER

2b1a7a5f918e9f50.png

11. Criar uma conta de serviço gerenciada pelo usuário (instâncias do GCE)

Para oferecer um controle refinado à API Vertex, é necessária uma conta de serviço gerenciada pelo usuário, que será aplicada às instâncias de cliente NAT e particular. Depois de geradas, as permissões da conta de serviço podem ser modificadas com base nos requisitos comerciais. No tutorial, a conta de serviço gerenciada pelo usuário, vertex-sa, terá as seguintes funções aplicadas:

É necessário a API Service Account antes de continuar.

No Cloud Shell, crie a conta de serviço.

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

No Cloud Shell, atualize a conta de serviço com a função "Administrador da instância de computação".

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

No Cloud Shell, atualize a conta de serviço com a função de usuário da Vertex AI.

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

12. Criar uma conta de serviço gerenciada pelo usuário (notebook)

Na seção a seguir, você vai criar uma conta de serviço gerenciada pelo usuário que será associada ao Vertex Workbench (notebook) usado no tutorial.

No tutorial, a conta de serviço terá os seguintes papéis aplicados:

No Cloud Shell, crie a conta de serviço.

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

No Cloud Shell, atualize a conta de serviço com o papel de administrador do Storage.

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

No Cloud Shell, atualize a conta de serviço com a função de usuário da Vertex AI.

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

No Cloud Shell, atualize a conta de serviço com o papel Administrador do Artifact Registry.

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

No Cloud Shell, liste a conta de serviço e anote o endereço de e-mail que será usado ao criar o notebook gerenciado pelo usuário.

gcloud iam service-accounts list

13. Criou as instâncias de teste

Na seção a seguir, você vai criar instâncias de teste para validar diferentes métodos de acesso às APIs do Vertex, especificamente:

  • A instância nat-client, usa o Cloud NAT para resolver a Vertex AI e acessar o endpoint de previsão on-line pela Internet.
  • A instância private-client vai usar o IP do Private Service Connect 100.100.10.10 para acessar o endpoint de previsão on-line pela VPN de alta disponibilidade.

No Cloud Shell, crie a instância 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"

No Cloud Shell, crie a instância 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 o Identity-Aware Proxy (IAP) se conecte às instâncias de VM, crie uma regra de firewall que:

  • Aplica-se a todas as instâncias de VM que você quer acessar usando o IAP.
  • Permite o tráfego de entrada do intervalo de IP 35.235.240.0/20. Esse intervalo contém todos os endereços IP que o IAP usa para o encaminhamento de TCP.

No Cloud Shell, crie a regra de firewall do 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. Criar um notebook gerenciado pelo usuário

a API Notebook

Na seção a seguir, crie um notebook gerenciado pelo usuário que incorpore a conta de serviço criada anteriormente, user-managed-notebook-sa.

No Cloud Shell, crie a instância 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. Implantar o modelo e a previsão on-line

Na seção a seguir, use o codelabVertex AI:usar rotinas de previsão personalizadas com o Sklearn para pré-processar e pós-processar dados para previsões. Comece pela seção 7,já que você criou um notebook na etapa anterior. Depois que o modelo for implantado, volte ao tutorial para iniciar a próxima seção.

ee68b7ba0cfd2746.png

16. Validar o acesso à API Vertex pela Internet

Na seção a seguir, você vai fazer login na instância nat-client e validar a conectividade com a Vertex AI usando dig e tcpdump no domínio us-central1-aiplatform.googleapis.com, usado para resolver as APIs Vertex.

Faça login em nat-client usando o IAP no Cloud Shell para validar a conectividade com a API Vertex. Para isso, execute um dig no domínio do Vertex us-central1-aiplatform.googleapis.com.

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

Execute o dig.

dig us-central1-aiplatform.googleapis.com

Por exemplo, observe os IPs públicos na resposta do 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

No SO nat-client, execute o tcpdump para validar a resolução de DNS ao realizar um curl na previsão on-line.

 sudo tcpdump -i any port 53 -n

Exemplo:

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

Abra um novo terminal do Cloud Shell selecionando o botão "+". Depois que a nova guia for aberta, atualize a variável de nome do projeto.

No Cloud Shell, atualize a variável de nome do projeto.

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

No Cloud Shell dois, execute um SSH na instância nat-client.

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

Na seção a seguir, você vai criar um arquivo instances.json usando o editor sudo VI ou nano e inserir a string de dados usada para receber uma previsão do modelo implantado.

No SO nat-client, crie um arquivo instances.json com a string de dados abaixo:

{"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]]}

Exemplo:

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:$

Receba o ID do endpoint de previsão on-line do Console do Cloud, que será usado nas etapas subsequentes.

Acesse VERTEX AI → PREVISÃO ON-LINE

237d413ccde1e95b.png

No SO nat-client, crie as seguintes variáveis:

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

Exemplo:

ENDPOINT_ID="3328226095324463104"

No SO nat-client, execute um curl para receber uma resposta do 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

Por exemplo, observe a previsão bem-sucedida.

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. Validação: acesso à Internet para a API Vertex

Agora que você executou a previsão, vamos analisar os resultados do TCPDUMP (terminal 1), que indicam que a instância nat-client (192.168.10.2) está executando uma consulta DNS para o servidor DNS local 169.254.169.254 no domínio da Vertex AI us-central1-aiplatform.googleapis.com. O resultado da consulta DNS são endereços IP virtuais (VIPs) públicos para APIs da Vertex, conforme observado abaixo:

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. Ativar o acesso particular às APIs Vertex

Na seção a seguir, você vai acessar as APIs Vertex usando o Private Service Connect em uma rede híbrida (VPN de alta disponibilidade) para acessar a previsão on-line de forma particular. No exemplo usado no tutorial, você vai atualizar o arquivo /etc/hosts na instância private-client.

No seu ambiente local, atualizar o arquivo /etc/hosts de uma ou algumas máquinas para teste é adequado. No entanto, para ambientes de produção e de grande escala, é mais recomendável criar uma nova zona de encaminhamento usando o FQDN do endpoint do PSC.

Por exemplo, o endpoint do PSC criado no tutorial é chamado de pscvertex, que se traduz em pscvertex.p.googleapis.com.Ao usar o endpoint para o Vertex, adicione o FQDN com o serviço, por exemplo, us-central1-aiplatform-pscvertex.p.googleapis.com.

A atualização do DNS local com o endpoint do PSC também exige a refatoração de aplicativos locais para chamar o FQDN, por exemplo, us-central1-aiplatform-pscvertex.p.googleapis.com em vez do endpoint público nativo us-central1-aiplatform.googleapis.com.

Os clientes que podem ser configurados para usar um endpoint personalizado podem usar os nomes de DNS p.googleapis.com para enviar solicitações a um endpoint.

Consulte a documentação do seu cliente ou da biblioteca de cliente para mais informações sobre como configurá-lo para usar endpoints personalizados. Exemplo:

Abra um novo terminal do Cloud Shell selecionando o botão "+". Depois que a nova guia for aberta, atualize a variável de nome do projeto.

No Cloud Shell.

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

Faça login no private-client usando o IAP em um novo Cloud Shell para validar a conectividade com a API Vertex executando um dig no domínio da Vertex us-central1-aiplatform.googleapis.com

No Cloud Shell, faça login na instância do SO private-client.

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

Execute o dig.

dig us-central1-aiplatform.googleapis.com

Por exemplo, observe os IPs públicos com base na resposta 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

Atualize a instância private-client /etc/hosts usando o editor sudo VI ou nano para criar um registro do FQDN da Vertex AI us-central1-aiplatform.googleapis.com apontando para o endpoint do PSC 100.100.10.10. Não são necessárias mais mudanças.

Exemplo:

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

No SO do cliente particular, execute um PING no endpoint de API Vertex.

ping us-central1-aiplatform.googleapis.com

Por exemplo, PING retorna o IP do endpoint do PSC, mas nenhuma resposta é esperada.

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

No SO do cliente particular, execute o tcpdump para validar a resolução de DNS e o caminho de dados IP até o endpoint do PSC ao executar um curl na previsão on-line.

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

Abra um quarto terminal do Cloud Shell selecionando o botão "+". Depois que a nova guia for aberta, atualize a variável de nome do projeto.

No Cloud Shell, atualize a variável de nome do projeto.

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

No Cloud Shell 4, execute um SSH na instância private-client.

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

Na seção a seguir, você vai criar um arquivo instances.json usando o editor sudo VI ou nano e inserir a string de dados usada para receber uma previsão do modelo implantado.

No SO do cliente particular, crie um arquivo instances.json com a string de dados abaixo:

{"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]]}

Exemplo:

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:$

No SO do cliente particular, crie as seguintes variáveis:

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

Exemplo:

ENDPOINT_ID="3328226095324463104"

No SO private-client do Cloud Shell 4, execute um curl para receber uma resposta do 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. Validação: acesso particular à API Vertex

No SO do cliente particular no Cloud Shell 4, observe que o IP do endpoint do PSC (100.100.10.10) foi usado para acessar a API 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

No terminal TCPDUMP no Cloud Shell 3, podemos validar que uma busca DNS para us-central1-aiplatform.googleapis.com não foi observada, já que o arquivo /etc/host teve precedência, mas o endereço IP do PSC 100.100.10.10 foi usado no caminho de dados.

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

Você validou com sucesso a conexão com a previsão on-line por um endpoint público pela Internet e de forma particular com o uso de rede híbrida e Private Service Connect (googleapis). Saia do SO e volte para o prompt do Cloud Shell.

20. Limpar

No Cloud Shell, exclua os componentes do tutorial.

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

Excluir componentes da Vertex

Para excluir a imagem do contêiner, navegue até o Artifact Registry, selecione o repositório que você criou e clique em Excluir.

616a3108bc2e48c8.png

Para excluir o bucket do Storage, use o menu de navegação do console do Cloud, acesse o Storage, selecione o bucket e clique em Excluir:

eddd1f9fdfaede8.png

Remova a implantação do modelo do endpoint. Acesse Vertex AI → Previsão on-line → Selecione diamonds-cpr_endpoint → Cancelar a implantação do modelo do endpoint → Cancelar a implantação

bc95f092d21d4698.png

Exclua o modelo. Acesse Vertex AI → Model Registry → Excluir modelo

ec4afff091e11606.png

Exclua o endpoint de previsão on-line. Acesse Vertex AI → Previsão on-line → Selecione diamonds-cpr_endpoint → Excluir endpoint

7453760299bdfb9a.png

21. Parabéns

Parabéns! Você configurou e validou com sucesso a conexão com a previsão on-line de forma nativa usando a Internet e de forma particular com o Private Service Connect e a rede híbrida.

Você criou um nat-client e um private-client e usou o TCPDUMP para validar os endereços IP usados para acessar as APIs da Vertex. Além disso, você aprendeu sobre o Private Service Connect (googleapis) e como ele pode ser usado para isolar aplicativos locais e multicloud aproveitando um endpoint do PSC do cliente.

O Cosmopup acha que os tutoriais são incríveis!

e6d3675ca7c6911f.jpeg

Qual é a próxima etapa?

Confira alguns destes tutoriais:

Leituras e vídeos complementares

Documentos de referência