使用 Private Service Connect 发布服务

服务提供方可以借助 Private Service Connect,在您的 VPC 网络中使用内部 IP 地址发布服务。服务使用方可以使用“使用方 VPC 网络”中的内部 IP 地址访问您发布的服务。

本指南介绍如何使用 Private Service Connect 发布服务。如需发布服务,请执行以下操作:

Private Service Connect 提供两种连接到已发布服务的方法:

这些端点类型需要的提供方配置略有不同。如需了解详情,请参阅功能和兼容性

角色

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

准备工作

支持的负载均衡器类型

您可以使用以下负载均衡器托管服务:

如需了解每种负载均衡器类型支持的配置,请参阅功能和兼容性

您还可以发布在 Google Kubernetes Engine 上的内部直通式网络负载均衡器上托管的服务。GKE 文档中的使用 Private Service Connect 创建内部直通式网络负载均衡器中介绍了此配置,包括负载均衡器和服务连接配置。

为 Private Service Connect 创建子网

创建一个或多个专用子网,以配合 Private Service Connect 使用。如果您使用 Google Cloud 控制台发布服务,则可以在此过程中创建子网。

如果您需要为现有服务提供更多 IP 地址,请参阅为已发布的服务添加或移除子网

您还可以在共享 VPC 宿主项目中创建 Private Service Connect 子网。

在服务的负载均衡器所在的区域中创建子网。

您无法将常规子网转换为 Private Service Connect 子网。

控制台

  1. 在 Google Cloud 控制台中,进入 VPC 网络页面。

    进入 VPC 网络页面

  2. 点击某个 VPC 网络的名称以显示其 VPC 网络详情页面。

  3. 点击添加子网。在显示的面板中:

    1. 提供名称
    2. 选择区域
    3. 用途部分中,选择 Private Service Connect
    4. 输入 IP 地址范围。例如 10.10.10.0/24
    5. 点击添加

gcloud

gcloud compute networks subnets create SUBNET_NAME \
    --network=NETWORK_NAME --region=REGION \
    --range=SUBNET_RANGE --purpose=PRIVATE_SERVICE_CONNECT

请替换以下内容:

  • SUBNET_NAME:要分配给子网的名称。

  • NETWORK_NAME:用于新子网的 VPC 的名称。

  • REGION:新子网的区域。此区域必须与您要发布服务的区域相同。

  • SUBNET_RANGE:要用于子网的 IP 地址范围。例如 10.10.10.0/24

API

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks

{
  "ipCidrRange": "SUBNET_RANGE",
  "name": "SUBNET_NAME",
  "network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
  "purpose": "PRIVATE_SERVICE_CONNECT",
}

请替换以下内容:

  • PROJECT_ID:用于子网的项目。

  • REGION:新子网的区域。此区域必须与您要发布服务的区域相同。

  • SUBNET_RANGE:要用于子网的 IP 地址范围。例如 10.10.10.0/24

  • SUBNET_NAME:要分配给子网的名称。

  • NETWORK_NAME:用于新子网的 VPC 网络的名称。

配置防火墙规则

配置防火墙规则以允许端点或后端与服务连接之间的流量。客户端请求源自不同的位置,具体取决于 Private Service Connect 类型。

Private Service Connect 类型 客户端流量的 IP 地址范围 详细信息
端点(基于转发规则) 与此服务关联的 Private Service Connect 子网的 IP 地址范围。 如果您使用的是默认网络,则预先填充的 default-allow-internal 规则允许此流量,除非有优先级较高的规则阻止它。
后端(基于全球外部应用负载均衡器)
  • 130.211.0.0/22
  • 35.191.0.0/16
全球外部应用负载均衡器在 Google Front End (GFE) 前端上实现,这些前端使用这些 IP 地址范围。

如果您的防火墙配置尚未允许来自相应端点类型的流量,请将防火墙规则配置为允许它。

