Vertex AI 使用 PSC 以私密方式访问在线预测端点

1. 简介

本地主机可以通过两种方式访问在线预测服务:通过公共互联网(选项 1)或通过 Cloud VPNCloud Interconnect 使用 Private Service Connect (PSC)(选项 2),这两种方式都提供 SSL/TLS 加密。通过互连实现与在线预测的混合连接比通过互联网实现更高效,因此建议用于关键应用,如图 1 所示。

在本教程中,我们将演示如何使用高可用性 VPN (HA VPN) 在可用作多云和本地专用连接基础的两个 VPC 网络之间以私密方式访问在线预测。

请注意,Vertex Online Prediction 是一个公共端点,因此您需要使用 VPC Service Controls (VPC-SC) 来限制访问权限,以创建安全边界,从而允许或拒绝访问 Vertex 和其他 Googleapis。本教程未介绍 VPC-SC,如需了解详情,请参阅将 VPC Service Controls 与 Vertex AI 搭配使用

24a07ba49a7bcb16.png

构建内容

您将设置一个名为 on-prem-vpc 的 VPC 网络来表示本地环境。对于您的部署,on-prem-vpc 将不存在,而是使用混合网络连接到本地数据中心或云提供方。

您将构建一个全面的 Private Service Connect 架构,该架构将演示如何通过 Cloud NAT 公开访问在线预测,以及如何通过高可用性 VPN 使用 PSC 以非公开方式访问在线预测(详见下文)。

b545c808b366341a.png

在 Google Cloud 项目中部署在线预测后,我们将探索以下使用情形:

对在线预测的公开访问权限包括以下内容:

  • 创建利用 NAT 实现出站互联网访问的 GCE 实例 (nat-client)
  • 使用 C网址 对模型进行推理
  • 使用 TCPDUMP 验证在线预测是否通过公共 VIP 进行访问

对在线预测的专用访问,包括以下内容:

  • 将模型部署到项目中的 Vertex 在线预测端点
  • 在 aiml-vpc 中创建 Private Service Connect (Googleapis) 端点
  • 通过 Cloud Router 将 PSC IP 地址作为自定义通告导出到本地 VPC
  • 创建 GCE 实例 (private-client),并使用 PSC 端点 IP 更新 etc/hosts 文件
  • 使用 C网址 对模型进行推理
  • 使用 TCPDUMP 验证是否通过 PSC 端点 IP 地址访问在线预测

学习内容

  • 如何建立 Private Service Connect 端点
  • 如何通过 Cloud Router 通告 PSC 端点 IP
  • 如何使用 TCPDUMP 验证在线预测访问权限(包括公开和私密)

所需条件

  • Google Cloud 项目

IAM 权限

计算网络管理员

Service Directory Editor

DNS Administrator

Network Admin

Quota Administrator

Notebooks Admin

Service Account User

Storage Administrator

Vertex AI User

Service Account Admin

2. 准备工作

更新项目以支持本教程

本教程使用 $变量来帮助在 Cloud Shell 中实现 gcloud 配置。

在 Cloud Shell 中,执行以下操作:

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

3. 启用服务

在 Cloud Shell 中,执行以下操作:

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. aiml-vpc 设置

创建 aiml-vpc

在 Cloud Shell 中,执行以下操作:

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

创建用户管理的笔记本子网

在 Cloud Shell 中,执行以下操作:

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

Cloud Router 和 NAT 配置

本教程中使用 Cloud NAT 来下载笔记本软件软件包,因为用户管理的笔记本实例没有外部 IP 地址。Cloud NAT 还提供出站 NAT 功能,这意味着互联网主机无法与用户管理的笔记本发起通信,从而提高了安全性。

在 Cloud Shell 中,创建区域级 Cloud Router。

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

在 Cloud Shell 中,创建区域级 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. 本地 VPC 设置

创建本地 VPC

在 Cloud Shell 中,执行以下操作:

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

创建 nat-subnet

在 Cloud Shell 中,执行以下操作:

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

创建 private-ip-subnet

在 Cloud Shell 中,执行以下操作:

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

Cloud Router 和 NAT 配置

