使用 Private Service Connect 从本地访问 Vertex AI 上的生成式 AI


本地主机可以通过两种方式访问 Vertex AI 上的生成式 AI:公共互联网,或通过 Cloud VPN 或 Cloud Interconnect 使用 Private Service Connect (PSC) 的混合网络架构(以私密方式访问)。这两个选项都提供 SSL/TLS 加密。但是,专用选项可提供更好的性能,因此建议用于关键应用。

在本教程中,您将使用高可用性 VPN (HA VPN) 通过 Cloud NAT 公开访问 Vertex AI 上的生成式 AI,在可用作多云和本地专用连接基础的两个 Virtual Private Cloud (VPC) 网络之间以私密方式访问 Vertex AI 上的生成式 AI。

本教程适用于熟悉 Vertex AI、VPC、Google Cloud 控制台和 Cloud Shell 的企业网络管理员、数据科学家和研究人员。熟悉 Vertex AI 上的生成式 AI 会很有帮助,但不强制要求。

使用 Private Service Connect 访问 Vertex AI 上的生成式 AI 的架构图。

目标

  • 创建两个 VPC 网络,如上图所示:
    • 一个 (onprem-vpc) 表示一个本地网络。
    • 另一个 (vertex-networking-vpc) 用于访问 Vertex AI 上的生成式 AI 的 REST API。
  • 部署高可用性 VPN 网关、Cloud VPN 隧道和 Cloud Router 路由器,以连接 vertex-networking-vpconprem-vpc
  • 创建 Private Service Connect (PSC) 端点,以将请求转发到 GenAI REST API。
  • vertex-networking-vpc 中配置 Cloud Router 路由器自定义路由通告,以向 onprem-vpc 通告 Private Service Connect 端点的路由。
  • onprem-vpc 中创建 Compute Engine 虚拟机实例,以表示通过高可用性 VPN 向 GenAI REST API 发送请求的客户端应用。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

准备工作

  1. 在 Google Cloud Console 中,转到项目选择器页面。

    转到“项目选择器”

  2. 选择或创建 Google Cloud 项目。

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 如果您不是项目所有者,则项目所有者必须为您授予 roles/resourcemanager.projectIamAdmin IAM 角色。您需要具有此角色,才能为您自己和服务账号授予 IAM 角色和权限。
  5. 打开 Cloud Shell 以执行本教程中列出的命令。Cloud Shell 是 Google Cloud 的交互式 Shell 环境,可让您通过网络浏览器管理项目和资源。
  6. 在 Cloud Shell 中,将当前项目设置为您的 Google Cloud 项目 ID,并将同一项目 ID 存储在 projectid shell 变量中:
      projectid="PROJECT_ID"
      gcloud config set project ${projectid}
    PROJECT_ID 替换为您的项目 ID。如有必要,您可以在 Google Cloud 控制台中查找项目 ID。如需了解详情,请参阅查找项目 ID
  7. 向您的 Google 账号授予角色。对以下每个 IAM 角色运行以下命令一次: roles/compute.instanceAdmin.v1、roles/compute.networkAdmin、roles/compute.securityAdmin、roles/dns.admin、roles/iap.tunnelResourceAccessor、roles/iam.serviceAccountCreator、roles/iam.serviceAccountUser、roles/iam.serviceAccountDeleter、roles/resourcemanager.projectIamAdmin、roles/servicedirectory.editor、roles/servicemanagement.quotaAdmin、roles/aiplatform.user

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:EMAIL_ADDRESS" --role=ROLE
    • PROJECT_ID 替换为您的项目 ID。
    • EMAIL_ADDRESS 替换为您的电子邮件地址。
    • ROLE 替换为每个角色。
  8. Enable the DNS、IAM、Compute Engine、Service Usage 和 Vertex AI APIs:

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

创建两个 VPC 网络:vertex-networking-vpconprem-vpc

