通过端点访问区域性 Google API

本文档介绍如何使用 Private Service Connect 端点来连接到受支持的 Google API 的区域端点

如需了解其他 Private Service Connect 配置,请参阅 Private Service Connect

角色

如需获得创建区域 Private Service Connect 端点所需的权限,请让管理员在 VPC 网络上授予您以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

准备工作

  1. Install the Google Cloud CLI, then initialize it by running the following command:

    $ gcloud init

  2. Enable the Compute Engine, Network Connectivity Center, Cloud DNS, and Service Directory APIs.

    Enable the APIs

  3. 使用 Google Cloud 控制台中的 API 和服务页面启用您想通过 Private Service Connect 端点访问的 Google API。Private Service Connect 不会自动启用任何 API。

  4. 确保出站流量防火墙规则允许流量流向该端点。VPC 网络的默认防火墙配置允许此流量,因为它包含隐含的允许出站流量规则。确认您未创建优先级更高的出站流量规则来阻止流量。

  5. 请阅读限制

创建区域性 Private Service Connect 端点

您可以创建区域性 Private Service Connect 端点,以便向目标 Google API 的区域端点发送请求。

如需查看支持的区域端点列表,请参阅区域服务端点

区域端点主机名有两种形式:

  • 公共主机名:SERVICE.REGION.rep.DOMAIN
  • 专用主机名:SERVICE.REGION.p.rep.DOMAIN

    专用主机名在 REGIONrep 之间添加一个 p 子网域。

在配置目标 Google API 时,您需要指定专用形式的主机名,例如 spanner.me-central2.p.rep.googleapis.com。创建端点后,使用相同的专用区域端点主机名为端点创建专用 DNS 记录

虽然您可以使用任何名称配置 Private Service Connect 端点,但为了便于维护,我们建议使用目标 Google API 的服务名称,以使 DNS 名称与端点名称匹配。例如,如果端点的目标是 spanner.me-central2.p.rep.googleapis.com,请使用 spanner 作为端点名称。

gcloud

使用 gcloud network-connectivity regional-endpoints create 命令

gcloud network-connectivity regional-endpoints create ENDPOINT_NAME \
    --region=REGION \
    --network=NETWORK_URI \
    --subnetwork=SUBNET_URI \
    --target-google-api=REP_NAME

如果您想让其他区域的资源可以访问端点,请添加 --enable-global-access 标志。

替换以下内容:

  • ENDPOINT_NAME:端点的名称。

  • REGION:要在其中创建端点的区域。

  • NETWORK_URI:端点的 VPC 网络的 URI:projects/PROJECT_ID/global/networks/NETWORK_NAME

  • SUBNET_URI:您要将端点连接到的子网的 URI:projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME

  • REP_NAME:您要连接到的区域服务端点的名称。例如 spanner.me-central2.p.rep.googleapis.com

列出端点

您可以列出所有已配置的端点。

控制台

  1. 在 Google Cloud 控制台中,转到 Private Service Connect 页面。

    转到 Private Service Connect

  2. 点击已连接的端点标签页。

    系统会显示所有端点,包括具有区域端点目标的端点。

gcloud

使用 gcloud network-connectivity regional-endpoints list 命令

gcloud network-connectivity regional-endpoints list \
    --region=REGION

REGION 替换为您要列出的端点的区域。

验证端点是否正常运行

在配置了端点的 VPC 网络和区域中创建虚拟机 (VM) 实例。在虚拟机上运行以下命令,验证 Private Service Connect 端点是否正常工作。端点不会响应 ping (ICMP) 请求。

curl --connect-to SERVICE.REGION.p.rep.DOMAIN:443:ENDPOINT_IP:443 \
'SERVICE.REGION.p.rep.DOMAIN/PATH'

替换以下内容:

  • SERVICE:您的端点指向的服务。例如 spannerlogging
  • REGION:端点的区域。
  • DOMAIN:服务的网域。例如 googleapis.com
  • ENDPOINT_IP:端点的 IP 地址。
  • PATH:此服务所提供的资源的路径。例如,许多服务提供路径为 $discovery/rest?version=v1 的发现文档。