本教程中使用 Cloud NAT 下载软件包。Cloud NAT 还提供出站 NAT 功能,这意味着互联网主机无法与计算资源建立通信,从而提高了安全性。

在 Cloud Shell 中,创建区域级 Cloud Router。

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

在 Cloud Shell 中,创建区域级 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. 创建 Private Service Connect 端点

在下一部分中,您将创建一个 Private Service Connect (PSC) 端点,用于从本地 VPC 访问 Vertex API。PSC IP 地址 100.100.10.10 将在后面的步骤中作为自定义路由器通告从 aiml-vpc-cloud-router-vpn 通告给本地网络。

从 Cloud Shell

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

创建 PSC 端点

从 Cloud Shell

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

列出已配置的 Private Service Connect 端点

从 Cloud Shell

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

描述已配置的 Private Service Connect 端点

从 Cloud Shell

gcloud compute forwarding-rules describe \
    pscvertex --global

7. 混合连接

在下一部分中,您将创建一个 Cloud Router 路由器,该路由器可让您使用边界网关协议 (BGP) 在虚拟私有云 (VPC) 和对等互连网络之间动态交换路由。

Cloud Router 路由器可以通过 Cloud VPN 隧道设置 BGP 会话来连接您的网络。它会自动获知新的子网 IP 地址范围,并将其通告给您的对等网络。

在本教程中,您将在 aiml-vpc本地-vpc 之间部署高可用性 VPN。

aiml-vpc 创建高可用性 VPN 网关

每个网关创建后,系统会自动分配两个外部 IPv4 地址,每个地址对应一个网关接口。

在 Cloud Shell 中,创建高可用性 VPN 网关

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

本地 VPC 创建高可用性 VPN 网关

每个网关创建后,系统会自动分配两个外部 IPv4 地址,每个地址对应一个网关接口。记下这些 IP 地址,以便稍后在配置步骤中使用。

在 Cloud Shell 中,创建高可用性 VPN 网关。

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

验证高可用性 VPN 网关创建情况

使用控制台,依次前往混合连接 → VPN → Cloud VPN 网关,并验证网关 IP 是否已生成。

66312b1b53c233d7.png

为 aiml-vpc 创建 Cloud Router

在 Cloud Shell 中,创建位于 us-central1 中的 Cloud Router

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

为本地 VPC 创建 Cloud Router

在 Cloud Shell 中,创建位于 us-central1 中的 Cloud Router

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

为 aiml-vpc 创建 VPN 隧道

您将在每个高可用性 VPN 网关上创建两个 VPN 隧道。

创建 VPN 隧道 0

在 Cloud Shell 中,创建 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

创建 VPN 隧道 1

在 Cloud Shell 中,创建 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

为本地 vpc 创建 VPN 隧道

您将在每个高可用性 VPN 网关上创建两个 VPN 隧道。

创建 VPN 隧道 0

在 Cloud Shell 中,创建 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

创建 VPN 隧道 1

在 Cloud Shell 中,创建 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

验证 VPN 隧道创建

使用控制台,依次前往混合连接 → VPN → Cloud VPN 隧道

e8e13ebaed09f1.png

8. 建立 BGP 邻居

创建 BGP 会话

在本部分中,您将配置 Cloud Router 接口和 BGP 对等端。

为 aiml-vpc 创建 BGP 接口和对等互连

在 Cloud Shell 中,创建 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

在 Cloud Shell 中,创建 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

在 Cloud Shell 中,创建 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

在 Cloud Shell 中,创建 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

为本地 VPC 创建 BGP 接口和对等互连

在 Cloud Shell 中,创建 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

在 Cloud Shell 中,创建 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

在 Cloud Shell 中,创建 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

在 Cloud Shell 中,创建 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

前往混合连接 → VPN,查看 VPN 隧道详情。

cb91b4476a88acd3.png

验证 aiml-vpc 是否已通过高可用性 VPN 获知路由

使用控制台,依次前往 VPC 网络 → VPC 网络 → aiml-vpc → 路由 → 区域 → US-CENTRAL1 → 查看

观察 aiml-vpc 是否已从 本地-vpc nat-subnet 和 private-ip-subnet 获知路由

f407ed6e1a6233db.png

验证本地 VPC 是否已通过高可用性 VPN 获知 workbench-subnet

