使用 Private Service Connect 发布代管式服务
服务提供方可以借助 Private Service Connect,在您的 VPC 网络中使用内部 IP 地址发布服务。服务使用方可以使用 VPC 网络中的内部 IP 地址访问您已发布的服务。
本指南介绍如何使用 Private Service Connect 发布服务。如需发布服务,请执行以下操作:
有两种类型的 Private Service Connect 端点可以连接到已发布的服务:
这些端点类型需要的提供方配置略有不同。如需了解详情,请参阅受支持的配置。
角色
以下 IAM 角色提供了执行本指南中的任务所需的权限。
- Compute Network Admin
(
roles/compute.networkAdmin
)
准备工作
确定应允许从所有项目访问该服务,还是要控制哪些项目可以访问您的服务。
确定您要支持的端点类型。如需详细了解服务配置要求,请参阅受支持的配置。
如需详细了解端点类型,请参阅使用 Private Service Connect 发布和使用代管式服务。
限制
数据包镜像无法镜像 Private Service Connect 发布的服务流量的数据包。
带有使用方 HTTP(S) 服务控制的 Private Service Connect 端点不会出现在连接的客户端列表中。
如果您在共享 VPC 宿主项目中创建 Private Service Connect 子网,并且想要在服务项目中创建服务连接,则必须使用 Google Cloud CLI 或 API 来创建服务连接。
如需创建指向用于内部协议转发的转发规则的服务连接,您必须使用 Google Cloud CLI 或 API。
如需了解问题和解决方法,请参阅已知问题。
规格
以下部分介绍了以下主题:
支持的负载均衡器类型
支持每个 Private Service Connect 端点类型所需的受支持负载均衡器和服务连接配置
支持的负载均衡器类型
您可以使用以下负载均衡器托管服务:
服务提供方 VPC 网络中的内部 TCP/UDP 负载均衡器。
服务提供方 VPC 网络中的内部 HTTP(S) 负载均衡器。
服务提供方 VPC 网络中的内部协议转发。
服务提供方 VPC 网络中的内部区域级 TCP 代理负载均衡器(预览版)。后端可以位于 Google Cloud、其他云环境、本地环境或这些位置的任意组合中。
如需了解每种方法支持的配置,请参阅受支持的负载均衡器配置。
您还可以发布在 Google Kubernetes Engine 上的内部 TCP/UDP 负载均衡器上托管的服务。GKE 文档中的使用 Private Service Connect 创建内部 TCP/UDP 负载均衡器中介绍了此配置,包括负载均衡器和服务连接配置。
受支持的配置
可以连接到已发布的服务的两种 Private Service Connect 端点类型具有不同的配置要求。下表总结了已发布的服务支持每种端点类型所需的配置。
服务提供方配置 | Private Service Connect 端点(基于转发规则) | 具有 HTTP(S) 服务控制的 Private Service Connect 端点(基于全球外部 HTTP(S) 负载均衡器) | |
---|---|---|---|
服务提供方负载均衡器 | |||
支持的负载均衡器类型 |
|
仅限内部 TCP/UDP 负载均衡器 | |
支持的协议 | 负载均衡器支持的任何流量 | 内部 TCP/UDP 负载均衡器必须传送 HTTPS 流量 | |
内部 TCP/UDP 负载均衡器配置 | |||
全球访问权限 | 支持 连接到已发布服务的所有 Private Service Connect 端点必须与已发布的服务位于同一区域 |
必填 | |
使用同一 IP 地址的多条转发规则 |
不支持 | 不支持 | |
子集 | 不支持 | 不支持 | |
会话亲和性设置为 2 元组或 3 元组 |
不受支持。 配置 5 元组会话亲和性1。 |
不受支持。 配置 5 元组会话亲和性1。 |
|
数据包镜像 | 不支持 | 不支持 | |
服务连接 | |||
PROXY 协议 | 支持以下负载均衡器上托管的 TCP 服务:
不支持以下配置:
|
不支持 | |
发布模式 | |||
自动项目批准 | 任何项目中的端点均可连接 | 任何项目中的端点均可连接 | |
明确批准 | 可在创建端点之前或之后接受使用方项目 | 必须在创建端点之前接受使用方项目 |
NONE
或 CLIENT_IP_PORT_PROTO
。
DNS 配置
发布服务(创建服务连接)时,您可以选择配置 DNS 域名。
您必须拥有要配置的域名。如果您指定了某个网域,但不拥有该网域,则服务发布将失败。如需验证所有权,请前往 Google Search Console。如需详细了解如何验证网域,请参阅添加网站资源。您在服务连接中指定的域名可以是您验证的网域的子网域。例如,您可以注册 example.com
,然后使用域名 us-west1.p.example.com
创建服务连接。
如果您为服务配置了域名,则在连接到该服务的 Private Service Connect 端点创建后,服务使用方的 VPC 网络中会进行以下配置:
为指定网域创建 Service Directory DNS 区域
在该区域中为每个 Private Service Connect 端点创建一个 DNS 条目
建议的域名格式为 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 创建服务连接。
在服务的负载均衡器所在的区域中创建子网。
您无法将常规子网转换为 Private Service Connect 子网。
控制台
- 转到“VPC 网络”页面。
转到 VPC 网络 - 点击某个 VPC 网络的名称以显示其 VPC 网络详情页面。
- 点击添加子网。在显示的面板中:
- 提供名称。
- 选择区域。
- 在用途部分中,选择 Private Service Connect。
- 输入 IP 地址范围。例如
10.10.10.0/24
。 - 点击添加。
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) 负载均衡器) |
|
全球外部 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 协议,请参阅查看使用方连接信息。
控制台
在 Google Cloud Console 中,转到 Private Service Connect 页面。
点击已发布服务标签页。
点击发布服务。
选择负载均衡器类型:内部 TCP/UDP 负载均衡器或内部 HTTP(S) 负载均衡器。
选择托管您要发布的服务的内部负载均衡器。
“网络”和“区域”字段会填充所选内部负载均衡器的详细信息。
如果看到系统提示,请选择与要发布的服务关联的转发规则。
对于服务名称,输入服务连接的名称。
为该服务选择一个或多个子网。如果要添加新子网,您可以按照如下方式创建一个:
- 点击预留新子网
- 输入子网的名称和(可选)说明。
- 为子网选择区域。
- 输入用于子网的 IP 范围,然后点击添加。
如果您要查看使用方连接信息,请选择使用代理协议。
如果要配置域名,请输入域名(包括结尾句点)。
建议的域名格式为
REGION.p.DOMAIN.
您必须拥有域名。如需了解详情,请参阅 DNS 配置。
选择自动接受所有项目的连接。
点击添加服务。
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_URI
和PSC_SUBNET_2_URI
:要用于此服务连接的子网 URI。您可以通过 URI 指定一个或多个子网。DOMAIN_NAME
:服务的 DNS 域名,包括结尾句点。建议的格式:REGION.p.DOMAIN.
如需了解详情,请参阅 DNS 配置。
发布使用显式项目批准的服务
按照以下说明发布服务,这样想要连接到该服务的使用方必须经过您的显式批准。如果要自动批准使用方连接,请参阅发布使用自动项目批准的服务。
发布服务时,您需要创建服务连接。服务使用方使用服务连接详情连接到您的服务。
如果您将一个项目同时添加到了接受列表和拒绝列表,则来自该项目的连接请求会被拒绝。
若要查看使用方连接信息,您可以在受支持的服务上启用 PROXY 协议。如需了解支持的服务,请参阅受支持的配置。如需详细了解 PROXY 协议,请参阅查看使用方连接信息。
控制台
在 Google Cloud Console 中,转到 Private Service Connect 页面。
点击已发布服务标签页。
点击发布服务。
选择负载均衡器类型:内部 TCP/UDP 负载均衡器或内部 HTTP(S) 负载均衡器。
选择托管您要发布的服务的内部负载均衡器。
“网络”和“区域”字段会填充所选内部负载均衡器的详细信息。
如果出现提示,请选择与要发布的服务关联的转发规则。
对于服务名称,输入服务连接的名称。
为该服务选择一个或多个子网。
如果要添加新子网,您可以按照如下方式创建一个:
- 点击预留新子网
- 输入子网的名称和(可选)说明。
- 为子网选择区域。
- 输入用于子网的 IP 范围,然后点击添加。
如果您要查看使用方连接信息,请选中协议复选框。
如果要配置域名,请输入域名(包括结尾句点)。
建议的域名格式为
REGION.p.DOMAIN.
您必须拥有域名。如需了解详情,请参阅 DNS 配置。
选择接受选定项目的连接。
点击添加接受的项目,然后输入您希望允许其连接到相应服务的项目的详细信息:
- 项目名称:允许来自其连接的项目的名称。
- 连接限制:允许来自此项目的连接数。
点击添加服务。
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_1
和ACCEPTED_PROJECT_2
:要接受的项目。--consumer-accept-list
是可选项,可以包含一个或多个项目。LIMIT_1
和LIMIT_2
:相应项目的连接限制。连接限制代表可以连接到此服务的使用方的 Private Service Connect 端点的数量。所接受的项目都必须配置有一个连接限制。REJECTED_PROJECT_1
和REJECTED_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_URI
和PSC_SUBNET_2_URI
:要用于此服务连接的子网 URI。您可以通过 URI 指定一个或多个子网。REJECTED_PROJECT_1
和REJECTED_PROJECT_2
:要拒绝的项目。consumerRejectList
是可选项,可以包含一个或多个项目。ACCEPTED_PROJECT_1
和ACCEPTED_PROJECT_2
:要接受的项目。consumerAcceptList
是可选项,可以包含一个或多个项目。LIMIT_1
和LIMIT_2
:相应项目的连接限制。连接限制代表可以连接到此服务的使用方的 Private Service Connect 端点的数量。所接受的项目都必须配置有一个连接限制。DOMAIN_NAME
:服务的 DNS 域名,包括结尾句点。建议的格式:REGION.p.DOMAIN.
如需了解详情,请参阅 DNS 配置。
查看使用方连接信息
默认情况下,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 协议标头中。
管理对已发布服务的访问请求
如果您已发布了使用显式项目批准的服务,则可以接受或拒绝来自使用方项目的连接请求。
如果您将一个项目同时添加到了接受列表和拒绝列表,则来自该项目的连接请求会被拒绝。
为一项服务接受了使用方端点连接后,该端点可以连接到服务,直至此服务连接被删除。无论项目是被显式接受,还是由于连接偏好设为自动接受连接而连接了使用方端点,这一点都适用。
如果您从接受列表中移除了某个项目,该项目中先前已被接受的任何使用方端点仍然可以连接到该服务。该项目中新使用方端点的连接必须被接受,然后该端点才能连接。
如果您将某个项目添加到拒绝列表,该项目中先前已被接受的所有使用方端点仍然可以连接到该服务。该项目中新使用方端点的连接在连接到该服务时会被拒绝。
控制台
在 Google Cloud Console 中,转到 Private Service Connect 页面。
点击已发布服务标签页。
点击要管理的服务。
已连接的项目部分列出了已尝试连接到此服务的项目。选中一个或多个项目旁边的复选框,然后点击接受或拒绝。
gcloud
描述您要修改的服务连接。
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
接受或拒绝使用方项目。
您可以指定
--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_1
和ACCEPTED_PROJECT_2
:要接受的项目。consumerAcceptList
是可选项,可以包含一个或多个项目。LIMIT_1
和LIMIT_2
:相应项目的连接限制。连接限制代表可以连接到此服务的使用方的 Private Service Connect 端点的数量。所接受的项目都必须配置有一个连接限制。REJECTED_PROJECT_1
和REJECTED_PROJECT_2
:要拒绝的项目。--consumer-reject-list
是可选项,可以包含一个或多个项目。
API
描述您要修改的服务连接。
如果存在任何待处理的使用方连接,则这些连接会以
PENDING
状态列出。GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/serviceAttachments/ATTACHMENT_NAME
接受或拒绝使用方项目。
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_1
和REJECTED_PROJECT_2
:要拒绝的项目。consumerRejectList
是可选项,可以包含一个或多个项目。ACCEPTED_PROJECT_1
和ACCEPTED_PROJECT_2
:要接受的项目。consumerAcceptList
是可选项,可以包含一个或多个项目。LIMIT_1
和LIMIT_2
:相应项目的连接限制。连接限制代表可以连接到此服务的使用方的 Private Service Connect 端点的数量。所接受的项目都必须配置有一个连接限制。
更改已发布服务的连接偏好设置
对于已发布服务,您可以在自动接受项目与显式接受项目之间切换。
从自动接受更改为显式接受并不会影响在此更改之前连接到服务的使用方端点。 现有的使用方端点仍可连接到已发布的服务,直到服务连接被删除为止。新的使用方端点只有在被接受后,才能连接到该服务。如需了解详情,请参阅管理对已发布服务的访问请求。
控制台
在 Google Cloud Console 中,转到 Private Service Connect 页面。
点击已发布服务标签页。
点击要更新的服务,然后点击修改。
选择所需的连接偏好设置:
- 接受选定项目的连接
- 自动接受所有项目的连接
如果您要切换为接受选定项目的连接,则可以提供要允许的项目的详细信息,也可以稍后再添加。
- 点击添加接受的项目。
- 输入项目和连接限制。
点击保存。
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_1
和ACCEPTED_PROJECT_2
:要接受的项目。--consumer-accept-list
是可选项,可以包含一个或多个项目。LIMIT_1
和LIMIT_2
:相应项目的连接限制。连接限制代表可以连接到此服务的使用方的 Private Service Connect 端点的数量。所接受的项目都必须配置有一个连接限制。REJECTED_PROJECT_1
和REJECTED_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_1
和REJECTED_PROJECT_2
:要拒绝的项目。consumerRejectList
是可选项,可以包含一个或多个项目。ACCEPTED_PROJECT_1
和ACCEPTED_PROJECT_2
:要接受的项目。consumerAcceptList
是可选项,可以包含一个或多个项目。LIMIT_1
和LIMIT_2
:相应项目的连接限制。连接限制代表可以连接到此服务的使用方的 Private Service Connect 端点的数量。所接受的项目都必须配置有一个连接限制。将服务连接的连接偏好设置从
ACCEPT_MANUAL
改为ACCEPT_AUTOMATIC
。如果
consumerAcceptLists
或consumerRejectLists
字段指定了任何项目,请在将连接偏好设置更改为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 子网,并修改服务连接,以添加新子网。
修改子网,以扩展 IPv4 范围。
如果您从已发布的服务中移除 Private Service Connect 子网,该子网中的 IP 地址不会被释放。仅在使用方 Private Service Connect 端点被删除或访问 Private Service Connect 端点的客户端虚拟机被删除时,IP 地址才会释放。
如果您更改了子网配置,请更新防火墙规则以允许来自新子网的请求到达后端虚拟机。
控制台
在 Google Cloud Console 中,转到 Private Service Connect 页面。
点击已发布服务标签页。
点击要更新的服务,然后点击修改。
修改用于此服务的子网。
如果要添加新子网,您可以按照如下方式创建一个:
- 点击预留新子网
- 输入子网的名称和(可选)说明。
- 为子网选择区域。
- 输入用于子网的 IP 范围,然后点击添加。
点击保存。
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_URI
和PSC_SUBNET2_URI
:您要用于此服务连接的子网的 URI。您可以指定一个或多个子网。
列出已发布的服务
您可以列出所有服务。
控制台
在 Google Cloud Console 中,转到 Private Service Connect 页面。
点击已发布服务标签页。
此时会显示 Private Service Connect 服务连接。
gcloud
列出服务连接。
gcloud compute service-attachments list [--regions=REGION_LIST]
请替换以下内容:
REGION_LIST
:要查看其服务连接的一个或多个区域的英文逗号分隔列表。例如us-central1
或us-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。
在 Google Cloud Console 中,转到 Private Service Connect 页面。
点击已发布服务标签页。
点击要查看的服务。
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
:服务连接的名称。
删除已发布的服务
即使一项已发布服务的服务连接具有使用方连接,您也可以删除该服务。删除已发布的服务只会移除服务连接。关联的负载均衡器不会被删除。在删除已发布的服务时,以下规则适用:
来自 Private Service Connect 端点(基于转发规则)的流量不再发送到负载均衡器。
来自具有使用方 HTTP(S) 服务控制的 Private Service Connect 端点(基于全球外部 HTTP(S) 负载均衡器)的流量会发送到负载均衡器,直到负载均衡器被删除。
控制台
在 Google Cloud Console 中,转到 Private Service Connect 页面。
点击已发布服务标签页。
点击要删除的服务。
点击删除。
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 地址之间的流。
VPC Service Controls
VPC Service Controls 和 Private Service Connect 彼此兼容。如果部署了 Private Service Connect 端点的 VPC 网络位于 VPC Service Controls 边界内,则 Private Service Connect 端点属于同一边界。任何通过 Private Service Connect 端点访问的 VPC Service Controls 支持的服务都受该 VPC Service Controls 边界的政策约束。
创建 Private Service Connect 端点时,使用方和提供方项目之间会进行控制平面 API 调用,以建立 Private Service Connect 连接。在位于同一 VPC Service Controls 边界内的使用方和提供方项目之间建立 Private Service Connect 连接不需要使用出站流量政策进行明确授权。通过 Private Service Connect 端点与 VPC Service Controls 支持的服务进行的通信受 VPC Service Controls 边界保护。
已知问题
- 使用
PATCH
API 更新服务连接时,您必须在请求正文中提供服务连接的所有字段,而不能仅提供要更新的字段。使用serviceAttachments.get
可以检索所有字段。
问题排查
更新服务连接时出错
如果您在更新服务连接时看到以下错误消息,则表示接受列表或拒绝列表可能包含已删除的项目:The
resource PROJECT was not found
。
请从服务连接配置中移除已删除的项目以解决此问题。
使用
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
修改命令输出以从接受列表和拒绝列表中移除任何已删除的项目。
更新服务连接以移除已删除的项目。
如需更新接受列表,请执行以下操作:
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