使用 Private Service Connect 发布代管式服务

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

本指南介绍如何使用 Private Service Connect 发布托管在内部 TCP/UDP 负载均衡器或内部 HTTP(S) 负载均衡器上的服务。

如果要发布在 Google Kubernetes Engine 的内部 TCP/UDP 负载均衡器上托管的服务,请参阅使用 Private Service Connect 创建内部 TCP/UDP 负载均衡器

如需发布服务,请执行以下操作:

  • 使用服务提供方 VPC 网络中的内部 TCP/UDP 负载均衡器或内部 HTTP(S) 负载均衡器托管服务。

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

有两种类型的 Private Service Connect 端点可以连接到已发布的服务:

这些端点类型需要的提供方配置略有不同。如需了解详情,请参阅规范

角色

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

准备工作

限制

  • 请勿在包含 Private Service Connect 服务连接的 VPC 网络中启用数据包镜像。如果同时存在这两种配置,则流量可能会被丢弃。

  • 带有使用方 HTTP(S) 服务控制的 Private Service Connect 端点不会出现在连接的客户端列表中。

  • 如果您在共享 VPC 宿主项目中创建 Private Service Connect 子网,并且想要在服务项目中创建服务连接,则必须使用 Google Cloud CLI 或 API 来创建服务连接。

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

规格

可以连接到已发布的服务的两种 Private Service Connect 端点类型具有不同的配置要求。下表总结了已发布的服务支持每种端点类型所需的配置。

服务提供方配置 Private Service Connect 端点(基于转发规则) 具有 HTTP(S) 服务控制的 Private Service Connect 端点(基于全球外部 HTTP(S) 负载均衡器)
服务提供方负载均衡器
支持的负载均衡器类型 内部 TCP/UDP 负载均衡器或内部 HTTP(S) 负载均衡器 仅限内部 TCP/UDP 负载均衡器
支持的协议 负载均衡器支持的任何流量 内部 TCP/UDP 负载均衡器必须传送 HTTPS 流量
内部 TCP/UDP 负载均衡器配置
全球访问权限 不支持 必填
使用同一 IP 地址的多条转发规则
不支持 不支持
子集 不支持 不支持
会话亲和性设置为 2 元组或 3 元组

不受支持。

配置 5 元组会话亲和性1

不受支持。

配置 5 元组会话亲和性1

数据包镜像 不支持 不支持
服务连接
PROXY 协议 支持由内部 TCP/UDP 负载均衡器托管的 TCP 服务。

不支持以下配置:
  • 由内部 TCP/UDP 负载均衡器托管的 UDP 服务。但是,系统不会阻止您创建此配置。
  • 由内部 HTTP(S) 负载均衡器托管的服务
不支持
发布模式
自动项目批准 任何项目中的端点均可连接 任何项目中的端点均可连接
明确批准 可在创建端点之前或之后接受使用方项目 必须在创建端点之前接受使用方项目
1 使用 Google Cloud Console 将会话亲和性设置为客户端 IP、端口和协议,或者使用 Google Cloud CLI 或 API 将会话亲和性设置为 NONECLIENT_IP_PORT_PROTO

DNS 配置

发布服务(创建服务连接)时,您可以选择配置 DNS 域名。

您必须拥有要配置的域名。如果您指定了某个网域,但不拥有该网域,则服务发布将失败。如需验证所有权,请前往 Google Search Console。如需详细了解如何验证网域,请参阅添加网站资源。您在服务连接中指定的域名可以是您验证的网域的子网域。例如,您可以注册 example.com,然后使用域名 us-west1.p.example.com 创建服务连接。

如果您为服务配置了域名,则在连接到该服务的 Private Service Connect 端点创建后,服务使用方的 VPC 网络中会进行以下配置:

建议的域名格式为 REGION.p.DOMAIN。由于此域名用于在服务使用方的 VPC 网络中创建 DNS 条目,因此必须使用与任何现有 DNS 域名不冲突的名称。使用此格式可降低冲突的风险。

例如,如果服务配置了域名 us-west1.p.example.com 并且服务使用方使用名称 analytics 创建了一个 Private Service Connect 端点,则系统会自动为 analytics.us-west1.p.example.com 创建一条 DNS 记录。