使用控制台,依次前往 VPC 网络 → VPC 网络 → 本地 VPC → 路由 → 区域 → US-CENTRAL1 → 查看

7957e5d898a9e7e0.png

9. 为 aiml-vpc 创建自定义路由通告

aiml-cr-us-central1 Cloud Router 不会自动通告 Private Service Connect 端点 IP,因为 VPC 中未配置子网。

您需要为端点 IP 地址 100.100.10.10 创建从 aiml-cr-us-central Cloud Router 路由器到 on-prem-vpc 的自定义路由通告,从而将该地址通过 BGP 通告给本地环境。

在控制台中,依次前往混合连接 → Cloud Router → aiml-cr-us-central1,然后选择修改

c8fb02ed59a5b068.png

在“通告的路由”部分中,选择创建自定义路由选项,根据以下示例更新相应字段,选择完成,然后点击保存

5996464e3aae0665.png

f799082ab2cd7e31.png

验证

验证本地 VPC 是否已通过高可用性 VPN 获知 PSC 端点 IP 地址

使用控制台,依次前往 VPC 网络 → VPC 网络 → 本地 VPC → 路由 → 区域 → US-CENTRAL1 → 查看

1b42673e6f940bf2.png

10. 在本地 VPC 上创建自定义路由通告

默认情况下,on-prem-vpc Cloud Router 路由器会通告所有子网,但只需要 private-ip-subnet。

在以下部分中,更新本地 on-prem-cr-us-central1 Cloud Router 路由器中的路由通告。

在控制台中,依次前往混合连接 → Cloud Router → 本地-cr-us-central1,然后选择修改

bd96bde9550d516a.png

在“通告的路由”部分中,选择创建自定义路由选项,根据以下示例更新相应字段,选择完成,然后点击保存

f8b61f669a9cfeef.png

验证

验证 aiml-vpc 是否已通过本地 VPC 获知 private-ip-subnet 路由。

使用控制台,依次前往 VPC 网络 → VPC 网络 → aiml-vpc → 路由 → 区域 → US-CENTRAL1 → 查看

2b1a7a5f918e9f50.png

11. 创建用户管理的服务账号 (GCE 实例)

为了对 Vertex API 提供精细的控制,需要使用用户管理的服务账号,该账号将应用于 NAT 和专用客户端实例。生成服务账号后,您可以根据业务需求修改其权限。在本教程中,用户管理的托管式服务账号 vertex-sa 将具有以下角色:

您必须先 Service Account API,然后才能继续操作。

在 Cloud Shell 中,创建服务账号。

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

在 Cloud Shell 中,使用角色“Compute Instance Admin”更新服务账号

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

在 Cloud Shell 中,使用 Vertex AI User 角色更新服务账号

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

12. 创建用户管理的 Vertex AI Notebooks 服务账号

在下一部分中,您将创建一个用户管理的服务账号,该账号将与本教程中使用的 Vertex Workbench(笔记本)相关联。

在本教程中,服务账号将具有以下角色:

在 Cloud Shell 中,创建服务账号。

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

在 Cloud Shell 中,使用 Storage Admin 角色更新服务账号。

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

在 Cloud Shell 中,使用 Vertex AI User 角色更新服务账号。

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

在 Cloud Shell 中,使用 Artifact Registry Admin 角色更新服务账号。

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

在 Cloud Shell 中,列出服务账号,并记下创建用户管理笔记本时将使用的电子邮件地址。

gcloud iam service-accounts list

13. 创建了测试实例

在下一部分中,您将创建测试实例来验证访问 Vertex API 的不同方法,具体如下:

  • 实例 nat-client, 将使用 Cloud NAT 解析 Vertex AI,从而通过互联网访问在线预测端点
  • 实例 private-client 将使用 Private Service Connect IP 100.100.10.10 通过高可用性 VPN 访问在线预测端点。

在 Cloud Shell 中创建 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"

在 Cloud Shell 中创建 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"

如需允许 Identity-Aware Proxy (IAP) 连接到您的虚拟机实例,请创建一条防火墙规则,该规则应:

  • 适用于您希望使用 IAP 可访问的所有虚拟机实例。
  • 允许来自 IP 范围 35.235.240.0/20 的入站流量。此范围包含 IAP 用于 TCP 转发的所有 IP 地址。