以下示例配置允许您创建 VPC 防火墙规则,以允许从客户端 IP 地址范围到提供方服务负载均衡器中的后端虚拟机的流量。此配置假设后端虚拟机已配置网络标记

入站规则示例:

gcloud compute firewall-rules create NAME \
    --network=NETWORK_NAME \
    --direction=ingress \
    --action=allow \
    --target-tags=TAG \
    --source-ranges=CLIENT_IP_RANGES_LIST \
    --rules=RULES_LIST

替换以下内容:

  • NAME:防火墙规则的名称。

  • NETWORK_NAME:包含服务和 Private Service Connect 子网的网络。

  • TAG:应用于提供方服务负载均衡器中的后端虚拟机的目标标记。

  • CLIENT_IP_RANGES_LIST:客户端流量源自的 IP 地址范围。如需了解详情,请参阅上表。

  • RULES_LIST:规则适用的协议和目标端口的逗号分隔列表。例如 tcp,udp

出站规则示例:

gcloud compute firewall-rules create NAME \
    --network=NETWORK_NAME \
    --direction=egress \
    --action=allow \
    --target-tags=TAG \
    --destination-ranges=CLIENT_IP_RANGES_LIST \
    --rules=RULES_LIST

替换以下内容:

  • NAME:防火墙规则的名称。

  • NETWORK_NAME:包含服务和 Private Service Connect 子网的网络。

  • TAG:应用于提供方服务负载均衡器中的后端虚拟机的目标标记。

  • CLIENT_IP_RANGES_LIST:客户端流量源自的 IP 地址范围。如需了解详情,请参阅上表。

  • RULES_LIST:规则适用的协议和目标端口的逗号分隔列表。例如 tcp,udp

如需详细了解如何配置 VPC 防火墙规则,请参阅 VPC 防火墙规则。如需配置分层防火墙规则以允许此流量,请参阅分层防火墙政策

发布服务

要发布服务,您需要创建服务连接。您可以通过以下两种方式之一来提供服务:

在服务的负载均衡器所在的区域中创建服务连接。

每个服务连接可以指向一个或多个 Private Service Connect 子网,但一个 Private Service Connect 子网不能用于多个服务连接。

发布使用自动批准的服务

按照以下说明发布服务,并自动允许任何使用方连接到此服务。如果您想显式批准使用方连接,请参阅发布使用显式批准的服务

发布服务时,您需要创建服务连接。服务使用方使用服务连接详情连接到您的服务。

若要查看使用方连接信息,您可以在受支持的服务上启用 PROXY 协议。如需了解支持的服务,请参阅功能和兼容性。如需详细了解 PROXY 协议,请参阅查看使用方连接信息

控制台

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

    转到 Private Service Connect

  2. 点击已发布服务标签页。

  3. 点击发布服务

  4. 为要发布的服务选择负载均衡器类型

    • 内部直通式网络负载均衡器
    • 区域级内部代理网络负载均衡器
    • 区域级内部应用负载均衡器
  5. 选择托管您要发布的服务的内部负载均衡器

    Service Project Admin 可以选择具有来自共享 VPC 网络的 IP 地址的内部负载均衡器。如需了解详情,请参阅共享 VPC

    “网络”和“区域”字段会填充所选内部负载均衡器的详细信息。

  6. 如果出现提示,请选择与要发布的服务关联的转发规则

  7. 对于服务名称,输入服务连接的名称。

  8. 为服务选择一个或多个 Private Service Connect 子网。相关列表会填充来自所选内部负载均衡器的 VPC 网络的子网,包括通过共享 VPC 与服务项目共享的子网。

    如果您的服务连接使用具有来自共享 VPC 网络的 IP 地址的内部负载均衡器,您必须选择来自同一共享 VPC 网络的共享子网。

  9. 如果您要查看使用方连接信息,请选择使用代理协议

  10. 如果要配置域名,请输入域名(包括结尾句点)。

    建议的域名格式为 REGION.p.DOMAIN.

    您必须拥有域名。如需了解详情,请参阅 DNS 配置

  11. 选择自动接受连接

  12. 点击添加服务

