通过端点访问区域性 Google API
本文档介绍如何使用 Private Service Connect 端点来连接到受支持的 Google API 的区域端点。
如需了解其他 Private Service Connect 配置,请参阅 Private Service Connect。
角色
如需获得创建区域级 Private Service Connect 端点所需的权限,请让管理员在 VPC 网络上授予您以下 IAM 角色:
-
Compute Network Admin 角色 (
roles/compute.networkAdmin
) -
DNS Administrator 角色 (
roles/dns.admin
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
准备工作
After installing the Google Cloud CLI, initialize it by running the following command:
$ gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
Enable the Compute Engine, Network Connectivity Center, and Cloud DNS APIs.
此外,请为您想通过 Private Service Connect 端点访问的目标服务启用 API。例如,如果您想访问
spanner.me-central2.rep.googleapis.com
,请启用 Cloud Spanner API。Private Service Connect 不会自动启用任何 API。确保出站流量防火墙规则允许流量流向该端点。VPC 网络的默认防火墙配置允许此流量,因为它包含隐含的允许出站流量规则。确认您未创建优先级更高的出站流量规则来阻止流量。
创建区域性 Private Service Connect 端点
您可以创建区域性 Private Service Connect 端点,以便向目标 Google API 的区域端点发送请求。
如需查看支持的区域级端点的列表,请参阅区域级服务端点。
控制台
在 Google Cloud 控制台中,前往 Private Service Connect 页面。
点击连接端点。
在目标中,选择 Google API。
在范围列表中,选择区域级。
在区域列表中,选择您要使用的区域。
在目标服务列表中,选择您要访问的服务。
在端点名称中,输入端点的名称。
在网络中,选择一个网络。
在子网中,选择一个子网。
在 IP 地址中,执行以下操作之一以配置 IP 地址:
- 选择自动分配以自动分配和预留新的 IP 地址。
- 从列表中选择预留的 IP 地址。
- 点击创建 IP 地址以预留新的 IP 地址。
可选:如需使端点可从 VPC 网络中的所有区域进行访问,请选择启用全球访问权限。
点击添加端点。
gcloud
使用 gcloud network-connectivity regional-endpoints create
命令。
gcloud network-connectivity regional-endpoints create ENDPOINT_NAME \ --region=REGION \ --address=ADDRESS \ --network=projects/PROJECT_ID/global/networks/NETWORK_NAME \ --subnetwork=projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME \ --target-google-api=REP_DNS_NAME
如果您想让其他区域的资源可以访问端点,请添加 --enable-global-access
标志。
替换以下内容:
ENDPOINT_NAME
:端点的名称。REGION
:要在其中创建端点的区域。ADDRESS
:您要用于端点的 IPv4 或 IPv6 地址。如果省略,系统会分配子网中的 IPv4 地址。请采用以下某种格式:- IPv4 地址,例如
10.0.0.2
。 - IPv4 或 IPv6 地址资源 URI,例如
projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME
。
- IPv4 地址,例如
PROJECT_ID
:您要在其中创建端点的项目。NETWORK_NAME
:端点的 VPC 网络的名称。SUBNET_NAME
:您要将端点连接到的子网。REP_DNS_NAME
:您要连接到的区域服务端点的主机名。例如spanner.me-central2.rep.googleapis.com
。
API
使用 projects.locations.regionalEndpoints.create
方法。
HTTP 方法和网址:
POST https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints?regionalEndpointId=ENDPOINT_NAME
{
"accessType": "REGIONAL",
"address": "ADDRESS",
"network": "projects/PROJECT_ID/global/networks/NETWORK_NAME",
"subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME",
"targetGoogleApi": "REP_DNS_NAME"
}
替换以下内容:
PROJECT_ID
:端点的项目 ID。REGION
:要在其中创建端点的区域。ENDPOINT_NAME
:端点的名称。ADDRESS
:您要用于端点的 IPv4 或 IPv6 地址。如果省略,系统会分配子网中的 IPv4 地址。请采用以下某种格式:- IPv4 地址,例如
10.0.0.2
。 - IPv4 或 IPv6 地址资源 URI,例如
projects/PROJECT_ID/regions/REGION/addresses/ADDRESS_NAME
。
- IPv4 地址,例如
NETWORK_NAME
:端点的 VPC 网络的名称。SUBNET_NAME
:您要将端点连接到的子网的名称。REP_DNS_NAME
:您要连接到的区域服务端点的名称。例如spanner.me-central2.rep.googleapis.com
。
列出端点
您可以列出所有已配置的端点。
控制台
在 Google Cloud 控制台中,前往 Private Service Connect 页面。
点击已连接的端点标签页。
系统会显示所有端点,包括具有区域端点目标的端点。
gcloud
使用 gcloud network-connectivity regional-endpoints list
命令。
gcloud network-connectivity regional-endpoints list \ --region=REGION
将 REGION
替换为您要列出的端点的区域。
API
使用 projects.locations.regionalEndpoints.list
方法。
GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints
替换以下内容:
PROJECT_ID
:端点的项目 ID。REGION
:您要列出的端点所在的区域。
验证端点是否正常运行
在配置了端点的 VPC 网络和区域中创建虚拟机 (VM) 实例。在虚拟机上运行以下命令,验证 Private Service Connect 端点是否正常工作。端点不会响应 ping (ICMP) 请求。
如需验证 IPv4 端点,请执行以下操作:
curl --connect-to REP_DNS_NAME:443:ADDRESS:443 \ 'https://REP_DNS_NAME/PATH'
如需验证 IPv6 端点,请执行以下操作:
curl -6 --connect-to REP_DNS_NAME:443:[ADDRESS]:443 \ 'https://REP_DNS_NAME/PATH'
替换以下内容:
REP_DNS_NAME
:目标区域端点的公共 DNS 名称,例如spanner.me-central2.rep.googleapis.com
。ADDRESS
:端点的 IP 地址。PATH
:此服务所提供的资源的路径。例如,许多服务提供路径为$discovery/rest?version=v1
的发现文档。
以下示例请求测试 IP 地址为 192.168.1.100
的端点是否可以从 me-central2
中的区域端点请求 Cloud Spanner API 发现文档。
curl --connect-to spanner.me-central2.rep.googleapis.com:443:192.168.1.100:443 \ 'https://spanner.me-central2.rep.googleapis.com/$discovery/rest?version=v1'
为端点创建专用 DNS 条目
您必须创建专用 DNS 条目,以便客户端可以将请求定向到您的 Private Service Connect 端点。
我们建议您创建一个与目标区域端点使用相同主机名的专用区域:SERVICE.REGION.rep.DOMAIN
,并在该区域中创建一个顶层记录。
例如,如果您的 Private Service Connect 端点的目标为 spanner.me-central2.rep.googleapis.com
,请为 spanner.me-central2.rep.googleapis.com
创建一个专用区域,其中包含用于 spanner.me-central2.rep.googleapis.com
的顶层记录。在网域顶层中创建记录意味着您可以访问其他区域端点的公开主机名,例如 logging.me-central2.rep.googleapis.com
。
以下部分介绍如何使用 Cloud DNS 创建专用区域和顶层 DNS 记录。
创建专用可用区
控制台
在 Google Cloud 控制台中,前往创建 DNS 区域页面。
对于可用区类型,请选择专用。
对于区域名称,请输入一个名称。例如,如果您的 Private Service Connect 端点指向
spanner.me-central2.rep.googleapis.com
,请输入spanner-me-central2-rep-googleapis-com
。对于 DNS 名称,请指定目标区域端点的主机名,后跟一个结尾英文句点。例如
spanner.me-central2.rep.googleapis.com.
。可选:添加说明。
在选项下,选择默认(专用)。
选择您希望可查看专用区域的 VPC 网络。只有您选择的 VPC 网络才有权查询区域中的记录。
点击创建。
gcloud
运行 dns managed-zones
create
命令:
gcloud dns managed-zones create ZONE_NAME \ --dns-name=REP_DNS_NAME. \ --networks=VPC_NETWORK_LIST \ --visibility=private \ --description="Private zone for REP_DNS_NAME"
替换以下内容:
ZONE_NAME
:区域的名称,例如spanner-me-central2-rep-googleapis.com
。DESCRIPTION
:您的可用区的说明REP_DNS_NAME
:区域的 DNS 后缀;使用目标区域端点主机名,例如spanner.me-central2.rep.googleapis.com
VPC_NETWORK_LIST
:有权查询地区的 VPC 网络的逗号分隔列表。
API
使用 managedZones.create
方法发送 POST
请求:
HTTP 方法和网址:
POST https://dns.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones
请求 JSON 正文:
{
"name": "ZONE_NAME",
"dnsName": "REP_DNS_NAME.",
"description": "DESCRIPTION",
"visibility": "private",
"privateVisibilityConfig": {
"kind": "dns#managedZonePrivateVisibilityConfig",
"networks": [
{
"kind": "dns#managedZonePrivateVisibilityConfigNetwork",
"networkUrl": "NETWORK_1_URL"
},
{
"kind": "dns#managedZonePrivateVisibilityConfigNetwork",
"networkUrl": "NETWORK_2_URL"
}
]
}
}
替换以下内容:
PROJECT_ID
:DNS 区域的项目 ID。ZONE_NAME
:您为此区域端点创建的专用区域的名称。REP_DNS_NAME
:您要创建的记录的 FQDN;使用目标区域端点主机名,例如spanner.me-central2.rep.googleapis.com
。DESCRIPTION
:DNS 区域的说明。NETWORK_1_URL
和NETWORK_2_URL
:有权查询区域的 VPC 网络的完整网址,例如https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME
。
将 DNS 记录添加到区域
控制台
在 Google Cloud 控制台中,前往 Cloud DNS 区域页面。
点击要在其中添加记录的托管区域的名称。
在区域详情页面上,点击添加标准。
在创建记录集页面上,将 DNS 名称字段留空。如果将该字段留空,系统会在网域顶层创建资源记录。
对于资源记录类型,请选择
A
。在 IPv4 地址字段中,输入或选择 Private Service Connect 端点的 IP 地址。
点击创建。
gcloud
如需添加资源记录集,请使用 gcloud dns record-sets create
命令:
gcloud dns record-sets create REP_DNS_NAME \ --rrdatas=ADDRESS \ --type=RECORD_TYPE \ --ttl=TTL \ --zone=ZONE_NAME
替换以下内容:
REP_DNS_NAME
:您要创建的记录的 FQDN;使用目标区域端点主机名,例如spanner.me-central2.rep.googleapis.com
。ADDRESS
:Private Service Connect 端点的 IP 地址。RECORD_TYPE
:DNS 记录的类型,例如A
(用于 IPv4 记录)或AAAA
(用于 IPv6 记录)。TTL
:解析器缓存此资源记录集的 TTL(以秒为单位),例如300
。ZONE_NAME
:您为此区域端点创建的专用区域的名称。
API
如需添加资源记录集,请使用 resourceRecordSets.create
方法:
HTTP 方法和网址:
POST https://www.googleapis.com/dns/v1/projects/PROJECT_ID/managedZones/ZONE_NAME/rrsets
请求 JSON 正文:
{
"name": "REP_DNS_NAME.",
"type": "RECORD_TYPE",
"ttl": TTL,
"rrdatas": [ "ADDRESS" ]
}
替换以下内容:
PROJECT_ID
:DNS 区域的项目 ID。ZONE_NAME
:您为此区域端点创建的专用区域的名称。REP_DNS_NAME
:您要创建的记录的 FQDN;使用目标区域端点主机名,例如spanner.me-central2.rep.googleapis.com
。RECORD_TYPE
:DNS 记录的类型,例如A
(用于 IPv4 记录)或AAAA
(用于 IPv6 记录)。TTL
:解析器缓存此资源记录集的 TTL(以秒为单位),例如300
。ADDRESS
:Private Service Connect 端点的 IP 地址。
将客户端配置为使用专用端点名称
您必须将客户端配置为使用专用 DNS 名称(而不是公共 DNS 名称)。如需了解如何将客户端配置为使用自定义端点,请参阅客户端或客户端库的文档。以下页面包含适用于一些常见客户端的配置步骤:
Python:您可以在客户端选项中配置
api_endpoint
。Go:您可以在 ClientOptions 中配置
WithEndpoint
。.NET:您可以在客户端的构建器类中配置
Endpoint
。gcloud:您可以在 gcloud CLI 中配置
api_endpoint_overrides
。
获取有关端点的详细信息
您可以查看端点的配置详细信息。
gcloud
使用 gcloud network-connectivity regional-endpoints describe
命令。
gcloud network-connectivity regional-endpoints describe \ ENDPOINT_NAME --region=REGION
替换以下内容:
ENDPOINT_NAME
:端点的名称。REGION
:端点的区域。
API
使用 projects.locations.regionalEndpoints.get
命令。
GET https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints/ENDPOINT_NAME
替换以下内容:
PROJECT_ID
:端点的项目 ID。REGION
:您要列出的端点所在的区域。ENDPOINT_NAME
:端点的名称。
更新全球访问权限配置
您无法更新具有区域端点目标的 Private Service Connect 端点。如果您需要更改端点的全球访问权限设置,请删除端点并创建具有所需全球访问权限设置的新端点。
删除端点
您可以删除端点。
gcloud
使用 gcloud network-connectivity regional-endpoints delete
命令。
gcloud network-connectivity regional-endpoints delete \ ENDPOINT_NAME --region=REGION
替换以下内容:
ENDPOINT_NAME
:端点的名称。REGION
:端点的区域。
API
使用 projects.location.regionalEndpoints.delete
命令。
DELETE https://networkconnectivity.googleapis.com/v1/projects/PROJECT_ID/locations/REGION/regionalEndpoints/ENDPOINT_NAME
替换以下内容:
PROJECT_ID
:端点的项目 ID。REGION
:端点的区域。ENDPOINT_NAME
:端点的名称。
从混合网络访问端点
通过 Cloud Interconnect 的 VLAN 连接或 Cloud VPN 隧道与 Google Cloud 连接的网络中的客户端可以访问 Private Service Connect 端点。VLAN 连接或 Cloud VPN 隧道必须在与端点相同的 VPC 网络(或共享 VPC 网络)中终结。对等互连的 VPC 网络中的客户端无法访问端点。
如果配置了全球访问权限,来自 VLAN 连接或 Cloud VPN 隧道的客户端流量可以到达另一个区域的端点。
对于 VLAN 连接,Dataplane v1 和 Dataplane v2 均受支持。如需详细了解 Dataplane 版本,请参阅 Dataplane v2。
您必须在其他网络中配置系统,以便它们可以对您的专用 DNS 区域进行查询。
如果使用 Cloud DNS 实现了专用 DNS 区域,请完成以下步骤:
在您的其他网络连接到的 VPC 网络中创建入站服务器政策。
在您的 VLAN 连接或 Cloud VPN 隧道所在的区域以及您的其他网络连接到的 VPC 网络中,确定入站转发器入口点。
在其他网络中配置系统和 DNS 域名服务器,将端点的 DNS 名称转发到与连接到 VPC 网络的 VLAN 连接或 Cloud VPN 隧道位于同一区域的入站转发器入口点。