托管该服务的负载均衡器必须能够接受定向到此域名的请求。如果您使用的是内部 HTTP(S) 负载均衡器,则可能需要更新负载均衡器配置,以反映您希望服务使用方使用的域名。例如,更新证书网址映射

为 Private Service Connect 创建子网

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

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

您可以在共享 VPC 宿主项目中创建 Private Service Connect 子网。不过,如果要使用宿主项目的子网在服务项目中创建服务连接,则必须使用 Google Cloud CLI 或 API 创建服务连接。

控制台

  1. 转到“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:用于子网的项目。

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

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

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

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

配置防火墙规则

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

端点类型 客户端流量的 IP 地址范围 详情
Private Service Connect 端点(基于转发规则) 与此服务关联的 Private Service Connect 子网的 IP 地址范围。 如果您使用的是默认网络,则预先填充的 default-allow-internal 规则允许此流量,除非有优先级较高的规则阻止它。
带有使用方 HTTP(S) 服务控制的 Private Service Connect 端点(基于全球外部 HTTP(S) 负载均衡器)
  • 130.211.0.0/22
  • 35.191.0.0/16
全球外部 HTTP(S) 负载均衡器是在 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

替换以下内容:

  • 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

替换以下内容:

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

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

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

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

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

发布使用自动项目批准的服务

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

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

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

如果您在受 VPC Service Controls 边界(该边界限制 compute.googleapis.comservicedirectory.googleapis.comdns.googleapis.com)保护的项目中创建服务连接,则需要进行额外配置。如需了解详情,请参阅为 VPC Service Controls 配置入站和出站规则

控制台

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

    转到 Private Service Connect

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

  3. 点击发布服务

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

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

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

  6. 如果看到系统提示,请选择与要发布的服务关联的转发规则

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

  8. 为该服务选择一个或多个子网。如果要添加新子网,您可以按照如下方式创建一个:

    1. 点击预留新子网
    2. 输入子网的名称和(可选)说明
    3. 为子网选择区域
    4. 输入用于子网的 IP 范围,然后点击添加
  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:与您要发布的服务关联的转发规则的名称。

  • PSC_SUBNET_LIST:要与此服务连接搭配使用的一个或多个子网(使用英文逗号分隔)。

  • 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:服务连接的项目。

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

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

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

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

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

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

发布使用显式项目批准的服务

按照以下说明发布服务,这样想要连接到该服务的使用方必须经过您的显式批准。如果要自动批准使用方连接,请参阅发布使用自动项目批准的服务

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

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

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

如果您在受 VPC Service Controls 边界(该边界限制 compute.googleapis.comservicedirectory.googleapis.comdns.googleapis.com)保护的项目中创建服务连接,则需要进行额外配置。如需了解详情,请参阅为 VPC Service Controls 配置入站和出站规则

控制台

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

    转到 Private Service Connect

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

  3. 点击发布服务

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

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

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

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

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

  8. 为该服务选择一个或多个子网

    如果要添加新子网,您可以按照如下方式创建一个:

    1. 点击预留新子网
    2. 输入子网的名称和(可选)说明
    3. 为子网选择区域
    4. 输入用于子网的 IP 范围,然后点击添加
  9. 如果您要查看使用方连接信息,请选中协议复选框。

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

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

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

  11. 选择接受选定项目的连接

  12. 点击添加接受的项目,然后输入您希望允许其连接到相应服务的项目的详细信息:

    • 项目名称:允许来自其连接的项目的名称。
    • 连接限制:允许来自此项目的连接数。
  13. 点击添加服务

gcloud

gcloud compute service-attachments create ATTACHMENT_NAME \
    --region=REGION \
    --producer-forwarding-rule=RULE_NAME  \
    --connection-preference=ACCEPT_MANUAL \
    --consumer-accept-list=ACCEPTED_PROJECT_1=LIMIT_1,ACCEPTED_PROJECT_2=LIMIT_2 \
    --consumer-reject-list=REJECTED_PROJECT_1,REJECTED_PROJECT_2 \
    --nat-subnets=PSC_SUBNET_LIST \
    [ --enable-proxy-protocol ] \
    [--domain-names=DOMAIN_NAME]