gcloud

gcloud compute service-attachments create ATTACHMENT_NAME \
    --region=REGION \
    --producer-forwarding-rule=RULE_NAME \
    --connection-preference=ACCEPT_AUTOMATIC \
    --nat-subnets=PSC_SUBNET_LIST \
    [ --enable-proxy-protocol ] \
    [ --domain-names=DOMAIN_NAME ]

替换以下内容:

  • ATTACHMENT_NAME:要分配给服务连接的名称。

  • REGION:新服务连接的区域。此区域必须与您要发布服务的区域相同。

  • RULE_NAME:与您要发布的服务关联的转发规则的名称。

    Service Project Admin 可以指定具有来自共享 VPC 网络的 IP 地址的内部负载均衡器的转发规则。如需了解详情,请参阅共享 VPC

  • PSC_SUBNET_LIST:用于此服务连接的一个或多个子网名称的逗号分隔列表。

    如果您要使用具有来自共享 VPC 网络的 IP 地址的转发规则创建服务连接,请使用来自同一共享 VPC 网络的共享子网。对于每个共享子网,请指定完整的资源 URI,例如 --nat-subnets=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET

  • DOMAIN_NAME:服务的 DNS 域名,包括结尾句点。建议的格式:REGION.p.DOMAIN.

    如需了解详情,请参阅 DNS 配置

API

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments
{
  "name": "ATTACHMENT_NAME",
  "connectionPreference": "ACCEPT_AUTOMATIC",
  "targetService": "RULE_URI",
  "enableProxyProtocol": false,
  "natSubnets": [
    "PSC_SUBNET_1_URI",
    "PSC_SUBNET_2_URI",
  ],
  "domainNames": [
    "DOMAIN_NAME",
  ]
}

请替换以下内容:

  • PROJECT_ID:服务连接的项目。

  • REGION:新服务连接的区域。此区域必须与您要发布服务的区域相同。

  • ATTACHMENT_NAME:要分配给服务连接的名称。

  • RULE_URI:与您要发布的服务关联的转发规则的 URL。

    Service Project Admin 可以指定具有来自共享 VPC 网络的 IP 地址的内部负载均衡器的转发规则。如需了解详情,请参阅共享 VPC

  • PSC_SUBNET_1_URIPSC_SUBNET_2_URI:要用于此服务连接的子网 URI。您可以通过 URI 指定一个或多个子网。

    如果您要使用具有来自共享 VPC 网络的 IP 地址的转发规则创建服务连接,请使用来自同一共享 VPC 网络的共享子网。

  • DOMAIN_NAME:服务的 DNS 域名,包括结尾句点。建议的格式:REGION.p.DOMAIN.

    如需了解详情,请参阅 DNS 配置

发布使用显式批准的服务

如果您希望在使用方连接到此服务之前明确批准使用方,请按照以下说明发布服务。如果要自动批准使用方连接,请参阅发布使用自动批准的服务

发布服务时,您需要创建服务连接。服务使用方使用服务连接详情连接到您的服务。

每个服务连接都有使用方接受列表和使用方拒绝列表,用于确定哪些端点可以连接到服务。给定的服务连接可以使用这些列表中的项目或网络,但不能同时使用两者。不支持按文件夹指定使用方。

如果您要从“基于项目接受使用方”更改为“基于网络接受使用方”,反之亦然,请执行以下操作:

  • 在一次操作中替换所有已获批准的项目或网络。
  • 如果您需要提供与之前相同的访问权限,请确保新的接受和拒绝列表与之前的接受和拒绝列表相同。

如果您将某个项目或网络同时添加到接受列表和拒绝列表,则来自该项目或网络的连接请求会被拒绝。