在 Cloud Shell 中,创建 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. 创建用户管理的笔记本

Notebooks API

在下一部分中,创建一个包含之前创建的服务账号 user-managed-notebook-sa 的用户管理的笔记本。

在 Cloud Shell 中,创建 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. 部署模型和在线预测

在下一部分中,请使用提供的 Codelab“Vertex AI:利用自定义预测例程与 Sklearn,对预测所需数据进行预处理和后处理”,从第 7 部分开始,因为您已在上一步中创建了笔记本。模型部署完成后,返回本教程以开始下一部分。

ee68b7ba0cfd2746.png

16. 验证通过互联网对 Vertex API 的访问权限

在下一部分中,您将登录实例 nat-client,并使用 dig 和 tcpdump 命令针对用于解析 Vertex API 的网域 us-central1-aiplatform.googleapis.com 验证与 Vertex AI 的连接。

在 Cloud Shell 中使用 IAP 登录 nat-client,通过对 Vertex 网域 us-central1-aiplatform.googleapis.com 执行 dig 来验证与 Vertex API 的连接

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

执行 dig。

dig us-central1-aiplatform.googleapis.com

示例,请注意 DNS 响应中的公共 IP。

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

在 nat-client 操作系统中,执行 tcpdump 以验证在对在线预测执行 curl 时 DNS 解析是否正常。

 sudo tcpdump -i any port 53 -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

选择“+”,打开新的 Cloud Shell 终端。新标签页打开后,更新项目名称变量。

在 Cloud Shell 中,更新项目名称变量。

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

在 Cloud Shell 2 中,通过 SSH 连接到 nat-client 实例。

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

在下一部分中,您将使用 sudo VI 编辑器或 nano 创建一个 instances.json 文件,并插入用于从已部署的模型中获取预测结果的数据字符串。

在 nat-client 操作系统中,创建一个包含以下数据字符串的 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:$ 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:$

从 Cloud 控制台中获取在线预测端点 ID,该 ID 将在后续步骤中使用。

前往 VERTEX AI → ONLINE PREDICTION

237d413ccde1e95b.png

在 nat-client 操作系统中,创建以下变量:

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

示例:

ENDPOINT_ID="3328226095324463104"

从 nat-client 操作系统执行 curl,以获取模型的回答。

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

示例,请注意预测成功。

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. 验证 - 对 Vertex API 的互联网访问权限

现在,您已执行预测,接下来我们来看看 TCPDUMP 结果(终端 1),该结果表明 nat-client 实例 (192.168.10.2) 正在为 Vertex AI 网域 us-central1-aiplatform.googleapis.com 执行对本地 DNS 服务器 169.254.169.254 的 DNS 查询。DNS 查询的结果是 Vertex API 的公共虚拟 IP 地址 (VIP),如下所示:

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. 启用对 Vertex API 的专用访问权限

在下一部分中,您将使用 Private Service Connect 通过混合网络(高可用性 VPN)访问 Vertex API,以私密方式实现在线预测。在本教程所用的示例中,您将更新 private-client 实例中的 /etc/hosts 文件。

在本地环境中,更新单个或少量机器的 /etc/hosts 文件以进行测试是合适的,但对于大规模和生产环境,使用 PSC 端点 FQDN 创建新的转发区域更为理想。

例如,教程中创建的 PSC 端点名为 pscvertex,在使用该端点时,它会转换为 pscvertex.p.googleapis.com,而对于 Vertex,则会在 FQDN 中附加服务,例如 us-central1-aiplatform-pscvertex.p.googleapis.com

使用 PSC 端点更新本地 DNS 还需要重构本地应用,以调用 FDQN(例如 us-central1-aiplatform-pscvertex.p.googleapis.com),而不是原生公共端点 us-central1-aiplatform.googleapis.com

可以配置为使用自定义端点的客户端可以使用 p.googleapis.com DNS 名称向端点发送请求。

如需了解如何将客户端配置为使用自定义端点,请参阅客户端或客户端库的文档。例如:

  • Python:您可以在 google-api-core 软件包中的客户端选项类中配置 API 端点。
  • Go:您可以在 api 软件包中的客户端选项软件包中配置 WithEndpoint。
  • gcloud: You can configure api_endpoint_overrides