替换以下内容:

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

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

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

  • ACCEPTED_PROJECT_1ACCEPTED_PROJECT_2:要接受的项目。--consumer-accept-list 是可选项,可以包含一个或多个项目。

  • LIMIT_1LIMIT_2:相应项目的连接限制。连接限制代表可以连接到此服务的使用方的 Private Service Connect 端点的数量。所接受的项目都必须配置有一个连接限制。

  • REJECTED_PROJECT_1REJECTED_PROJECT_2:要拒绝的项目。--consumer-reject-list 是可选项,可以包含一个或多个项目。

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

  • 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",
  ],
  "consumerRejectList": [
    "REJECTED_PROJECT_1",
    "REJECTED_PROJECT_2",
  ],
  "consumerAcceptList": [
    "consumerProjectLimit": {
      "projectId": "ACCEPTED_PROJECT_1",
      "connectionsLimit": "LIMIT_2",
    },
    "consumerProjectLimit": {
      "projectId": "ACCEPTED_PROJECT_2",
      "connectionsLimit": "LIMIT_2",
    },
  ],
  "domainNames": [
    "DOMAIN_NAME",
  ],
}

请替换以下内容:

  • PROJECT_ID:服务连接的项目。

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

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

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

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

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

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

  • LIMIT_1LIMIT_2:相应项目的连接限制。连接限制代表可以连接到此服务的使用方的 Private Service Connect 端点的数量。所接受的项目都必须配置有一个连接限制。

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

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

为 VPC Service Controls 配置入站和出站规则

如果您在受 VPC Service Controls 边界(该边界限制 compute.googleapis.comservicedirectory.googleapis.comdns.googleapis.com)保护的项目中创建服务连接,则需要进行额外配置。

在创建 Private Service Connect 端点之前,请向服务使用方索要以下信息:

  • CONSUMER_PROJECT_NUMBER:要在其中创建 Private Service Connect 端点的项目的编号。

  • CONSUMER_SERVICE_ACCOUNT(可选):如果要配置按帐号限制访问权限的入站规则,则为将用于创建 Private Service Connect 端点的服务帐号。

使用此信息创建入站和出站规则,以允许在 Private Service Connect 端点与服务连接之间建立连接。

如需了解如何配置入站和出站规则,请参阅配置入站和出站政策

  1. 配置出站规则,允许从提供方项目到使用方项目 CONSUMER_PROJECT_NUMBER 的出站流量。

    - egressFrom:
        identityType: ANY_IDENTITY
      egressTo:
        operations:
        - serviceName: 'compute.googleapis.com'
          methodSelectors:
          - method: 'ServiceAttachmentsService.Insert'
          - method: 'ServiceAttachmentsService.Patch'
          - method: 'RegionForwardingRulesService.Insert'
        - serviceName: 'servicedirectory.googleapis.com'
          methodSelectors:
          - method: '*'
        - serviceName: 'dns.googleapis.com'
          methodSelectors:
          - method: '*'
        resources:
        - 'projects/CONSUMER_PROJECT_NUMBER'
    
  2. 配置以下入站规则之一:

    • 此示例入站规则允许 CONSUMER_SERVICE_ACCOUNT 创建的使用方端点尝试连接到服务连接。

      - ingressFrom:
          sources:
          - accessLevel: '*' # All Sources
          identities: serviceAccount: CONSUMER_SERVICE_ACCOUNT
        ingressTo:
          operations:
          - serviceName: 'compute.googleapis.com'
            methodSelectors:
            - method: 'RegionForwardingRulesService.Insert'
          - serviceName: 'servicedirectory.googleapis.com'
            methodSelectors:
            - method: '*'
          - serviceName: 'dns.googleapis.com'
            methodSelectors:
            - method: '*'
          resources:
          - '*'
      
    • 此示例入站规则允许任何帐号创建的使用方端点尝试连接到服务连接。

      - ingressFrom:
          sources:
          - accessLevel: '*' # All Sources
          identityType: ANY_IDENTITY
        ingressTo:
          operations:
          - serviceName: 'compute.googleapis.com'
            methodSelectors:
            - method: 'RegionForwardingRulesService.Insert'
          - serviceName: 'servicedirectory.googleapis.com'
            methodSelectors:
            - method: '*'
          - serviceName: 'dns.googleapis.com'
            methodSelectors:
            - method: '*'
          resources:
          - '*'
      

