设置从 Vertex AI 到其他网络的连接

本文档首先概述了用于扩展通过专用服务访问通道部署的 Vertex AI 服务覆盖范围的选项。

接下来,我们将简要讨论将服务部署到 Private Service Connect 端点的动机,以防它更适合您的需求。

由于专用服务访问通道会在与您的网络对等互连的托管式网络中托管 Vertex AI 服务,因此在阅读本文档的其余部分之前,请确保您已熟悉 VPC 对等互连中的材料。

默认情况下,对等互连配置仅允许对等互连的 Vertex AI 网络访问本地子网中的端点。导出自定义路由使提供方网络可以访问您的网络具有通向其的静态或动态路由的其他网络。

由于不支持传递性对等互连,因此即使启用了“导出自定义路由”,来自 Vertex AI 的连接也无法访问直接对等互连到您的网络的其他网络中的端点。在下图所示的示例中,数据包可以遍历对等互连连接 #1,但不能遍历对等互连连接 #2。

使用传递性对等互连

如要使 Vertex AI 能够访问用户网络 2,请将对等互连连接 #2 替换为 VPN #2,如下图所示。

不使用传递性对等互连

在对等互连连接 #1 中启用自定义路由允许来自 Vertex AI 网络的 IP 数据包到达用户网络 #2。

如要允许来自用户网络 2 的响应数据包被路由回 Vertex AI 网络,则返回路由还需要存在于用户网络 2 的路由表中。VPN 路由是使用 Cloud Router 路由器上的边界网关协议 (BGP) 交换的,我们可以在用户 #1 中自定义 BGP 配置以向其对等用户网络 #2 通告 Vertex AI 网络范围 10.1.0.0/16 的路由。

请注意,您可以修改 VPN #1 BGP 配置的两端,以允许本地网络和 Vertex AI 网络获取通向对方的路由。由于没有尝试从 Vertex AI 网络传输转发路径数据包,也没有响应数据包通过任何单个网络的顺序对等互连连接,因此这些转发尝试都没有被明确阻止。

设置从 Vertex AI 到互联网的连接

如果在启动工作负载时未指定网络,则工作负载将在单独的 Google 管理的提供方项目中运行。

如果指定了网络,则工作负载将在与使用方项目对等互连的提供方项目中运行。

默认情况下,Vertex AI 网络有自己的互联网路由,且提供方网络有自己的默认互联网路由。

如需强制通过您的网络路由来自提供方网络的出站连接,您可以为对等互连启用 VPC Service Controls。 请注意,这是与 VPC Service Controls 不同的配置。

为对等互连启用 VPC Service Controls 会导致 Vertex AI 网络中发生以下变化:

  • 删除默认的互联网路由。
  • 为目的地 199.36.153.4/30 创建路由,并使用默认互联网网关下一个跃点。
  • *.googleapis.com 创建托管式专用 Cloud DNS 区域,其中包含适当的记录,用于将主机名映射到这四个地址之一。
  • 授权该区域供 servicenetworking VPC 网络使用。

完成此更改后,您可以从您的网络中导出默认路由,以确保通过 VPC 网络路由到互联网的出站连接。此更改还支持您将任何需要的政策应用于 Vertex AI 的出站流量。

您可以运行以下命令,查询对等互连的 VPC Service Controls 的状态;

gcloud services vpc-peerings get-vpc-service-controls \
  --network YOUR_NETWORK

如果配置已启用,则返回 enabled: true;如果配置已停用,则返回空列表 ({})。

使用 VPC Service Controls

如果为工作负载指定了网络并且启用了 VPC Service Controls,则工作负载将在与使用方项目对等互连并受到相同政策约束的提供方网络中作为使用方网络运行。

如果这些政策阻止出站流量,则工作负载同样无法访问互联网。在这种情况下,您必须按照上一部分中的步骤强制来自工作负载的出站流量通过 VPC 网络中的 NAT 实例。

使用代理设置从 Vertex AI 进行连接

另一种控制 Vertex AI 出站 IP 的模式是,强制从工作负载发出的出站连接通过您控制的网络代理。这还允许检查出站连接以确保合规性。

不过,使用第三方代理会迫使用户管理代理的证书以解决身份验证投诉。此外,这些代理可能不会提议与 Vertex AI SDK 和 API 所期望的相同密码套件列表。

Google Cloud 现在提供 Secure Web Proxy 来实现这种模式。现在,您可以按照部署 Secure Web Proxy 实例快速入门指南操作,并调整您的工作负载以使用该实例进行出站连接。这些连接似乎源自代理的来源 IP 地址。

如果组件映像中尚未安装 KFP 库,则流水线会在运行任何可能已指定代理的代码之前尝试安装该库

如果流水线依赖代理从互联网安装软件包,则此尝试将失败,并且您可能会看到如下错误:

Could not find a version that satisfies the requirement kfp==2.7.0

在这种情况下,如果您在运行代码之前无法安装 KFP,则必须使用已安装 KFP 的映像。

您可以将 KFP 添加到任何基础映像,并将其推送到您的仓库。

以下 Dockerfile 示例将 KFP 添加到 python:3.8 基础映像。

FROM python:3.8
RUN pip install kfp==2.7.0

然后,您可以将流水线 @component 配置为使用此映像:

@component(base_image="$PATH_TO_YOUR_REPOSITORY:YOUR_IMAGE")

流水线组件运行后,您的代码可以通过代理自由安装其他软件包。以下示例使用 https://10.10.10.10:443 上的代理安装 numpy

import subprocess
subprocess.call(['pip', 'install', '--proxy', 'https://10.10.10.10:443', 'numpy'])`

为 API 访问设置许可名单

对于 Vertex AI 工作负载与 Google API 之间的事务,您必须允许从工作负载访问 Google API 使用的 IP 范围。为此,您可以运行提供的脚本以返回默认网域的 IP 地址

使用 Private Service Connect 提供混合连接

使用专用服务访问通道部署 Vertex AI 服务存在一些限制。

  • 您可能需要为每个工作负载预留大量的专用 IP 地址池,同时还要避免与 VPC 地址分配冲突。
    • 即使初始配置正确,并行运行多个工作负载仍可能会导致 RANGES_EXHAUSTED
  • 网络部署和问题排查的复杂性:
    • 由于不支持传递性对等互连,因此您需要部署复杂的解决方法,才能在与您的 VPC 网络对等互连的不同网络之间授予连接权限。
    • 提供方环境中的路由表状态并不立即显而易见。由于您无法访问租户项目,因此在不进行广泛测试的情况下,通常很难确定 Vertex AI 工作负载实际可以实现哪些目标。

另一种模式是将这些服务部署到 Private Service Connect 端点

  • 该服务会占用您 VPC 网络中的单个 IP 地址,从而让您能够保留专用地址空间供自己使用。
  • 由于 Vertex AI 服务 IP 位于您自己的网络中,因此您可以更轻松地创建并运行连接测试,以评估该 IP 地址与您环境中其他位置之间的可达性。