使用 Private Service Connect 访问代管式服务

借助 Private Service Connect,您可以使用具有您的 VPC 网络中内部 IP 地址的端点连接到服务提供方。

本文档介绍如何使用 Private Service Connect 端点连接到位于另一个 VPC 网络中的受支持服务。您可以连接到自己的服务,或其他服务提供方提供的服务。如需了解详情,请参阅发布服务

角色

以下 IAM 角色提供了执行本指南中的任务所需的权限。

任务 角色
创建 Private Service Connect 端点 Compute Network Admin (roles/compute.networkAdmin)

准备工作

  • 您必须在项目中启用 Compute Engine API

  • 您必须在项目中启用 Service Directory API

  • 您必须在项目中启用 Cloud DNS API

  • 出站防火墙规则必须允许传入 Private Service Connect 端点的内部 IP 地址的流量。隐式允许出站防火墙规则允许发送到任何目标 IP 地址的出站流量。

    如果您在 VPC 网络中创建了任何出站流量拒绝防火墙规则,或者您创建的分层防火墙政策修改了隐式允许的出站流量行为,则对于端点的访问可能会受到影响。创建特定的出站流量允许防火墙规则或政策,以允许流量发送到服务端点的内部 IP 地址目的地。

  • 您必须具有该服务的服务连接的 URI。例如 projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

限制

  • 无法从对等互连的 VPC 网络访问 Private Service Connect 端点。

  • 您不能从使用 Cloud Interconnect 连接 (VLAN) 连接到 VPC 的本地环境向用于访问另一个 VPC 网络中的服务的 Private Service Connect 端点发送请求。

    如需了解如何从使用 Cloud VPN 连接的本地环境访问 Private Service Connect 端点,请参阅从本地主机使用 Private Service Connect

  • 如需了解问题和解决方法,请参阅已知问题

创建 Private Service Connect 端点

Private Service Connect 端点使用 Private Service Connect 转发规则连接到另一个 VPC 网络中的服务。为了访问其他 VPC 网络中的服务,每个转发规则都会计入 Private Service Connect 转发规则的针对每个项目的配额

使用 Private Service Connect 连接到另一个 VPC 网络中的服务时,您可以从您的 VPC 网络的子网中选择一个 IP 地址。

该 IP 地址必须与服务提供方的服务连接位于同一区域。 该 IP 地址会计入内部 IP 地址的项目配额

创建 Private Service Connect 端点时,系统会使用您选择的命名空间或默认命名空间 goog-psc-default,自动向 Service Directory 注册该端点。

控制台

  1. 在 Google Cloud Console 中,转到 Private Service Connect

    转到 Private Service Connect

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

  3. 点击连接端点

  4. 对于目标,选择已发布的服务

  5. 对于目标服务,输入要连接到的服务连接 URI。

    服务连接 URI 的格式为:projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

  6. 对于端点名称,输入要用于端点的名称。

  7. 为端点选择网络

  8. 为端点选择子网

  9. 为端点选择 IP 地址。如果您需要新的 IP 地址,可以创建一个:

    1. 点击 IP 地址下拉菜单,然后选择创建 IP 地址
    2. 为 IP 地址输入名称和可选的描述
    3. 对于静态 IP 地址,选择自动分配让我选择

      如果您选择了让我选择,请输入您要使用的自定义 IP 地址

    4. 点击预留

  10. 从下拉列表中选择命名空间,或者创建新的命名空间。

    系统会根据所选子网填充区域

  11. 点击添加端点

gcloud

  1. 预留要分配给该端点的内部 IP 地址。

    gcloud compute addresses create ADDRESS_NAME \
        --region=REGION \
        --subnet=SUBNET
    

    请替换以下内容:

    • ADDRESS_NAME:分配给预留 IP 地址的名称。

    • REGION:端点 IP 地址所在的区域。此区域必须与服务提供方的服务连接所在区域相同。

    • SUBNET:端点 IP 地址的子网名称。

  2. 查找预留的 IP 地址。

    gcloud compute addresses list --filter="name=ADDRESS_NAME"
    
  3. 创建转发规则,以将该端点连接到服务提供方的服务连接。

    gcloud compute forwarding-rules create ENDPOINT_NAME \
        --region=REGION \
        --network=NETWORK_NAME \
        --address=ADDRESS_NAME \
        --target-service-attachment=SERVICE_ATTACHMENT \
        [ --service-directory-registration=NAMESPACE_URI ]
    

    请替换以下内容:

    • ENDPOINT_NAME:分配给端点的名称。

    • REGION:端点所在区域。此区域必须与服务提供方的服务连接所在区域相同。

    • NETWORK_NAME:端点的 VPC 网络的名称。

    • ADDRESS_NAME:预留地址的名称。

    • SERVICE_ATTACHMENT:服务提供方的服务连接的 URI。例如:projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

    • NAMESPACE_URI:您要使用的 Service Directory 命名空间的 URI。NAMESPACE_URI 必须引用您要在其中创建 Private Service Connect 端点的同一项目和区域。如果您指定的命名空间不存在,则系统会创建这个命名空间。

      NAMESPACE_URI 的格式如下:

      projects/PROJECT_NAME/locations/REGION/namespaces/NAMESPACE

      如果省略 --service-directory-registration 标志,则会使用默认命名空间 goog-psc-default