配置入站流量和出站流量规则后,告知服务使用方现在可以在项目 CONSUMER_PROJECT_NUMBER 中创建 Private Service Connect 端点来连接到服务连接。

查看使用方连接信息

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

并非所有服务都支持 PROXY 协议。如需了解详情,请参阅规范

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

如果启用了 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 网络中,如果您删除 Private Service Connect 端点(转发规则),并使用相同的 IP 地址创建一个新端点,则可能会使用同一 pscConnectionId

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

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

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

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

如果您已发布了使用显式项目批准的服务,则可以接受或拒绝来自使用方项目的连接请求。

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

为一项服务接受了使用方端点连接后,该端点可以连接到服务,直至此服务连接被删除。无论项目是被显式接受,还是由于连接偏好设为自动接受连接而连接了使用方端点,这一点都适用。

  • 如果您从接受列表中移除了某个项目,该项目中先前已被接受的任何使用方端点仍然可以连接到该服务。该项目中新使用方端点的连接必须被接受,然后该端点才能连接。

  • 如果您将某个项目添加到拒绝列表,该项目中先前已被接受的所有使用方端点仍然可以连接到该服务。该项目中新使用方端点的连接在连接到该服务时会被拒绝。

控制台

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

    转到 Private Service Connect

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

  3. 点击要管理的服务。

  4. 已连接的项目部分列出了已尝试连接到此服务的项目。选中一个或多个项目旁边的复选框,然后点击接受拒绝

gcloud

  1. 描述您要修改的服务连接。

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

    输出类似于以下示例。如果存在任何待处理的使用方连接,则这些连接会以 PENDING 状态列出。

    在此示例输出中,项目 CONSUMER_PROJECT_1 位于接受列表中,因此接受 ENDPOINT_1 并且可以连接到相应服务。项目 CONSUMER_PROJECT_2 不在接受列表中,因此 ENDPOINT_2 处于待处理状态。将 CONSUMER_PROJECT_2 添加到接受列表后,ENDPOINT_2 的状态会更改为 ACCEPTED,并且端点可以连接到相应服务。

    connectedEndpoints:
    - endpoint: https://www.googleapis.com/compute/v1/projects/CONSUMER_PROJECT_1/regions/REGION_1/forwardingRules/ENDPOINT_1
      pscConnectionId: 'ENDPOINT_1_ID'
      status: ACCEPTED
    - endpoint: https://www.googleapis.com/compute/v1/projects/CONSUMER_PROJECT_2/regions/REGION_2/forwardingRules/ENDPOINT_2
      pscConnectionId: 'ENDPOINT_2_ID'
      status: PENDING
    connectionPreference: ACCEPT_MANUAL
    consumerAcceptLists:
    - connectionLimit: LIMIT_1
      projectIdOrNum: CONSUMER_PROJECT_1
    creationTimestamp: 'TIMESTAMP'
    description: 'DESCRIPTION'
    enableProxyProtocol: false
    fingerprint: FINGERPRINT
    id: 'ID'
    kind: compute#serviceAttachment
    name: NAME
    natSubnets:
    - https://www.googleapis.com/compute/v1/projects/PRODUCER_PROJECT/regions/REGION/subnetworks/PSC_SUBNET
    pscServiceAttachmentId:
      high: 'PSC_ATTACH_ID_HIGH'
      low: 'PSC_ATTACH_ID_LOW'
    region: https://www.googleapis.com/compute/v1/projects/PRODUCER_PROJECT/regions/REGION
    selfLink: https://www.googleapis.com/compute/v1/projects/projects/PRODUCER_PROJECT/regions/REGION/serviceAttachments/ATTACHMENT_NAME
    targetService: https://www.googleapis.com/compute/v1/projects/PRODUCER_PROJECT/regions/REGION/forwardingRules/PRODUCER_FWD_RULE
    
  2. 接受或拒绝使用方项目。

    您可以指定 --consumer-accept-list 和/或 --consumer-reject-list。您可以在 --consumer-accept-list--consumer-reject-list 中指定多个值。

    gcloud compute service-attachments update ATTACHMENT_NAME \
        --region=REGION \
        --consumer-accept-list=ACCEPTED_PROJECT_1=LIMIT_1,ACCEPTED_PROJECT_2=LIMIT_2 \
        --consumer-reject-list=REJECTED_PROJECT_1,REJECTED_PROJECT_2
    

    请替换以下内容:

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

    • REGION:服务连接所在区域。

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

    • LIMIT_1LIMIT_2:相应项目的连接限制。连接限制代表可以连接到此服务的使用方的 Private Service Connect 端点的数量。所接受的项目都必须配置有一个连接限制。

    • REJECTED_PROJECT_1REJECTED_PROJECT_2:要拒绝的项目。--consumer-reject-list 是可选项,可以包含一个或多个项目。