在本部分中,您将创建两个 VPC 网络:一个是用于访问 Vertex AI 上的生成式 AI(也称为 GenAI)API 的主要网络,另一个用于模拟本地网络。

创建 VPC 网络

  1. 创建用于访问 GenAI API 的 VPC 网络 (vertex-networking-vpc):

    gcloud compute networks create vertex-networking-vpc --subnet-mode custom
    
  2. 创建用于模拟本地网络的 VPC 网络 (onprem-vpc):

    gcloud compute networks create onprem-vpc --subnet-mode custom
    
  3. onprem-vpc 网络中,创建一个名为 onprem-vpc-subnet1 的子网,其主要 IPv4 范围为 172.16.10.0/24

    gcloud compute networks subnets create onprem-vpc-subnet1 \
       --range 172.16.10.0/24 \
       --network onprem-vpc \
       --region us-central1
    
  4. 在 Google Cloud 控制台中,前往 VPC 网络页面的当前项目中的网络标签页。

    前往 VPC 网络

  5. 在 VPC 网络列表中,验证是否已创建 vertex-networking-vpconprem-vpc 这两个网络。

  6. VPC 网络页面中,点击当前项目中的子网标签页。

  7. 在 VPC 子网列表中,验证是否已在 onprem-vpc 网络中创建 onprem-vpc-subnet1 子网。

配置混合连接

在本部分中,您将创建两个相互连接的高可用性 VPN 网关。一个位于 vertex-networking-vpc VPC 网络中。另一个位于 onprem-vpc VPC 网络中。每个网关包含一个 Cloud Router 路由器和一对 VPN 隧道。

创建高可用性 VPN 网关

  1. 在 Cloud Shell 中,为 vertex-networking-vpc VPC 网络创建高可用性 VPN 网关:

    gcloud compute vpn-gateways create vertex-networking-vpn-gw1 \
       --network vertex-networking-vpc \
       --region us-central1
    
  2. onprem-vpc VPC 网络创建高可用性 VPN 网关:

    gcloud compute vpn-gateways create onprem-vpn-gw1 \
       --network onprem-vpc \
       --region us-central1
    
  3. 在 Google Cloud 控制台中,前往 VPN 页面中的 Cloud VPN 网关标签页。

    转到 VPN

  4. 在 VPN 网关列表中,验证是否已创建两个网关(vertex-networking-vpn-gw1onprem-vpn-gw1),并且每个网关有两个 IP 地址。

创建 Cloud Router 路由器

  1. 在 Cloud Shell 中,为 vertex-networking-vpc VPC 网络创建一个 Cloud Router 路由器:

    gcloud compute routers create vertex-networking-vpc-router1 \
       --region us-central1\
       --network vertex-networking-vpc \
       --asn 65001
    
  2. onprem-vpc VPC 网络创建一个 Cloud Router 路由器:

    gcloud compute routers create onprem-vpc-router1 \
       --region us-central1\
       --network onprem-vpc\
       --asn 65002
    

将 Cloud NAT 网关添加到 onprem-vpc VPC 网络

在此步骤中,您将向 onprem-vpc VPC 网络的 Cloud Router 路由器添加 Cloud NAT 网关。Cloud NAT 网关为没有外部 IP 地址的 Compute Engine 虚拟机 (VM) 实例提供传出连接。

  1. 在 Cloud Shell 中,将 Cloud NAT 网关添加到 onprem-vpc-router1 Cloud Router 路由器:

    gcloud compute routers nats create us-central-cloudnat-onprem \
       --router=onprem-vpc-router1 \
       --auto-allocate-nat-external-ips \
       --nat-all-subnet-ip-ranges \
       --region us-central1
    
  2. 在 Google Cloud 控制台中,前往 Cloud Router 路由器页面。

    前往“Cloud Router 路由器”

  3. 在 Cloud Router 路由器列表中,验证是否已创建 vertex-networking-vpc-router1onprem-vpc-router1。您可能需要刷新 Google Cloud 控制台浏览器标签页才能查看新值。

  4. 在 Cloud Router 路由器列表中,点击 onprem-vpc-router1

  5. 路由器详情页面中,验证是否已创建 us-central-cloudnat-onprem Cloud NAT 网关。