控制台

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

    转到 Private Service Connect

  2. 点击已发布服务标签页。

  3. 点击发布服务

  4. 选择负载均衡器类型内部 TCP/UDP 负载均衡器内部 HTTP(S) 负载均衡器

  5. 选择托管您要发布的服务的内部负载均衡器

    Service Project Admin 可以选择具有来自共享 VPC 网络的 IP 地址的内部负载均衡器。如需了解详情,请参阅共享 VPC

    “网络”和“区域”字段会填充所选内部负载均衡器的详细信息。

  6. 如果出现提示,请选择与要发布的服务关联的转发规则

  7. 对于服务名称,输入服务连接的名称。

  8. 为服务选择一个或多个 Private Service Connect 子网。相关列表会填充来自所选内部负载均衡器的 VPC 网络的子网,包括通过共享 VPC 与服务项目共享的子网。

    如果您的服务连接使用具有来自共享 VPC 网络的 IP 地址的内部负载均衡器,您必须选择来自同一共享 VPC 网络的共享子网。

  9. 如果您要查看使用方连接信息,请选中协议复选框。

  10. 如果要配置域名,请输入域名(包括结尾句点)。

    建议的域名格式为 REGION.p.DOMAIN.

    您必须拥有域名。如需了解详情,请参阅 DNS 配置

  11. 如果您想要接受选定项目的连接,请选择接受选定项目的连接

    1. 对于要接受其连接的每个项目,请执行以下操作:
      1. 点击添加接受的项目,然后输入以下内容:
        • 您要接受其连接的项目的 ID 或编号。
        • 连接限制,用于指定“指定项目”中可以连接的端点数上限。
    2. 可选:对于要明确拒绝其连接的每个项目,点击添加拒绝的项目,然后输入项目 ID 或项目编号。
  12. 如果您想要接受选定网络的连接,请选择接受选定网络的连接

    1. 对于要接受其连接的每个网络,请执行以下操作:
      1. 点击添加接受的网络,然后输入以下内容:
        • 需要接受其连接的网络父项目的 ID 或编号。
        • 您要接受其连接的网络的名称。
        • 连接限制,用于指定“指定网络”中可以连接的端点数上限。
    2. 可选:对于要明确拒绝其连接的每个网络,请点击添加被拒绝的网络,然后输入网络父项目的 ID 或编号和网络名称。
  13. 如果您想停用连接协调,请清除启用连接协调复选框。

  14. 点击添加服务

gcloud

gcloud compute service-attachments create ATTACHMENT_NAME \
    --region=REGION \
    --producer-forwarding-rule=RULE_NAME \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=ACCEPTED_PROJECT_OR_NETWORK_1=LIMIT_1,ACCEPTED_PROJECT_OR_NETWORK_2=LIMIT_2 \
    --consumer-reject-list=REJECTED_PROJECT_OR_NETWORK_1,REJECTED_PROJECT_OR_NETWORK_2 \
    --nat-subnets=PSC_SUBNET_LIST \
    [--enable-proxy-protocol ] \
    [--domain-names=DOMAIN_NAME] \
    [--reconcile-connections]

替换以下内容:

  • ATTACHMENT_NAME:要分配给服务连接的名称。

  • REGION:新服务连接的区域。此区域必须与您要发布服务的区域相同。

  • RULE_NAME:与您要发布的服务关联的转发规则的名称。

    Service Project Admin 可以指定具有来自共享 VPC 网络的 IP 地址的内部负载均衡器的转发规则。如需了解详情,请参阅共享 VPC

  • ACCEPTED_PROJECT_OR_NETWORK_1ACCEPTED_PROJECT_OR_NETWORK_2:要接受的项目 ID、项目名称或网络 URI。--consumer-accept-list 是可选项,可以包含一个或多个项目或网络,但不能同时包含这两种类型。

  • LIMIT_1LIMIT_2:项目或网络的连接限制。连接限制是指可以连接到服务的使用方端点或后端的数量。每个接受的项目或网络都必须配置有一个连接限制。

  • REJECTED_PROJECT_OR_NETWORK_1REJECTED_PROJECT_OR_NETWORK_2:要拒绝的项目 ID、项目名称或网络 URI。--consumer-reject-list 是可选项,可以包含一个或多个项目或网络,但不能同时包含这两种类型。

  • PSC_SUBNET_LIST:用于此服务连接的一个或多个子网名称的逗号分隔列表。

    如果您要使用具有来自共享 VPC 网络的 IP 地址的转发规则创建服务连接,请使用来自同一共享 VPC 网络的共享子网。对于每个共享子网,请指定完整的资源 URI,例如 --nat-subnets=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET

  • DOMAIN_NAME:服务的 DNS 域名,包括结尾句点。建议的格式:REGION.p.DOMAIN.

    如需了解详情,请参阅 DNS 配置