API

  1. 描述您要修改的服务连接。

    如果存在任何待处理的使用方连接,则这些连接会以 PENDING 状态列出。

    GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME
    
  2. 接受或拒绝使用方项目。

    PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME
    
    {
      ...
      "consumerAcceptLists": [
        {
          "projectIdOrNum": "ACCEPTED_PROJECT_1"
          "connectionLimit": "LIMIT_1",
        },
        {
          "projectIdOrNum": "ACCEPTED_PROJECT_2"
          "connectionLimit": "LIMIT_2",
        }
      ],
      "consumerRejectLists": [
        "REJECTED_PROJECT_1",
        "REJECTED_PROJECT_2",
      ],
      ...
    }
    

    请替换以下内容:

    • PROJECT_ID:服务连接的项目。

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

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

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

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

    • LIMIT_1LIMIT_2:相应项目的连接限制。连接限制代表可以连接到此服务的使用方的 Private Service Connect 端点的数量。所接受的项目都必须配置有一个连接限制。

更改已发布服务的连接偏好设置

对于已发布服务,您可以在自动接受项目与显式接受项目之间切换。

从自动接受更改为显式接受并不会影响在此更改之前连接到服务的使用方端点。 现有的使用方端点仍可连接到已发布的服务,直到服务连接被删除为止。新的使用方端点只有在被接受后,才能连接到该服务。如需了解详情,请参阅管理对已发布服务的访问请求

控制台

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

    转到 Private Service Connect

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

  3. 点击要更新的服务,然后点击修改

  4. 选择所需的连接偏好设置:

    • 接受选定项目的连接
    • 自动接受所有项目的连接
  5. 如果您要切换为接受选定项目的连接,则可以提供要允许的项目的详细信息,也可以稍后再添加。

    1. 点击添加接受的项目
    2. 输入项目连接限制
  6. 点击保存

gcloud

  • 将服务连接的连接偏好设置从 ACCEPT_AUTOMATIC 改为 ACCEPT_MANUAL

    您可以使用 --consumer-accept-list--consumer-reject-list 控制哪些项目可以连接到您的服务。您可以在更改连接偏好设置时配置接受列表和拒绝列表,也可以稍后更新这些列表。

    gcloud compute service-attachments update ATTACHMENT_NAME \
        --region=REGION \
        --connection-preference=ACCEPT_MANUAL \
        [ --consumer-accept-list=ACCEPTED_PROJECT_1=LIMIT_1,ACCEPTED_PROJECT_2=LIMIT_2] \
        [ --consumer-reject-list=REJECTED_PROJECT_1,REJECTED_PROJECT_2 ]
    
    • ATTACHMENT_NAME:服务连接的名称。

    • REGION:服务连接所在区域。

    • ACCEPTED_PROJECT_1ACCEPTED_PROJECT_2:要接受的项目。--consumer-accept-list 是可选项,可以包含一个或多个项目。

    • LIMIT_1LIMIT_2:相应项目的连接限制。连接限制代表可以连接到此服务的使用方的 Private Service Connect 端点的数量。所接受的项目都必须配置有一个连接限制。

    • REJECTED_PROJECT_1REJECTED_PROJECT_2:要拒绝的项目。--consumer-reject-list 是可选项,可以包含一个或多个项目。

  • 将服务连接的连接偏好设置从 ACCEPT_MANUAL 改为 ACCEPT_AUTOMATIC

    如果您的接受列表或拒绝列表中包含值,请在更改连接偏好设置 ("") 时将这些值设置为空。

    gcloud compute service-attachments update ATTACHMENT_NAME \
        --region=REGION \
        --connection-preference=ACCEPT_AUTOMATIC \
         --consumer-accept-list="" \
         --consumer-reject-list=""
    
    • ATTACHMENT_NAME:服务连接的名称。

    • REGION:服务连接所在区域。