创建 VPN 隧道

  1. vertex-networking-vpc 网络中,创建一个名为 vertex-networking-vpc-tunnel0 的 VPN 隧道:

    gcloud compute vpn-tunnels create vertex-networking-vpc-tunnel0 \
       --peer-gcp-gateway onprem-vpn-gw1 \
       --region us-central1 \
       --ike-version 2 \
       --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
       --router vertex-networking-vpc-router1 \
       --vpn-gateway vertex-networking-vpn-gw1 \
       --interface 0
    
  2. vertex-networking-vpc 网络中,创建一个名为 vertex-networking-vpc-tunnel1 的 VPN 隧道:

    gcloud compute vpn-tunnels create vertex-networking-vpc-tunnel1 \
       --peer-gcp-gateway onprem-vpn-gw1 \
       --region us-central1 \
       --ike-version 2 \
       --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
       --router vertex-networking-vpc-router1 \
       --vpn-gateway vertex-networking-vpn-gw1 \
       --interface 1
    
  3. onprem-vpc 网络中,创建一个名为 onprem-vpc-tunnel0 的 VPN 隧道:

    gcloud compute vpn-tunnels create onprem-vpc-tunnel0 \
       --peer-gcp-gateway vertex-networking-vpn-gw1 \
       --region us-central1\
       --ike-version 2 \
       --shared-secret [ZzTLxKL8fmRykwNDfCvEFIjmlYLhMucH] \
       --router onprem-vpc-router1 \
       --vpn-gateway onprem-vpn-gw1 \
       --interface 0
    
  4. onprem-vpc 网络中,创建一个名为 onprem-vpc-tunnel1 的 VPN 隧道:

    gcloud compute vpn-tunnels create onprem-vpc-tunnel1 \
       --peer-gcp-gateway vertex-networking-vpn-gw1 \
       --region us-central1\
       --ike-version 2 \
       --shared-secret [bcyPaboPl8fSkXRmvONGJzWTrc6tRqY5] \
       --router onprem-vpc-router1 \
       --vpn-gateway onprem-vpn-gw1 \
       --interface 1
    
  5. 在 Google Cloud 控制台中,转到 VPN 页面。

    转到 VPN

  6. 在 VPN 隧道列表中,验证是否已创建这四个 VPN 隧道。

建立 BGP 会话

Cloud Router 路由器使用边界网关协议 (BGP) 在 VPC 网络(在本例中为 vertex-networking-vpc)和本地网络(由 onprem-vpc 表示)之间交换路由。在 Cloud Router 路由器上,为本地路由器配置接口和 BGP 对等端。此接口和 BGP 对等配置共同构成了 BGP 会话。在本部分中,您将分别为 vertex-networking-vpconprem-vpc 创建两个 BGP 会话。

在路由器之间配置接口和 BGP 对等端后,它们会自动开始交换路由。