选择“+”,打开新的 Cloud Shell 终端。新标签页打开后,更新项目名称变量。

从 Cloud Shell。

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

在新 Cloud Shell 中使用 IAP 登录 private-client,然后对 Vertex 网域 us-central1-aiplatform.googleapis.com 执行 dig 命令,以验证与 Vertex API 的连接

从 Cloud Shell 登录到专用客户端操作系统实例。

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

执行 dig。

dig us-central1-aiplatform.googleapis.com

示例,请注意基于 DNS 响应的公共 IP。

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

使用 sudo VI 编辑器或 nano 更新专用客户端实例 /etc/hosts,以创建指向 PSC 端点 100.100.10.10 的 Vertex AI FQDN us-central1-aiplatform.googleapis.com 记录,无需进一步更改。

示例:

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

从专用客户端操作系统,对 Vertex API 端点执行 PING 操作。

ping us-central1-aiplatform.googleapis.com

例如,PING 返回 PSC 端点 IP,但不会收到任何回复。

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

在专用客户端操作系统中,执行 tcpdump 以验证在对在线预测执行 curl 时,DNS 解析和 IP 数据路径是否指向 PSC 端点。

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

选择“+”打开第四个 Cloud Shell 终端。新标签页打开后,更新项目名称变量。

在 Cloud Shell 中,更新项目名称变量。

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

在 Cloud Shell 4 中,通过 SSH 连接到 private-client 实例。

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

在下一部分中,您将使用 sudo VI 编辑器或 nano 创建一个 instances.json 文件,并插入用于从已部署的模型中获取预测结果的数据字符串。

在专用客户端操作系统中,使用以下数据字符串创建 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:$ 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:$

在专用客户端操作系统中,创建以下变量:

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

示例:

ENDPOINT_ID="3328226095324463104"

在 Cloud Shell 4 中的专用客户端操作系统中,执行 curl 以从模型获取响应。

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. 验证 - 对 Vertex API 的专用访问

在 Cloud Shell 4 中的专用客户端操作系统中,请注意,PSC 端点 IP (100.100.10.10) 已用于访问 Vertex API。

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

在 Cloud Shell 3 中的 TCPDUMP 终端中,我们可以验证是否未观察到对 us-central1-aiplatform.googleapis.com 的 DNS 查找,因为 /etc/host 文件具有优先权,但数据路径中使用了 PSC IP 地址 100.100.10.10。

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

您已成功验证通过公共端点经由互联网连接到在线预测,以及通过使用混合网络组建和管理和 Private Service Connect (googleapis) 以私密方式连接到在线预测。退出操作系统,返回到 Cloud Shell 提示。

20. 清理

从 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

删除 Vertex 组件

如需删除容器映像,请前往 Artifact Registry,选择您创建的制品库,然后选择删除

616a3108bc2e48c8.png

如需删除存储分区,请使用 Cloud 控制台中的导航菜单,浏览到“存储空间”,选择您的存储分区,然后点击删除

eddd1f9fdfaede8.png

从端点取消部署模型。依次前往 Vertex AI → 在线预测 → 选择 diamonds-cpr_endpoint → 从端点取消部署模型 → 取消部署

bc95f092d21d4698.png

删除模型。依次前往 Vertex AI → Model Registry → 删除模型

ec4afff091e11606.png

删除在线预测端点。依次前往 VertexAI → 在线预测 → 选择 diamonds-cpr_endpoint → 删除端点

7453760299bdfb9a.png

21. 恭喜

恭喜!您已成功配置并验证了以下连接:使用互联网以原生方式连接到在线预测,以及使用 Private Service Connect 和混合网络以私密方式连接到在线预测。

您创建了 nat-client 和 private-client,并使用 TCPDUMP 验证了用于访问 Vertex API 的 IP 地址。此外,您还了解了 Private Service Connect (googleapis),以及如何利用客户 PSC 端点来隔离本地应用和多云应用。

Cosmopup 认为教程很棒!

e6d3675ca7c6911f.jpeg

后续操作

查看下列教程…

深入阅读和视频

参考文档