API

  • 将服务连接的连接偏好设置从 ACCEPT_AUTOMATIC 改为 ACCEPT_MANUAL
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME

{
  ...
  "connectionPreference": "ACCEPT_MANUAL",
  "consumerAcceptLists": [
    {
      "projectIdOrNum": "ACCEPTED_PROJECT_1"
      "connectionLimit": "LIMIT_1",
    },
    {
      "projectIdOrNum": "ACCEPTED_PROJECT_2"
      "connectionLimit": "LIMIT_2",
    }
  ],
  "consumerRejectLists": [
    "REJECTED_PROJECT_1",
    "REJECTED_PROJECT_2",
  ],
  ...
}

请替换以下内容:

  • PROJECT_ID:服务连接的项目。

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

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

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

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

  • LIMIT_1LIMIT_2:相应项目的连接限制。连接限制代表可以连接到此服务的使用方的 Private Service Connect 端点的数量。所接受的项目都必须配置有一个连接限制。

  • 将服务连接的连接偏好设置从 ACCEPT_MANUAL 改为 ACCEPT_AUTOMATIC

    如果 consumerAcceptListsconsumerRejectLists 字段指定了任何项目,请在将连接偏好设置更改为 ACCEPT_AUTOMATIC 时将其设置为空。

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

{
  ...
  "connectionPreference": "ACCEPT_AUTOMATIC",
  "consumerAcceptLists": [ ],
  "consumerRejectLists": [ ],
  ...
}

请替换以下内容:

  • PROJECT_ID:服务连接的项目。

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

  • ATTACHMENT_NAME:服务连接的名称。

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

您可以修改已发布的服务,以在其配置中添加或移除 Private Service Connect 子网。

例如,您可能需要为现有服务提供更多 IP 地址。如需添加更多地址,请执行以下操作之一:

如果您从已发布的服务中移除 Private Service Connect 子网,该子网中的 IP 地址不会被释放。仅在使用方 Private Service Connect 端点被删除或访问 Private Service Connect 端点的客户端虚拟机被删除时,IP 地址才会释放。

如果您更改了子网配置,请更新防火墙规则以允许来自新子网的请求到达后端虚拟机。

控制台

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

    转到 Private Service Connect

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

  3. 点击要更新的服务,然后点击修改

  4. 修改用于此服务的子网。

    如果要添加新子网,您可以按照如下方式创建一个:

    1. 点击预留新子网
    2. 输入子网的名称和(可选)说明
    3. 为子网选择区域
    4. 输入用于子网的 IP 范围,然后点击添加
  5. 点击保存

gcloud

更新用于此服务连接的 Private Service Connect 子网。

gcloud compute service-attachments update ATTACHMENT_NAME \
    --region=REGION \
    --nat-subnets=PSC_SUBNET_LIST

替换以下内容:

  • ATTACHMENT_NAME:服务连接的名称。

  • REGION:服务连接所在区域。

  • PSC_SUBNET_LIST:要与此服务连接搭配使用的一个或多个子网(使用英文逗号分隔)。

API

更新用于此服务连接的 Private Service Connect 子网。

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

{
  ...
  "natSubnets": [
    "PSC_SUBNET1_URI",
    "PSC_SUBNET2_URI",
  ],
  ...
}

替换以下内容:

  • PROJECT_ID:服务连接的项目。

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

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

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

列出已发布的服务

您可以列出所有服务。

控制台

  1. 在 Google Cloud Console 中,转到 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:服务连接的名称。

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

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

控制台

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

  1. 在 Google Cloud Console 中,转到 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 Console 中,转到 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:服务连接的名称。

日志记录

您可以在包含后端虚拟机的子网上启用 VPC 流日志。日志显示 Private Service Connect 子网中后端虚拟机与 IP 地址之间的流。

已知问题

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