API

  • 如需发布服务并根据项目明确批准使用方,请发送以下请求:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments
    {
      "name": "ATTACHMENT_NAME",
      "region": "REGION",
      "connectionPreference": "ACCEPT_MANUAL",
      "targetService": "RULE_URI",
      "enableProxyProtocol": false,
      "natSubnets": [
        "PSC_SUBNET_1_URI",
        "PSC_SUBNET_2_URI"
      ],
      "consumerRejectLists": [
        "REJECTED_PROJECT_1",
        "REJECTED_PROJECT_2"
      ],
      "consumerAcceptLists": [
        {
          "projectIdOrNum": "ACCEPTED_PROJECT_1",
          "connectionLimit": "LIMIT_1"
        },
        {
          "projectIdOrNum": "ACCEPTED_PROJECT_2",
          "connectionLimit": "LIMIT_2"
        }
      ],
      "domainNames": [
        "DOMAIN_NAME"
      ]
    }
    

    替换以下内容:

    • PROJECT_ID:服务连接的项目。

    • REGION:该服务连接的区域。

    • ATTACHMENT_NAME:要分配给服务连接的名称。

    • RULE_URI:与您要发布的服务关联的转发规则的 URL。

      Service Project Admin 可以指定具有来自共享 VPC 网络的 IP 地址的内部负载均衡器的转发规则。如需了解详情,请参阅共享 VPC

    • PSC_SUBNET_1_URIPSC_SUBNET_2_URI:要用于此服务连接的子网 URI。您可以通过 URI 指定一个或多个子网。

      如果您要使用具有来自共享 VPC 网络的 IP 地址的转发规则创建服务连接,请使用来自同一共享 VPC 网络的共享子网。

    • REJECTED_PROJECT_1REJECTED_PROJECT_2:要拒绝的项目的 ID 或编号。consumerRejectLists 是可选项,可以包含一个或多个项目。

    • ACCEPTED_PROJECT_1ACCEPTED_PROJECT_2:要接受的项目的 ID 或编号。consumerAcceptLists 是可选项,可以包含一个或多个项目。

    • LIMIT_1LIMIT_2:相应项目的连接限制。连接限制是指可以连接到服务的使用方端点或后端的数量。所接受的项目都必须配置有一个连接限制。

    • DOMAIN_NAME:服务的 DNS 域名,包括结尾句点。建议的格式:REGION.p.DOMAIN. 如需了解详情,请参阅 DNS 配置

  • 如需发布服务并根据 VPC 网络明确批准使用方,请发送以下请求:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments
    {
      "name": "ATTACHMENT_NAME",
      "region": "REGION",
      "connectionPreference": "ACCEPT_MANUAL",
      "targetService": "RULE_URI",
      "enableProxyProtocol": false,
      "natSubnets": [
        "PSC_SUBNET_1_URI",
        "PSC_SUBNET_2_URI"
      ],
      "consumerRejectLists": [
        "projects/REJECTED_PROJECT_ID_1/global/networks/REJECTED_NETWORK_1",
        "projects/REJECTED_PROJECT_ID_2/global/networks/REJECTED_NETWORK_2"
      ],
      "consumerAcceptLists": [
        {
          "networkUrl": "projects/ACCEPTED_PROJECT_ID_1/global/networks/ACCEPTED_NETWORK_1",
          "connectionLimit": "LIMIT_1"
        },
        {
          "networkUrl": "projects/ACCEPTED_PROJECT_ID_2/global/networks/ACCEPTED_NETWORK_2",
          "connectionLimit": "LIMIT_2"
        }
      ],
      "domainNames": [
        "DOMAIN_NAME"
      ]
    }
    

    替换以下内容:

    • REJECTED_PROJECT_ID_1REJECTED_PROJECT_ID_2:您要拒绝的网络的父级项目的 ID。 consumerRejectLists 是可选项,可以包含一个或多个网络。
    • REJECTED_NETWORK_1REJECTED_NETWORK_2:您要拒绝的网络的名称。
    • ACCEPTED_PROJECT_ID_1ACCEPTED_PROJECT_ID_2:您要接受的网络的父级项目的 ID。 consumerAcceptLists 是可选项,可以包含一个或多个网络。
    • ACCEPTED_NETWORK_1ACCEPTED_NETWORK_2:您要接受的网络的名称。
    • LIMIT_1LIMIT_2:网络的连接限制。连接限制是指可以连接到服务的使用方端点或后端的数量。所接受的项目都必须配置有一个连接限制。
  • 如需发布启用了连接协调的服务,请发送类似于先前的请求,但包含以下字段:

    {
      ...
      "reconcileConnections": true
      ...
    }
    