vertex-networking-vpc 建立 BGP 会话

  1. 在 Cloud Shell 中,在 vertex-networking-vpc 网络中为 vertex-networking-vpc-tunnel0 创建一个 BGP 接口:

    gcloud compute routers add-interface vertex-networking-vpc-router1 \
       --interface-name if-tunnel0-to-onprem \
       --ip-address 169.254.0.1 \
       --mask-length 30 \
       --vpn-tunnel vertex-networking-vpc-tunnel0 \
       --region us-central1
    
  2. vertex-networking-vpc 网络中,为 bgp-onprem-tunnel0 创建一个 BGP 对等方:

    gcloud compute routers add-bgp-peer vertex-networking-vpc-router1 \
       --peer-name bgp-onprem-tunnel0 \
       --interface if-tunnel0-to-onprem \
       --peer-ip-address 169.254.0.2 \
       --peer-asn 65002 \
       --region us-central1
    
  3. vertex-networking-vpc 网络中,为 vertex-networking-vpc-tunnel1 创建一个 BGP 接口:

    gcloud compute routers add-interface vertex-networking-vpc-router1 \
       --interface-name if-tunnel1-to-onprem \
       --ip-address 169.254.1.1 \
       --mask-length 30 \
       --vpn-tunnel vertex-networking-vpc-tunnel1 \
       --region us-central1
    
  4. vertex-networking-vpc 网络中,为 bgp-onprem-tunnel1 创建一个 BGP 对等方:

    gcloud compute routers add-bgp-peer vertex-networking-vpc-router1 \
       --peer-name bgp-onprem-tunnel1 \
       --interface if-tunnel1-to-onprem \
       --peer-ip-address 169.254.1.2 \
       --peer-asn 65002 \
       --region us-central1
    

onprem-vpc 建立 BGP 会话

  1. onprem-vpc 网络中,为 onprem-vpc-tunnel0 创建一个 BGP 接口:

    gcloud compute routers add-interface onprem-vpc-router1 \
       --interface-name if-tunnel0-to-vertex-networking-vpc \
       --ip-address 169.254.0.2 \
       --mask-length 30 \
       --vpn-tunnel onprem-vpc-tunnel0 \
       --region us-central1
    
  2. onprem-vpc 网络中,为 bgp-vertex-networking-vpc-tunnel0 创建一个 BGP 对等方:

    gcloud compute routers add-bgp-peer onprem-vpc-router1 \
       --peer-name bgp-vertex-networking-vpc-tunnel0 \
       --interface if-tunnel0-to-vertex-networking-vpc \
       --peer-ip-address 169.254.0.1 \
       --peer-asn 65001 \
       --region us-central1
    
  3. onprem-vpc 网络中,为 onprem-vpc-tunnel1 创建一个 BGP 接口:

    gcloud compute routers add-interface onprem-vpc-router1  \
       --interface-name if-tunnel1-to-vertex-networking-vpc \
       --ip-address 169.254.1.2 \
       --mask-length 30 \
       --vpn-tunnel onprem-vpc-tunnel1 \
       --region us-central1
    
  4. onprem-vpc 网络中,为 bgp-vertex-networking-vpc-tunnel1 创建一个 BGP 对等方:

    gcloud compute routers add-bgp-peer onprem-vpc-router1 \
       --peer-name bgp-vertex-networking-vpc-tunnel1 \
       --interface if-tunnel1-to-vertex-networking-vpc \
       --peer-ip-address 169.254.1.1 \
       --peer-asn 65001 \
       --region us-central1
    

验证 BGP 会话创建

  1. 在 Google Cloud 控制台中,转到 VPN 页面。

    转到 VPN

  2. 在 VPN 隧道列表中,验证每个隧道的 BGP 会话状态列中的值是否已从 配置 BGP 会话更改为 BGP 已建立。您可能需要刷新 Google Cloud 控制台浏览器标签页才能查看新值。

创建 Private Service Connect (PSC) 端点

在本部分中,您将为 Google API 创建 Private Service Connect (PSC) 端点,供 onprem-vpc 网络中的虚拟机实例用于从 onprem-vpc 网络访问 GenAI API。

Private Service Connect (PSC) 端点onprem-vpc 网络中的内部 IP 地址,该网络中的客户端可以直接访问该地址。此端点的创建方式是部署一条转发规则,用于将与 PSC 端点的 IP 地址匹配的网络流量定向到 Google API 软件包(具体来说 all-apis 软件包)。