API

  1. 预留要分配给该端点的内部 IP 地址。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/region/REGION/addresses
    
    {
      "name": ADDRESS_NAME,
      "addressType": "INTERNAL",
      "subnetwork": SUBNET_URI
    }
    

    请替换以下内容:

    • PROJECT_ID:您的项目 ID。

    • ADDRESS_NAME:分配给预留 IP 地址的名称。

    • SUBNET_URI:IP 地址的子网。使用 subnetworks.list 方法gcloud compute networks subnets list --uri 查找网络的网址。

  2. 创建转发规则以将端点连接到 Google API 和服务。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules
    {
      "name": ENDPOINT_NAME,
      "IPAddress": ADDRESS_URI,
      "target": SERVICE_ATTACHMENT,
      "network": NETWORK_URI,
      "serviceDirectoryRegistrations": [
          {
              "namespace": NAMESPACE,
          }
      ],
    }
    

    请替换以下内容:

    • PROJECT_ID:您的项目 ID。

    • REGION:端点所在区域。

    • ENDPOINT_NAME:分配给端点的名称。

    • ADDRESS_URI:关联网络上的预留地址的 URI。使用 addresses.list 方法gcloud compute addresses list --uri 查找预留地址的网址。

    • SERVICE_ATTACHMENT:服务提供方的服务连接的 URI。例如:projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME

    • NETWORK_URI:端点的 VPC 网络。使用 network.list 方法gcloud compute networks list --uri 查找您的网络的 URI。

    • NAMESPACE:端点的命名空间。如果您指定的命名空间不存在,则系统会创建这个命名空间。如果您省略 namespace 字段,系统会分配默认命名空间 goog-psc-default

为 Private Service Connect 端点创建 DNS 记录

创建 Private Service Connect 端点时,系统会使用您选择的命名空间或默认命名空间 goog-psc-default,自动向 Service Directory 注册该端点。

配置 Service Directory 可用区

如果您的 Private Service Connect 端点已向 Service Directory 注册,则您可以配置与该命名空间关联的 Service Directory 可用区。创建可用区后,系统会自动为 Private Service Connect 端点创建 DNS 条目。

  • 使用以下配置创建 Service Directory 可用区

    • 可用区名称:指定您选择的名称。

    • DNS 名称:服务提供方用于其已发布的服务的 DNS 网域。如需了解此信息,请与服务提供方联系。

      其格式可能如下:REGION.p.DOMAIN。例如,如果服务提供方的公共网域是 example.com,而其已发布的服务位于 us-west1,则我们会建议他们使用 us-west1.p.example.com 域名指定其服务名称。

    • Service Directory 命名空间:您为此端点配置的命名空间。

使用此配置时,如果您配置了带有 us-west1.p.example.com DNS 名称的 Service Directory DNS 区域,并创建了一个名为 analytics 的 Private Service Connect 端点,则系统会自动为 analytics.us-west1.p.example.com 创建一条 DNS 记录。

手动向 Service Directory 注册 Private Service Connect 端点

如果您的 Private Service Connect 端点未向 Service Directory 注册,您可以进行注册。

如需向 Service Directory 手动注册 Private Service Connect 端点,请按照以下步骤操作:

  1. 为 Private Service Connect 端点 NAMESPACE 创建一个 Service Directory 命名空间

  2. 为 Private Service Connect 端点 SERVICE_NAME 创建一个 Service Directory 服务

    对于该服务,请使用与 Private Service Connect 端点 ENDPOINT_NAME 所用转发规则相同的名称。

  3. 使用名称 default 创建一个 Service Directory 端点,并使用 Private Service Connect 端点的 IP 地址和端口 (443)。