查看使用方连接信息

默认情况下,Private Service Connect 将使用方的来源 IP 地址转换为服务提供方 VPC 网络中某个 Private Service Connect 子网内的地址。如果您希望查看使用方的原始来源 IP 地址,可以启用 PROXY 协议。

并非所有服务都支持 PROXY 协议。如需了解详情,请参阅功能和兼容性

如果启用了 PROXY 协议,则可以通过 PROXY 协议标头获取使用方的来源 IP 地址和 PSC 连接 ID (pscConnectionId)。

为服务连接启用 PROXY 协议后,更改仅适用于新连接。现有连接不包含 PROXY 协议标头。

如果启用了 PROXY 协议,请查看有关后端 Web 服务器软件的文档,了解如何解析和处理客户端连接 TCP 载荷中的传入 PROXY 协议标头。如果在服务连接上启用了 PROXY 协议,但后端 Web 服务器未配置为处理 PROXY 协议标头,则 Web 请求的格式可能不正确。如果请求格式不正确,则服务器无法解读该请求。

pscConnectionId类型-长度-值 (TLV) 的格式编码在 PROXY 协议标头中。

字段 字段长度 字段值
类型 1 个字节 0xE0 (PP2_TYPE_GCP)
时长 2 个字节 0x8(8 个字节)
8 个字节 按网络顺序显示的 8 字节 pscConnectionId

您可以通过使用方转发规则提供方服务连接查看 8 字节 pscConnectionId

对于给定时间点的所有活跃连接,pscConnectionId 在全球范围内都是唯一的。但是,随着时间的推移,在以下情况下可能会重复使用 pscConnectionId

  • 在给定的 VPC 网络中,如果您删除端点(转发规则),并使用相同的 IP 地址创建一个新端点,则可能会使用同一 pscConnectionId

  • 如果您删除包含端点(转发规则)的 VPC 网络,则在等待七天后,用于这些端点的 pscConnectionId 可能会用于另一个 VPC 网络中的其他端点。

您可以将 pscConnectionId 用于调试,以及跟踪数据包的来源。

此外,您可以从提供方服务连接获取 16 字节 PSC 连接 ID。PSC 连接 ID 是用于标识 Private Service Connect 服务连接的全局唯一 ID。您可以使用 PSC 连接 ID 来获得可见性及执行调试。PSC 连接 ID 不会包含在 PROXY 协议标头中。

管理对已发布服务的访问请求

如果您有已获明确批准的已发布服务,则可以接受或拒绝来自使用方项目或网络的连接请求。如需了解详情,请参阅管理对已发布服务的访问请求