PSC 端点的 IP 地址 (192.168.0.1) 将在后面的步骤中作为自定义路由通告从 vertex-networking-vpc-router Cloud Router 路由器通告给 onprem-vpc 网络。

  1. 预留要分配给端点的全球内部 IP 地址:

    gcloud compute addresses create psc-googleapi-ip \
       --global \
       --purpose=PRIVATE_SERVICE_CONNECT \
       --addresses=192.168.0.1 \
       --network=vertex-networking-vpc
    
  2. 创建端点以及将端点连接到 Google API 和服务的转发规则:

    gcloud compute forwarding-rules create pscvertex \
       --global \
       --network=vertex-networking-vpc\
       --address=psc-googleapi-ip \
       --target-google-apis-bundle=all-apis
    
  3. 列出已配置的 PSC 端点并验证是否已创建 pscvertex 端点:

    gcloud compute forwarding-rules list  \
       --filter target="(all-apis OR vpc-sc)" --global
    
  4. 获取已配置的 PSC 端点的详细信息,并验证 IP 地址是否为 192.168.0.1

    gcloud compute forwarding-rules describe \
       pscvertex --global
    

vertex-networking-vpc 创建自定义路由通告

在本部分中,您将为 vertex-networking-vpc-router1vertex-networking-vpc 的 Cloud Route 路由器)创建自定义路由通告,以将 PSC 端点的 IP 地址通告给 onprem-vpc 网络。

  1. 在 Google Cloud 控制台中,前往 Cloud Router 路由器页面。

    前往“Cloud Router 路由器”

  2. 在 Cloud Router 路由器列表中,点击 vertex-networking-vpc-router1

  3. 路由器详情页面上,点击 修改

  4. 通告的路由部分,对于路由,选择创建自定义路由

  5. 选中通告向 Cloud Router 路由器公开的所有子网复选框,以继续通告 Cloud Router 路由器可用的子网。启用此选项可模拟 Cloud Router 路由器在默认通告模式下的行为。

  6. 点击添加自定义路由

  7. 对于来源,选择自定义 IP 范围

  8. IP 地址范围字段中,输入以下 IP 地址:

    192.168.0.1
    
  9. 说明字段中,输入以下文本:

    Custom route to advertise Private Service Connect endpoint IP address
    
  10. 点击完成,然后点击保存

验证 onprem-vpc 是否已获知通告的路由

  1. 在 Google Cloud 控制台中,转到路由页面。

    进入“路由”

  2. 有效路由标签页上,执行以下操作:

    1. 网络字段中,选择 onprem-vpc
    2. 区域字段中,选择 us-central1 (Iowa)
    3. 点击视图
    4. 在路由列表中,验证是否存在名称以 onprem-vpc-router1-bgp-vertex-networking-vpc-tunnel0onprem-vpc-router1-bgp-vfertex-networking-vpc-tunnel1 开头的条目,并且两者的目标 IP 范围192.168.0.1/32。(192.168.0.1 是 PSC 端点的 IP 地址。)

      如果这些条目未立即显示,请等待几分钟,然后刷新 Google Cloud 控制台浏览器标签页。

在本地网络中配置虚拟机实例

在本部分中,您将在 onprem-vpc VPC 网络中创建 Compute Engine 虚拟机实例。此虚拟机实例模拟连接到 PSC 端点并访问 GenAI API 的本地客户端。

创建用户管理的服务账号

在本教程中,您将按照 Compute Engine 和 IAM 最佳实践创建用户管理的服务账号。

  1. 在 Cloud Shell 中,运行以下命令,将 PROJECT_ID 替换为您的项目 ID:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. 创建服务账号:

    gcloud iam service-accounts create user-managed-sa
    
  3. Vertex AI User (roles/aiplatform.user) IAM 角色分配给该服务账号:

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

创建 on-prem-client 虚拟机实例