向 Service Directory 注册 Private Service Connect 端点后,请按照配置 Service Directory 可用区中的说明操作。

手动配置 DNS

如果您希望使用 Cloud DNS 手动创建 DNS 记录,请参阅以下页面:

  • 访问权限控制DNS Administrator 角色 (roles/dns.admin) 提供创建 DNS 地区和记录所需的权限。

  • 创建专用可用区

    • 配置专用可用区时,您需要提供 DNS 名称。使用服务提供方用于其已发布服务的 DNS 网域。如需了解此信息,请与服务提供方联系。

      其格式可能如下:REGION.p.DOMAIN。例如,如果服务提供方的公共网域是 example.com,而其已发布的服务位于 us-west1,则我们会建议他们使用 us-west1.p.example.com 域名指定其服务名称。

  • 添加记录

列出端点

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

控制台

  1. 在 Google Cloud Console 中,转到 Private Service Connect 页面。

    转到 Private Service Connect

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

    系统会显示 Private Service Connect 端点。

gcloud

gcloud compute forwarding-rules list  \
    --filter 'target~serviceAttachments'

输出内容类似如下:

NAME  REGION  IP_ADDRESS  IP_PROTOCOL  TARGET
RULE          IP          TCP          REGION/serviceAttachments/SERVICE_NAME

API

此 API 调用会返回所有转发规则,而不仅仅是用于访问服务的 Private Service Connect 端点。

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules

请替换以下内容:

  • PROJECT_ID:包含该端点的项目。
  • REGION:端点所在区域。

查看端点详情

您可以查看 Private Service Connect 端点的所有配置详细信息。

端点的状态可为以下之一:

  • 待处理:端点配置为连接到需要批准的服务,但此项目尚未获得批准。

  • 已接受:端点位于已获批准连接到此服务的项目中。

  • 已拒绝:端点所在的项目禁止连接到此服务。

  • 已关闭:端点连接到已删除的服务连接。

控制台

  1. 在 Google Cloud Console 中,转到 Private Service Connect 页面。

    转到 Private Service Connect

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

  3. 点击要查看的端点。

gcloud

gcloud compute forwarding-rules describe \
    ENDPOINT_NAME --region=REGION

请替换以下内容:

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

API

GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/ENDPOINT_NAME

请替换以下内容:

  • PROJECT_ID:包含该端点的项目。
  • REGION:端点所在区域。
  • ENDPOINT_NAME:端点的名称。

为端点添加标签

您可以管理 Private Service Connect 端点的标签。如需了解详情,请参阅为资源添加标签

删除端点

您可以删除 Private Service Connect 端点。

控制台

  1. 在 Google Cloud Console 中,转到 Private Service Connect

    转到 Private Service Connect

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

  3. 选择要删除的 Private Service Connect 端点,然后点击删除

gcloud

    gcloud compute forwarding-rules delete \
        ENDPOINT_NAME --region=REGION

请替换以下内容:

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

API

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/forwardingRules/ENDPOINT_NAME

请替换以下内容:

  • PROJECT_ID:包含该端点的项目。
  • REGION:端点所在区域。
  • ENDPOINT_NAME:端点的名称。

日志记录

您可以在包含访问服务(在使用 Private Service Connect 端点的另一个 VPC 网络中访问)的虚拟机的子网上启用 VPC 流日志。日志显示虚拟机与 Private Service Connect 端点之间的流。

从本地主机使用 Private Service Connect

如果您的本地网络连接到 VPC 网络,您可以使用 Private Service Connect 端点的内部 IP 地址从本地主机访问 Private Service Connect 发布的服务。

  • 您的本地网络必须使用 Private Service Connect 端点所在的同一区域中的 Cloud VPN 隧道连接到 VPC 网络。

  • Private Service Connect 端点位于连接到本地网络的 VPC 网络中。

  • 如果您想使用 DNS 名称访问 Private Service Connect 端点,则必须配置本地系统,以便它们可以对您的专用 DNS 可用区进行查询。

    如果您已使用 Cloud DNS 实现专用 DNS 可用区,请完成以下步骤:

已知问题

  • Private Service Connect 端点状态的更改不会记录在 Cloud Logging 中。

  • 如果同时满足以下两个条件,则系统不会建立从本地主机到 Private Service Connect 端点的连接:

    • 该服务是在明确的项目批准下发布的。

    • 创建端点之前,您的项目尚未获得批准。

    如需解决此问题,请在创建 Private Service Connect 端点之前让服务提供方批准您的项目