对于已发布服务,您还可以在自动接受项目与显式接受项目之间切换。如需了解详情,请参阅更改已发布服务的连接偏好设置

为已发布的服务添加子网或从中移除子网

您可以向已发布的服务添加子网或从已发布的服务移除子网。如需了解详情,请参阅向已发布的服务添加子网或从已发布的服务移除子网

列出已发布的服务

您可以列出所有服务。

控制台

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

    转到 Private Service Connect

  2. 点击已发布服务标签页。

    此时会显示 Private Service Connect 服务连接。

gcloud

  1. 列出服务连接。

    gcloud compute service-attachments list [--regions=REGION_LIST]
    

    请替换以下内容:

    • REGION_LIST:要查看其服务连接的一个或多个区域的英文逗号分隔列表。例如 us-central1us-west1,us-central1

API

您可以查看指定区域或所有区域中的所有服务连接。

  • 查看一个区域中的所有服务连接:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments
    
  • 查看所有区域中的所有服务连接:

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/aggregated/serviceAttachments
    

    请替换以下内容:

    • PROJECT_ID:服务连接的项目。

    • REGION:该服务连接的区域。

    • ATTACHMENT_NAME:服务连接的名称。

查看已发布服务的详细信息

您可以查看已发布服务的配置详细信息。 您可以在 Google Cloud 控制台中查看一些配置详细信息,例如服务使用方连接到服务所需的服务连接 URI。如需查看包括服务连接使用方的 pscConnectionId 值在内的所有详细信息,请使用 Google Cloud CLI 或 API。

控制台

您可以查看已发布服务的详细信息。服务连接字段包含服务连接 URI。

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

    转到 Private Service Connect

  2. 点击已发布服务标签页。

  3. 点击要查看的服务。

gcloud

您可以查看已发布服务的详细信息。selfLink 字段包含服务连接 URI。

gcloud compute service-attachments describe \
    ATTACHMENT_NAME --region=REGION

API

您可以查看已发布服务的详细信息。selfLink 字段包含服务连接 URI。

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

请替换以下内容:

  • PROJECT_ID:服务连接的项目。

  • REGION:该服务连接的区域。

  • ATTACHMENT_NAME:服务连接的名称。

删除已发布的服务

即使一项已发布服务的服务连接具有使用方连接,您也可以删除该服务。删除已发布的服务只会移除服务连接。关联的负载均衡器不会被删除。在删除已发布的服务时,以下规则适用:

控制台

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

    转到 Private Service Connect

  2. 点击已发布服务标签页。

  3. 点击要删除的服务。

  4. 点击删除

gcloud

gcloud compute service-attachments delete \
    ATTACHMENT_NAME --region=REGION

API

DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME

请替换以下内容:

  • PROJECT_ID:服务连接的项目。

  • REGION:该服务连接的区域。

  • ATTACHMENT_NAME:服务连接的名称。

已知问题

升级适用于 Terraform 的 Google 提供商后断开连接

如果您已使用具有低于 4.76.0 版的 Terraform 的 Google 提供商创建服务连接,请勿升级到 4.76.0 到 4.81.x 版。升级到 4.76.0 至 4.81.x 版后运行 terraform apply 时,Terraform 可能会无意中删除并重新创建服务连接,并关闭现有的 Private Service Connect 连接。重新创建的服务连接不会自动重新建立 Private Service Connect 连接。