在此步骤中,您将创建虚拟机实例,该实例使用 Private Service Connect IP 地址 (192.168.0.1) 通过高可用性 VPN 访问 Google API。

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

  • 适用于您要通过 IAP 访问的所有虚拟机实例。 (在本例中只有 on-prem-client。)
  • 允许来自 IP 地址范围 35.235.240.0/20 的、通过端口 22 的 TCP 流量此范围包含 IAP 用于 TCP 转发的所有 IP 地址。
  1. 创建 on-prem-client 虚拟机实例。以下命令还会安装 tcpdumpdnsutils 软件包,其中包含之后用于验证 API 请求的 tcpdumpdig 实用程序:

    gcloud compute instances create on-prem-client \
       --zone=us-central1-a \
       --image-family=debian-11 \
       --image-project=debian-cloud \
       --subnet=onprem-vpc-subnet1 \
       --scopes=http://www.googleapis.com/auth/cloud-platform \
       --no-address \
       --shielded-secure-boot \
       --service-account=user-managed-sa@$projectid.iam.gserviceaccount.com \
       --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install tcpdump dnsutils -y"
    
  2. 创建名为 ssh-iap-on-prem-vpc 的 IAP 防火墙规则:

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

验证对 Vertex AI 上的生成式 AI 的公共互联网访问

在本部分中,您将使用 Identity-Aware Proxy 登录 on-prem-client 虚拟机实例,然后通过对公共 Vertex AI 网域 (us-central1-aiplatform.googleapis.com) 运行 dig 命令来验证与 Vertex AI API(包括 GenAI)的公共连接。

  1. 在 Cloud Shell(第一个标签页)中,运行以下命令,将 PROJECT_ID 替换为您的项目 ID:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  2. 使用 IAP 登录到 on-prem-client 虚拟机实例:

    gcloud compute ssh on-prem-client --project=$projectid --zone=us-central1-a --tunnel-through-iap
    
  3. 运行 dig 命令:

    dig us-central1-aiplatform.googleapis.com
    

    您应该会看到如下所示的 dig 输出,其中应答部分中的 IP 地址是公共 IP 地址:

    ; <<>> DiG 9.16.44-Debian <<>> us-central1.aiplatfom.googleapis.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42506
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 0, ADDITIONAL: 1
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 512
    ;; QUESTION SECTION:
    ;us-central1.aiplatfom.googleapis.com. IN A
    
    ;; ANSWER SECTION:
    us-central1.aiplatfom.googleapis.com. 300 IN A  173.194.192.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.250.152.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  172.217.219.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  209.85.146.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  209.85.147.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.250.125.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.250.136.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.250.148.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  209.85.200.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  209.85.234.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.251.171.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  108.177.112.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.250.128.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  142.251.6.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  172.217.212.95
    us-central1.aiplatfom.googleapis.com. 300 IN A  74.125.124.95
    
    ;; Query time: 8 msec
    ;; SERVER: 169.254.169.254#53(169.254.169.254)
    ;; WHEN: Wed Sep 27 04:10:16 UTC 2023
    ;; MSG SIZE  rcvd: 321
    

配置并验证对 Vertex AI 上的生成式 AI 的专用访问

在本部分中,您将配置对 Vertex AI 上的生成式 AI 的专用访问,以便在您将请求发送到公共服务端点 (us-central1-aiplatform.googleapis.com) 时,它们会改为重定向到 PSC 端点。然后,PSC 端点会转发请求。

更新 /etc/hosts 文件以指向 PSC 端点

