使用 Private Service Connect 访问代管式服务
借助 Private Service Connect,您可以使用具有您的 VPC 网络中内部 IP 地址的端点连接到服务提供方。
本文档介绍如何使用 Private Service Connect 端点连接到位于另一个 VPC 网络中的受支持代管式服务。您可以连接到自己的服务,或其他服务提供方提供的服务。如需了解详情,请参阅发布代管式服务。
角色
以下 IAM 角色提供了执行本指南中的任务所需的权限。
任务 | 角色 |
---|---|
创建 Private Service Connect 端点 |
同时具有以下两个角色: Compute Network Admin ( roles/compute.networkAdmin ) 和
Service Directory Editor ( roles/servicedirectory.editor )
|
自动或手动为 Private Service Connect 端点配置 DNS 条目 |
DNS Administrator
(roles/dns.admin )
|
准备工作
您必须在项目中启用 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 端点。
无法从对等互连的 VPC 网络访问 Private Service Connect 端点。
您不能从使用 VLAN 连接连接到一个 VPC 网络的本地环境向用于访问另一个 VPC 网络中的服务的 Private Service Connect 端点发送请求。
如需了解如何从使用 Cloud VPN 连接的本地环境访问 Private Service Connect 端点,请参阅从本地主机访问端点。
数据包镜像无法镜像 Private Service Connect 发布的服务流量的数据包。
自动 DNS 配置
如果存在以下配置,则系统会为 Private Service Connect 端点自动创建 DNS 条目:
服务提供方已为服务配置域名。
Private Service Connect 端点已向 Service Directory 命名空间注册。
所有新端点都会自动向 Service Directory 注册,但旧端点可能不会注册。
如果两个配置都存在,则 Private Service Connect 端点创建时,系统会创建名为 NAMESPACE--REGION
的 Service Directory DNS 区域。此专用区域存储位于 REGION
区域的 Service Directory 命名空间 NAMESPACE
中的服务的 DNS 条目。
创建 Private Service Connect 端点后,您可以验证 Service Directory DNS 区域是否已创建。如果 Service Directory DNS 区域未创建,您可以手动创建类似的配置。如需了解详情,请参阅查看 Service Directory DNS 区域。
如果您不希望创建这些 DNS 条目,请执行以下操作之一:
如果您没有将 Cloud DNS 用于其他目的,请停用 Cloud DNS API 或移除 Cloud DNS 所需的权限。
等待 DNS 区域创建完成,然后手动删除 DNS 区域。
如果您想要手动配置 DNS,请参阅手动配置 DNS。
创建 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 注册该端点。
控制台
在 Google Cloud Console 中,转到 Private Service Connect。
点击已连接的端点标签页。
点击连接端点。
对于目标,选择已发布的服务。
对于目标服务,输入要连接到的服务连接 URI。
服务连接 URI 的格式为:
projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME
对于端点名称,输入要用于端点的名称。
为端点选择网络。
为端点选择子网。
为端点选择 IP 地址。如果您需要新的 IP 地址,可以创建一个:
- 点击 IP 地址下拉菜单,然后选择创建 IP 地址。
- 为 IP 地址输入名称和可选的描述。
对于静态 IP 地址,选择自动分配或让我选择。
如果您选择了让我选择,请输入您要使用的自定义 IP 地址。
点击预留。
从下拉列表中选择命名空间,或者创建新的命名空间。
系统会根据所选子网填充区域。
点击添加端点。
gcloud
预留要分配给该端点的内部 IP 地址。
gcloud compute addresses create ADDRESS_NAME \ --region=REGION \ --subnet=SUBNET
请替换以下内容:
ADDRESS_NAME
:分配给预留 IP 地址的名称。REGION
:端点 IP 地址所在的区域。此区域必须与服务提供方的服务连接所在区域相同。SUBNET
:端点 IP 地址的子网名称。
查找预留的 IP 地址。
gcloud compute addresses list --filter="name=ADDRESS_NAME"
创建转发规则,以将该端点连接到服务提供方的服务连接。
gcloud compute forwarding-rules create ENDPOINT_NAME \ --region=REGION \ --network=NETWORK_NAME \ --address=ADDRESS_NAME \ --target-service-attachment=SERVICE_ATTACHMENT \ [ --service-directory-registration=projects/PROJECT_ID/locations/REGION/namespaces/NAMESPACE ]
请替换以下内容:
ENDPOINT_NAME
:分配给端点的名称。REGION
:端点所在区域。此区域必须与服务提供方的服务连接所在区域相同。NETWORK_NAME
:端点的 VPC 网络的名称。ADDRESS_NAME
:预留地址的名称。SERVICE_ATTACHMENT
:服务提供方的服务连接的 URI。例如:projects/SERVICE_PROJECT/regions/REGION/serviceAttachments/SERVICE_NAME
PROJECT_ID
:您的项目 ID。NAMESPACE
:您要使用的 Service Directory 命名空间。如果您指定的命名空间不存在,则系统会创建这个命名空间。如果省略
--service-directory-registration
标志,则会使用默认命名空间goog-psc-default
。
API
预留要分配给该端点的内部 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
查找网络的网址。
创建转发规则以将端点连接到 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
。
查看 Service Directory DNS 区域
如果满足自动 DNS 配置的前提条件,系统将创建名称为 NAMESPACE--REGION
格式的 DNS 区域。
控制台
在 Google Cloud 控制台中,进入 Cloud DNS 区域页面。
查找名为
NAMESPACE--REGION
的专用区域。
gcloud
运行以下命令以列出所有专用 DNS 区域:
gcloud dns managed-zones list \ --filter="visibility=private"
运行以下命令以获取名为
NAMESPACE--REGION
的区域的详细信息。gcloud dns managed-zones describe NAMESPACE--REGION
如果该区域不存在,请查看 Private Service Connect 端点的详细信息,并检查端点配置是否包含命名空间值。
如果端点具有命名空间配置,请参阅配置 Service Directory DNS 区域。
如果端点没有命名空间配置,请参阅向 Service Directory 注册 Private Service Connect 端点。
列出端点
您可以列出所有已配置的 Private Service Connect 端点。
控制台
在 Google Cloud Console 中,转到“Private Service Connect”页面。
点击已连接的端点标签页。
系统会显示 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 端点的所有配置详细信息。
端点的状态可为以下之一:
待处理:端点配置为连接到需要批准的服务,但此项目尚未获得批准。
已接受:端点位于已获批准连接到此服务的项目中。
已拒绝:端点所在的项目禁止连接到此服务。
已关闭:端点连接到已删除的服务连接。
控制台
在 Google Cloud Console 中,转到“Private Service Connect”页面。
点击已连接的端点标签页。
点击要查看的端点。
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 端点。
但是,删除端点时,不会删除以下 Service Directory 配置:
- Service Directory 命名空间
- Service Directory DNS 区域
Service Directory 命名空间和 Service Directory DNS 区域可被其他服务使用。在删除 Service Directory 命名空间或删除 Service Directory DNS 区域之前,请确保命名空间为空。
控制台
在 Google Cloud Console 中,转到 Private Service Connect。
点击已连接的端点标签页。
选择要删除的 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
:端点的名称。
配置 DNS 的其他方法
如果未满足自动 DNS 配置的前提条件,您可以通过其他方式创建 DNS 条目:
如果端点配置了命名空间,请参阅配置 Service Directory DNS 区域。
如果端点未配置命名空间,请参阅向 Service Directory 注册 Private Service Connect 端点。
如果您希望手动配置 DNS,请参阅手动配置 DNS。
配置 Service Directory DNS 区域
如果 Private Service Connect 端点已向 Service Directory 中注册,但其连接的已发布服务未配置域名,则不会进行 DNS 更改。
如果要复制自动 DNS 配置,您可以手动配置由 Service Directory 命名空间支持的 Service Directory DNS 区域。创建区域后,系统会自动为 Private Service Connect 端点创建 DNS 条目。
使用以下配置创建 Service Directory DNS 区域:
区域名称:指定
NAMESPACE--REGION
,其中NAMESPACE
是 Private Service Connect 端点注册的命名空间,REGION
是创建端点的区域。DNS 名称:服务提供方用于其已发布的服务的 DNS 网域。如需了解此信息,请与服务提供方联系。
DNS 名称的格式为
REGION.p.DOMAIN
。例如,如果服务提供方的公共网域是example.com
,而其已发布的服务位于us-west1
,则我们会建议他们使用us-west1.p.example.com
域名指定其服务名称。包括结尾句点,例如us-west1.p.example.com.
Service Directory 命名空间:您为此端点配置的命名空间。
查看 Private Service Connect 端点详细信息以查找 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 注册。但是,如果 Private Service Connect 端点是在启用 Service Directory 自动注册之前创建的,则可能缺少此配置。
您可以删除 Private Service Connect 端点,然后创建新端点,该端点会自动向 Service Directory 注册。
或者,您可以按照以下步骤向 Service Directory 命名空间注册现有 Private Service Connect 端点。
为 Private Service Connect 端点
NAMESPACE
创建一个 Service Directory 命名空间。为 Private Service Connect 端点
SERVICE_NAME
创建一个 Service Directory 服务。对于该服务,请使用与 Private Service Connect 端点
ENDPOINT_NAME
所用转发规则相同的名称。使用名称
default
创建一个 Service Directory 端点,并使用 Private Service Connect 端点的 IP 地址和端口 (443
)。
向 Service Directory 注册 Private Service Connect 端点后,请按照配置 Service Directory DNS 区域中的说明操作。
手动配置 DNS
如果您已阻止自动 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 端点的另一个 VPC 网络中访问)的虚拟机的子网上启用 VPC 流日志。日志显示虚拟机与 Private Service Connect 端点之间的流。
您可以使用审核日志来查看 Private Service Connect 端点的连接状态变化情况。端点的连接状态变化情况会被捕获到 GCE 转发规则类型的资源的系统事件元数据中。您可以通过过滤
pscConnectionStatus
来查看这些条目。例如,当服务提供方允许来自您项目的连接时,端点的连接状态会由
PENDING
变为ACCEPTED
,并且此变化会反映在审核日志中。
从本地主机访问端点
如果您的本地网络连接到 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 区域,请完成以下步骤:
在本地网络连接到的 VPC 网络中,创建入站服务器政策。
在您的本地网络所连接的 VPC 网络中以及您的 Cloud VPN 隧道所在的区域中确定入站转发器入口点。
配置本地系统和本地 DNS 域名服务器,以将 Private Service Connect 端点的 DNS 名称转发到与 VPC 网络连接的 Cloud VPN 隧道所在区域的入站转发器入口点。
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 边界保护。
问题排查
创建专用 DNS 区域失败
创建 Private Service Connect 端点时,系统会创建一个 Service Directory DNS 区域。区域创建可能会由于以下原因而失败:
您尚未在项目中启用 Cloud DNS API。
您没有创建 Service Directory DNS 区域所需的权限。
此 VPC 网络中已存在具有相同区域名称的 DNS 区域。
此 VPC 网络中已存在相同域名的 DNS 区域。
如需手动创建 Service Directory DNS 区域,请执行以下操作:
验证是否已在您的项目中启用 Cloud DNS API。
验证您是否拥有创建 Service Directory DNS 区域所需的权限:
dns.managedZones.create
dns.networks.bindPrivateDNSZone
servicedirectory.namespaces.associatePrivateZone
如果存在冲突的区域,但不再需要该区域,请删除 DNS 区域。
创建 Service Directory DNS 区域,此区域由与 Private Service Connect 端点关联的 Service Directory 命名空间提供支持。