以下示例请求测试 IP 地址为 192.168.1.100 的端点是否可以从 me-central2 中的区域端点请求 Cloud Spanner API 发现文档。

curl --connect-to spanner.me-central2.p.rep.googleapis.com:443:192.168.1.100:443 \
'https://spanner.me-central2.p.rep.googleapis.com/$discovery/rest?version=v1'

为端点创建专用 DNS 条目

您必须按照 SERVICE.REGION.p.rep.DOMAIN 格式为端点创建 DNS 条目。您可以使用 Cloud DNS 创建 DNS 条目。

  1. 创建专用 DNS 区域,其格式为:REGION.p.rep.DOMAIN

    例如,如果要使用区域 me-central2googleapis.com 网域内的区域端点,请创建名为 me-central2.p.rep.googleapis.com 的专用 DNS 区域。

  2. 创建 DNS 记录,它指向分配给该端点的 IP 地址。主机名必须与服务名称 SERVICE 匹配。例如,spannerlogging 是服务名称。

例如,如果端点配置了目标 spanner.me-central2.p.rep.googleapis.com,您需要创建名为 me-central2.p.rep.googleapis.com 的专用 DNS 区域以及指向端点 IP 地址的名为 spanner 的记录。该端点的完全限定域名为 spanner.me-central2.p.rep.googleapis.com

将客户端配置为使用专用端点名称

您必须将客户端配置为使用专用 DNS 名称(而不是公共 DNS 名称)。如需了解如何将客户端配置为使用自定义端点,请参阅客户端或客户端库的文档。例如:

  • Python:您可以在客户端选项中配置 api_endpoint

  • Go:您可以在 ClientOptions 中配置 WithEndpoint

  • .NET:您可以在客户端的构建器类中配置 Endpoint

  • gcloud:您可以在 gcloud CLI 中配置 api_endpoint_overrides

获取有关端点的详细信息

您可以查看端点的配置详细信息。

gcloud

使用 gcloud network-connectivity regional-endpoints describe 命令

gcloud network-connectivity regional-endpoints describe \
    ENDPOINT_NAME --region=REGION

替换以下内容:

  • ENDPOINT_NAME:端点的名称。
  • REGION:端点的区域。

删除端点

您可以删除端点。

gcloud

使用 gcloud network-connectivity regional-endpoints delete 命令

gcloud network-connectivity regional-endpoints delete \
    ENDPOINT_NAME --region=REGION

替换以下内容:

  • ENDPOINT_NAME:端点的名称。
  • REGION:端点的区域。

从混合网络访问端点

通过 Cloud Interconnect 的 VLAN 连接或 Cloud VPN 隧道与 Google Cloud 相连接的网络中的客户端可以访问 Private Service Connect 端点。

  • VLAN 连接或 Cloud VPN 隧道必须在与端点相同的 VPC 网络(或共享 VPC 网络)中终结。对等互连的 VPC 网络中的客户端无法访问端点。

  • 如果配置了全球访问权限,来自 VLAN 连接或 Cloud VPN 隧道的客户端流量可以到达另一个区域的端点。

  • 对于 VLAN 连接,Dataplane v1 和 Dataplane v2 均受支持。如需详细了解 Dataplane 版本,请参阅 Dataplane v2

您必须在其他网络中配置系统,以便它们可以对您的专用 DNS 区域进行查询。

如果使用 Cloud DNS 实现了专用 DNS 区域,请完成以下步骤:

  • 在您的其他网络连接到的 VPC 网络中创建入站服务器政策

  • 在您的 VLAN 连接或 Cloud VPN 隧道所在的区域以及您的其他网络连接到的 VPC 网络中,确定入站转发器入口点

  • 在其他网络中配置系统和 DNS 域名服务器,将端点的 DNS 名称转发到与连接到 VPC 网络的 VLAN 连接或 Cloud VPN 隧道位于同一区域的入站转发器入口点。