在此步骤中,您将在 /etc/hosts 文件中添加一行,以使发送到公共服务端点 (us-central1-aiplatform.googleapis.com) 的请求重定向到 PSC 端点 (192.168.0.1)。

  1. on-prem-client 虚拟机实例(第一个标签页)中,使用文本编辑器(例如 vimnano)打开 /etc/hosts 文件:

    sudo vim /etc/hosts
    
  2. 将以下代码行添加到文件中:

    192.168.0.1 us-central1-aiplatform.googleapis.com
    

    此行会将 PSC 端点的 IP 地址 (192.168.0.1) 分配给 Vertex AI Google API (us-central1-aiplatform.googleapis.com) 的完全限定域名。

    修改后的文件应如下所示:

    127.0.0.1       localhost
    ::1             localhost ip6-localhost ip6-loopback
    ff02::1         ip6-allnodes
    ff02::2         ip6-allrouters
    
    192.168.0.1 us-central1-aiplatform.googleapis.com  # Added by you
    172.16.10.6 on-prem-client.us-central1-a.c.vertex-genai-400103.internal on-prem-client  # Added by Google
    169.254.169.254 metadata.google.internal  # Added by Google
    
  3. 按如下方式保存文件:

    • 如果您使用的是 vim,请按 Esc 键,然后输入 :wq 以保存文件并退出。
    • 如果您使用的是 nano,请输入 Control+O 并按 Enter 以保存该文件,然后输入 Control+X 以退出。
  4. 对 Vertex AI 端点执行 ping 操作,如下所示:

    ping us-central1-aiplatform.googleapis.com
    

    ping 命令应返回以下输出。192.168.0.1 是 PSC 端点 IP 地址:

    PING us-central1-aiplatform.googleapis.com (192.168.0.1) 56(84) bytes of data.
    
  5. 输入 Control+C 以退出 ping

  6. 向端点发送在线预测请求时,运行以下 tcpdump 命令以验证 DNS 解析和 IP 数据路径:

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

创建专用请求

在此步骤中,您将创建一个名为 request.json 的文本文件,其中包含您向 GenAI REST API 发送的示例 curl 请求的载荷。如需详细了解示例请求,请参阅示例请求

  1. 在第一个标签页中运行 tcpdump 命令,点击 Cloud Shell 中的 打开新的标签页,以打开新的 Cloud Shell 会话(第二个标签页)。

  2. 在新的 Cloud Shell 会话(第二个标签页)中,运行以下命令,将 PROJECT_ID 替换为您的项目 ID:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  3. 使用 IAP 登录到 on-prem-client 虚拟机实例:

    gcloud compute ssh on-prem-client --project=$projectid --zone=us-central1-a --tunnel-through-iap
    
  4. 运行以下命令,将 PROJECT_ID 替换为您的项目 ID:

    projectid=PROJECT_ID
    gcloud config set project ${projectid}
    
  5. 使用文本编辑器(例如 vimnano)创建一个名为 request.json 的新文件,其中包含以下文本:

    {
       "instances": [
          { "prompt": "Give me ten interview questions for the role of program manager."}
       ],
       "parameters": {
          "temperature": 0.2,
          "maxOutputTokens": 256,
          "topK": 40,
          "topP": 0.95
       }
    }
    
  6. 运行以下命令,向 PSC 端点发送请求,该端点会将请求转发到 GenAI API。当端点收到响应时,会将其转发回 on-prem-client 虚拟机:

    curl -X POST \
       -H "Authorization: Bearer $(gcloud auth print-access-token)" \
       -H "Content-Type: application/json; charset=utf-8" \
       -d @request.json \
       "http://us-central1-aiplatform.googleapis.com/v1/projects/$projectid/locations/us-central1/publishers/google/models/text-bison:predict"
    

    您应该会看到类似于以下示例的响应:

    {
       "predictions": [
          {
          "content": " 1. **What is your experience in managing programs?**\n2. **What are your strengths and weaknesses as a program manager?**\n3. **What is your approach to managing a program?**\n4. **How do you handle risks and challenges in a program?**\n5. **How do you communicate with stakeholders in a program?**\n6. **How do you measure the success of a program?**\n7. **What is your experience in working with cross-functional teams?**\n8. **What is your experience in managing budgets and resources?**\n9. **What is your experience in managing change in a program?**\n10. **What are your career goals as a program manager?**",
          "citationMetadata": {
             "citations": []
          },
          "safetyAttributes": {
             "categories": [
             "Finance",
             "Health"
             ],
             "blocked": false,
             "scores": [
                0.6,
                0.1
             ]
          }
          }
       ],
       "metadata": {
          "tokenMetadata": {
             "outputTokenCount": {
                "totalBillableCharacters": 505,
                "totalTokens": 153
             },
             "inputTokenCount": {
                "totalBillableCharacters": 54,
                "totalTokens": 12
             }
          }
       }
    }
    
  7. 在第一个标签页中,验证是否已使用 PSC 端点 IP 地址 (192.168.0.1) 从 on-prem-client 虚拟机实例(子网 172.16.10.0/28)访问 Vertex AI API。

    从 Cloud Shell 第一个标签页中的 tcpdump 终端,您可以看到不需要对 us-central1-aiplatform.googleapis.com 进行 DNS 查找,因为已添加到 /etc/hosts 文件的行优先级更高,并且数据路径中使用了 PSC 端点的 IP 地址 (192.168.0.1)。

    您应该会看到如下所示的 tcpdump 输出:

    23:48:49.938797 ens4  Out IP 172.16.10.9.38578 > 192.168.0.1.443: Flags [P.], seq 2054:2093, ack 6264, win 501, options [nop,nop,TS val 2943864305 ecr 2340789954], length 39
    23:48:49.938947 ens4  Out IP 172.16.10.9.38578 > 192.168.0.1.443: Flags [P.], seq 2093:2117, ack 6264, win 501, options [nop,nop,TS val 2943864305 ecr 2340789954], length 24
    23:48:49.939839 ens4  Out IP 172.16.10.9.38578 > 192.168.0.1.443: Flags [F.], seq 2117, ack 6264, win 501, options [nop,nop,TS val 2943864306 ecr 2340789954], length 0
    23:48:49.940292 ens4  In  IP 192.168.0.1.443 > 172.16.10.9.38578: Flags [.], ack 2117, win 272, options [nop,nop,TS val 2340789958 ecr 2943864305], length 0
    23:48:49.940437 ens4  In  IP 192.168.0.1.443 > 172.16.10.9.38578: Flags [F.], seq 6264, ack 2117, win 272, options [nop,nop,TS val 2340789958 ecr 2943864305], length 0
    23:48:49.940442 ens4  Out IP 172.16.10.9.38578 > 192.168.0.1.443: Flags [.], ack 6265, win 501, options [nop,nop,TS val 2943864307 ecr 2340789958], length 0
    23:48:49.941193 ens4  In  IP 192.168.0.1.443 > 172.16.10.9.38578: Flags [.], ack 2118, win 272, options [nop,nop,TS val 2340789959 ecr 2943864306], length 0
    

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