如果您升级到 4.82.0 版,然后运行 terraform apply,则服务连接不会被删除,但协调连接会设置为 true。如果之前设置为 false,则某些 Private Service Connect 连接可能会关闭。

  • 升级到 Google 提供方 4.76.0 至 4.81.x 版。 在这种情况下,terraform plan 的输出包括以下内容:

    -/+ resource "google_compute_service_attachment" "SERVICE_NAME" {
      ...
            ~ reconcile_connections = false -> true # forces replacement
      ...
    

    请使用解决方法来避免此问题。

  • 升级到 Google 提供方 4.82.0 版。 在此场景中,terraform plan 的输出包括以下内容:

    ~ reconcile_connections = false -> true
    

    如果您忽略此警告并应用更改,则 Terraform 会更新服务连接以启用连接协调。根据连接状态,从 false 更改为 true 可能会关闭某些现有连接。如需了解详情,请参阅连接协调

    请使用解决方法来避免此问题。

临时解决方法

我们建议您将 Terraform 的 Google 提供方升级到 4.82.0 版或更高版本。此版本可防止意外删除和重新创建服务连接。

如果您无法立即升级,或者如果您可以升级,但还想要阻止 Terraform 更改连接协调设置,请更新您的 Terraform 配置以明确设定连接协调设置。

  1. 查看服务连接的详细配置,并注意 reconcileConnections 设置。

    $ gcloud compute service-attachments describe SERVICE_NAME --region=REGION
    

    输出包括 reconcileConnections 字段,可以是 true 或 false。

    reconcileConnections: false
    
  2. 更新 Terraform 配置文件,以明确使用与服务连接相同的设置。

    resource "google_compute_service_attachment" "SERVICE_NAME" {
      ...
      reconcile_connections    = false
    }
    

    如需查看示例配置,请参阅 GitHub 上的服务连接协调连接

服务连接的补丁更新

使用 PATCH API 更新服务连接时,您必须在请求正文中提供服务连接的所有字段,而不能仅提供要更新的字段。使用 serviceAttachments.get 可以检索所有字段。

问题排查

更新服务连接时出错

如果您在更新服务连接时看到以下错误消息,则表示接受列表或拒绝列表可能包含已删除的项目:The resource PROJECT was not found

请从服务连接配置中移除已删除的项目以解决此问题。

  1. 使用 gcloud compute service-attachments describe 命令显示您要修改的服务连接的配置。

    • 如需以稍后可用于更新服务连接的格式输出接受列表,请执行以下操作:

      gcloud compute service-attachments describe ATTACHMENT_NAME \
        --region=REGION --flatten="consumerAcceptLists[]" \
        --format="csv[no-heading,separator='='](consumerAcceptLists.projectIdOrNum,consumerAcceptLists.connectionLimit)" \
        | xargs | sed -e 's/ /,/g'
      

      接受列表输出类似于以下内容:

      PROJECT_1=LIMIT_1,PROJECT_2=LIMIT_2,PROJECT_3=LIMIT_3
      
    • 如需以稍后可用于更新服务连接的格式输出拒绝列表,请执行以下操作:

      gcloud compute service-attachments describe ATTACHMENT_NAME \
        --region=REGION \
        --format="value[delimiter=','](consumerRejectLists[])"
      

      拒绝列表输出类似于以下内容:

      PROJECT_1,PROJECT_2,PROJECT_3
      
  2. 修改命令输出以从接受列表和拒绝列表中移除任何已删除的项目。

  3. 更新服务连接以移除已删除的项目。

    • 如需更新接受列表,请执行以下操作:

      gcloud compute service-attachments update ATTACHMENT_NAME \
        --region=REGION \
        --consumer-accept-list=UPDATED_ACCEPT_LIST
      
    • 如需更新拒绝列表,请执行以下操作:

      gcloud compute service-attachments update ATTACHMENT_NAME \
        --region=REGION \
        --consumer-reject-list=UPDATED_REJECT_LIST
      

未建立连接

如果使用方创建了引用您的服务连接的端点或后端,但连接未建立,请检查服务连接的连接状态。连接状态可能表示您可以解决该问题的步骤。

使用方连接超时

如果使用方连接超时,请检查您的服务是否需要长时间运行的连接。Private Service Connect NAT 的 TCP 已建立连接空闲超时为 20 分钟。如果您的服务需要更长的超时,您可能需要进行一些配置更改,以确保连接不会超时。如需了解详情,请参阅 NAT 规范