您可以通过在 Cloud Shell 中运行以下命令来删除项目中的各个资源:

   projectid=PROJECT_ID
   gcloud config set project ${projectid}
   gcloud compute firewall-rules delete ssh-iap-on-prem-vpc --quiet
   gcloud compute instances delete on-prem-client --zone=us-central1-a --quiet
   gcloud iam service-accounts delete user-managed-sa@$projectid.iam.gserviceaccount.com --quiet
   gcloud compute forwarding-rules delete pscvertex --global --quiet
   gcloud compute addresses delete psc-googleapi-ip --global --quiet
   gcloud compute vpn-tunnels delete vertex-networking-vpc-tunnel0 vertex-networking-vpc-tunnel1 onprem-vpc-tunnel0 onprem-vpc-tunnel1 --region=us-central1 --quiet
   gcloud compute routers nats delete us-central-cloudnat-onprem --router=onprem-vpc-router1 --region=us-central1 --quiet
   gcloud compute routers delete vertex-networking-vpc-router1 onprem-vpc-router1 --region=us-central1 --quiet
   gcloud compute vpn-gateways delete vertex-networking-vpn-gw1 onprem-vpn-gw1 --region=us-central1 --quiet
   gcloud compute networks subnets delete onprem-vpc-subnet1 --region=us-central1 --quiet
   gcloud compute networks delete onprem-vpc --quiet
   gcloud compute networks delete vertex-networking-vpc --quiet

后续步骤