创建和管理 Private Service Connect 接口
本页面介绍提供方网络管理员如何创建和管理 Private Service Connect 接口。 Private Service Connect 接口允许服务提供方 Virtual Private Cloud (VPC) 网络发起与使用方 VPC 网络的连接。
准备工作
- 您必须在项目中启用 Compute Engine API。
- 找到您要连接的网络连接的网址。
- 如果网络连接配置为手动接受连接,请确保网络管理员已将您的项目添加到网络连接的接受列表中。
角色
如需获得创建 Private Service Connect 接口所需的权限,请让管理员向您授予项目的以下 IAM 角色:
-
Compute Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) -
Compute Network Admin (
roles/compute.networkAdmin
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
Compute Instance Admin (v1) 角色包含创建 Private Service Connect 接口所需的 compute.instances.pscInterfaceCreate
权限。
创建和配置 Private Service Connect 接口
如需创建和配置具有 Private Service Connect 接口的虚拟机实例,请完成以下步骤。
创建具有 Private Service Connect 接口的虚拟机
创建 Private Service Connect 接口时,您需要创建至少有两个网络接口的虚拟机。第一个接口连接到提供方子网。第二个接口是 Private Service Connect 接口,用于请求与使用方网络中的网络连接的连接。
如果接受连接,Google Cloud 会向 Private Service Connect 接口分配由网络连接指定的子网中的内部 IP 地址。
如果您创建了一个 Private Service Connect 接口,该接口引用了配置为手动接受连接的网络连接并且该接口的项目不在网络连接的接受列表中,则 Private Service Connect 接口的虚拟机创建过程会失败。在这种情况下,请与使用方组织合作,将您的项目添加到接受列表,然后创建 Private Service Connect 接口。
创建 Private Service Connect 接口时,您可以选择为其分配一个或多个内部别名 IP 范围。如果您计划分配别名 IP 地址范围,请与使用方组织联系以确定适当的 IP 地址范围。
如需分配别名 IP 范围,请以 CIDR 表示法指定范围的前缀长度。在为 Private Service Connect 接口分配一个或多个别名 IP 范围时,Google Cloud 会从与网络连接关联的子网的主要 IP 地址范围中分配别名 IP 范围。Private Service Connect 接口的主要 IP 地址是从任何别名 IP 范围之外分配的。如果网络连接的子网中没有足够的 IP 地址来分配主要 IP 地址和别名 IP 范围,则 Private Service Connect 接口的虚拟机创建过程会失败。您可以通过描述接口的虚拟机找到分配的特定 IP 地址。
控制台
在 Google Cloud 控制台中,转到虚拟机实例页面。
点击创建实例。
输入名称。
选择与要连接的网络连接的区域一致的区域。
选择一个可用区。
点击高级选项。
点击网络。
在网络接口部分中,点击第一个网络接口(即主要网络接口),然后执行以下操作:
- 为主要网络接口选择网络。
- 为主要网络接口选择子网。此子网必须与 Private Service Connect 接口的网络连接位于同一区域。
点击添加网络接口。
对于接口类型,选择 Private Service Connect。
输入网络连接网址。
选择 IP 栈类型。如需创建双栈 Private Service Connect 接口,网络连接的子网必须是双栈。
可选:要添加别名 IP 范围,请在前缀长度框中输入前缀长度,例如
/30
。您可以添加多个别名 IP 地址范围,只需点击添加 IP 范围,然后输入要添加的每个额外别名 IP 范围的前缀长度即可。点击完成。
点击创建。
gcloud
如需创建具有仅限 IPv4 的 Private Service Connect 接口的虚拟机,请使用 instances create
命令。
gcloud compute instances create INSTANCE_NAME \ --zone=ZONE \ --machine-type=MACHINE_TYPE \ --image-project=IMAGE_PROJECT \ --image=IMAGE \ --network-interface='network=PRODUCER_NETWORK,subnet=PRODUCER_SUBNET,no-address' \ --network-interface='network-attachment=projects/CONSUMER_PROJECT_ID/regions/REGION/networkAttachments/ATTACHMENT_NAME'
替换以下内容:
INSTANCE_NAME
:新实例的名称ZONE
:新实例的可用区MACHINE_TYPE
:实例的机器类型,可以是预定义或自定义。IMAGE_PROJECT
:映像的项目。例如,如果您将debian-10-buster-v20230809
指定为映像,请将debian-cloud
指定为映像项目。您可以使用gcloud compute images list
命令查看可用映像、映像项目和映像系列的列表。IMAGE
:公共映像的特定版本,例如,debian-10-buster-v20230809
。PRODUCER_NETWORK
:实例的网络。PRODUCER_SUBNET
:虚拟机主要网络接口的子网。此子网必须与 Private Service Connect 接口的网络连接位于同一区域。CONSUMER_PROJECT_ID
:您要连接的使用方的 ID。ATTACHMENT_NAME
:请求与之建立连接的网络连接的名称。
如需为 Private Service Connect 接口分配 IPv4 和 IPv6 地址,请指定 stack-type='IPV4_IPv6'
。接口所引用的网络连接必须与双栈子网相关联。
gcloud compute instances create INSTANCE_NAME \ --zone=ZONE \ --machine-type=MACHINE_TYPE \ --image-project=IMAGE_PROJECT \ --image=IMAGE \ --network-interface='network=PRODUCER_NETWORK,subnet=PRODUCER_SUBNET,no-address' \ --network-interface='network-attachment=projects/CONSUMER_PROJECT_ID/regions/REGION/networkAttachments/ATTACHMENT_NAME,stack-type='IPV4_IPV6''
如需为 Private Service Connect 接口分配一个或多个别名 IP 范围,请指定要分配的每个别名 IP 范围的前缀长度:
gcloud compute instances create INSTANCE_NAME \ --zone=ZONE \ --machine-type=MACHINE_TYPE \ --image-project=IMAGE_PROJECT \ --image=IMAGE \ --network-interface='network=PRODUCER_NETWORK,subnet=PRODUCER_SUBNET,no-address' \ --network-interface='network-attachment=projects/CONSUMER_PROJECT_ID/regions/REGION/networkAttachments/ATTACHMENT_NAME,aliases=ALIAS_IP_RANGE'
将 ALIAS_IP_RANGE
替换为一个或多个前缀长度(采用 CIDR 表示法)。您可以在以英文分号分隔的列表中包含多个前缀长度,例如 /24;/28
。
API
如需创建具有仅限 IPv4 的 Private Service Connect 接口的虚拟机,请向 instances.insert
方法发送 POST
请求。
POST https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/zones/INSTANCE_ZONE/instances { "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot": true } ], "networkInterfaces": [ { "network": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/global/networks/PRODUCER_NETWORK", "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET" }, { "networkAttachment": "projects/CONSUMER_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/ATTACHMENT_NAME" } ] }
替换以下内容:
PRODUCER_PROJECT_ID
:提供方项目的 ID。INSTANCE_ZONE
:新实例的可用区。MACHINE_TYPE_ZONE
:机器类型的可用区。MACHINE_TYPE
:新虚拟机的机器类型,可以是预定义或自定义。VM_NAME
:新虚拟机的名称。IMAGE_PROJECT
:包含映像的项目。 例如,如果您将debian-10-buster-v20200309
指定为映像,请将debian-cloud
指定为映像项目。IMAGE
:公共映像的特定版本,例如,debian-10-buster-v20200309
。PRODUCER_PROJECT_ID
:接口项目的项目 ID。PRODUCER_NETWORK
:提供方 VPC 网络的名称。SUBNET_REGION
:主要网络接口的子网的区域。此子网必须与 Private Service Connect 接口的网络连接位于同一区域。SUBNET
:主要网络接口的子网名称。CONSUMER_PROJECT_ID
:使用方项目的 ID。ATTACHMENT_REGION
:网络连接的区域。ATTACHMENT_NAME
:网络连接的名称。
如需为 Private Service Connect 接口分配 IPv4 和 IPv6 地址,请指定 "stack-type": "IPV4_IPv6"
。接口所引用的网络连接必须与双栈子网相关联。
POST https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/zones/INSTANCE_ZONE/instances { "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot": true } ], "networkInterfaces": [ { "network": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/global/networks/PRODUCER_NETWORK", "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET" }, { "networkAttachment": "projects/CONSUMER_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/ATTACHMENT_NAME", "stackType": "IPV4_IPV6" } ] }
如需为 Private Service Connect 接口分配一个或多个别名 IP 范围,请指定要分配的每个别名 IP 范围的前缀长度。
POST https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/zones/INSTANCE_ZONE/instances { "machineType": "zones/MACHINE_TYPE_ZONE/machineTypes/MACHINE_TYPE", "name": "VM_NAME", "disks": [ { "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" }, "boot": true } ], "networkInterfaces": [ { "network": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/global/networks/PRODUCER_NETWORK", "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PRODUCER_PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET" }, { "aliasIpRanges": [ { "ipCidrRange": "ALIAS_IP_RANGE" } ], "networkAttachment": "projects/CONSUMER_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/ATTACHMENT_NAME" } ] }
将 ALIAS_IP_RANGE
替换为采用 CIDR 表示法的前缀长度,例如 /28
。您可以在 aliasIpRanges
列表中指定多个别名 IP 范围,格式如下:
"aliasIpRanges": [ { "ipCidrRange": "/28" }, { "ipCidrRange": "/30" } ]
如需详细了解如何创建虚拟机实例,请参阅创建和启动虚拟机实例。
允许 SSH 连接
确保防火墙规则配置为允许入站流量 SSH 连接以连接到 Private Service Connect 接口的虚拟机。
查找 Private Service Connect 接口的 Google Cloud 名称
如需配置路由,您需要知道 Private Service Connect 接口的 Google Cloud 名称。
控制台
在 Google Cloud 控制台中,浏览到虚拟机实例:
点击具有 Private Service Connect 接口的虚拟机的名称。
在网络接口部分中,找到并记下 Private Service Connect 接口的名称,例如
nic1
。
gcloud
使用
compute instances describe
命令。gcloud compute instances describe VM_NAME --zone=ZONE
替换以下内容:
VM_NAME
:具有 Private Service Connect 接口的虚拟机的名称。ZONE
:虚拟机的可用区。
在该命令的输出中,找到并记下 Private Service Connect 接口的 Google Cloud 名称,例如
nic1
。
查找 Private Service Connect 接口的客机操作系统名称
如需配置路由,您需要知道 Private Service Connect 接口的客机操作系统名称,该名称与 Google Cloud 中的接口名称不同。
如需在 Debian 虚拟机上查找接口的名称,请执行以下操作。对于具有其他操作系统的虚拟机,请参阅操作系统的公共文档。
- 连接到 Private Service Connect 接口的虚拟机。
运行以下命令:
ip address
在网络接口列表中,找到并记下与您的 Private Service Connect 接口的 IP 地址关联的接口名称,例如
ens5
。
查找 Private Service Connect 接口的网关 IP
如需配置路由,您需要知道 Private Service Connect 接口的默认网关的 IP 地址。
从接口的虚拟机向关联的元数据服务器发出以下
GET
请求:curl http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/INTERFACE_NUMBER/gateway -H "Metadata-Flavor: Google" && echo
将
INTERFACE_NUMBER
替换为 Private Service Connect 接口的 Google Cloud 名称的数字部分。例如,如果接口名称为nic1
,请使用值1
。
为使用方子网添加路由
对于连接到 Private Service Connect 接口的每个使用方子网,您必须向 Private Service Connect 接口的默认网关添加路由。这样可以确保前往使用方网络的流量来自 Private Service Connect 接口。
以下步骤描述了如何临时更新使用 Debian 操作系统的虚拟机的路由表。如需永久更新该表,或在其他操作系统上更新路由,请参阅操作系统的公开文档。
对连接到 Private Service Connect 接口的每个使用方子网运行以下命令:
sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME
替换以下内容:
CONSUMER_SUBNET_RANGE
:使用方子网的 IP 地址范围。GATEWAY_IP
:接口子网的默认网关的 IP 地址。OS_INTERFACE_NAME
:Private Service Connect 接口的客机操作系统名称,例如ens5
。
创建具有 Private Service Connect 接口的实例模板
您可以创建包含 Private Service Connect 接口的实例模板。
控制台
转到实例模板页面。
点击创建实例模板。
输入实例模板的名称。
点击高级选项。
点击网络。
在网络接口部分中,点击
展开箭头。为实例模板的主要网络接口选择网络和子网。
点击完成。
点击添加网络接口。
点击 Private Service Connect。
为 Private Service Connect 接口选择网络和子网。
点击完成。
点击创建。
gcloud
使用 instance-templates create
命令。
gcloud compute instance-templates create NAME \ --machine-type=MACHINE_TYPE \ --network-interface=subnet=SUBNET \ --region=REGION \ --image-project=IMAGE_PROJECT \ --image=IMAGE \ --network-interface=network-attachment=projects/ATTACHMENT_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/ATTACHMENT_NAME
替换以下内容:
NAME
:实例模板的名称。MACHINE_TYPE
:使用此实例模板创建的虚拟机的预定义或自定义机器类型,例如f1-micro
。SUBNET
:实例模板的子网。使用此实例模板创建虚拟机时,系统会为虚拟机的主要网络接口分配此子网的内部 IP 地址。REGION
:实例模板子网的区域。IMAGE_PROJECT
:映像的项目。例如,如果您将debian-10-buster-v20230809
指定为映像,请将debian-cloud
指定为映像项目。您可以使用gcloud compute images list
命令查看可用映像、映像项目和映像系列的列表。IMAGE
:公共映像的特定版本,例如,debian-10-buster-v20230809
。ATTACHMENT_PROJECT_ID
:网络连接的项目的 ID。ATTACHMENT_REGION
:网络连接的区域。ATTACHMENT_NAME
:网络连接的名称。 使用此实例模板创建虚拟机时,Private Service Connect 接口会请求与此网络连接的连接。您可以指定其他配置,例如映像名称和启动磁盘大小。如需了解详情,请参阅创建新的实例模板。
API
向 instanceTemplates.insert
方法发出 POST
请求。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/instanceTemplates { "name": "NAME", "properties": { "disks": [ { "boot": true, "initializeParams": { "sourceImage": "projects/IMAGE_PROJECT/global/images/IMAGE" } } ], "machineType": "MACHINE_TYPE", "networkInterfaces": [ { "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET" }, { "networkAttachment": "projects/ATTACHMENT_PROJECT_ID/regions/ATTACHMENT_REGION/networkAttachments/NETWORK_ATTACHMENT" } ] } }
替换以下内容:
PROJECT_ID
:要在其中创建实例模板的项目的 ID。NAME
:实例模板的名称。IMAGE_PROJECT
:映像的项目。例如,如果您将debian-10-buster-v20230809
指定为映像,请将debian-cloud
指定为映像项目。您可以使用gcloud compute images list
命令查看可用映像和映像项目的列表。IMAGE
:公共映像的特定版本,例如,debian-10-buster-v20230809
。MACHINE_TYPE
:使用此实例模板创建的虚拟机的预定义或自定义机器类型,例如f1-micro
。SUBNET_REGION
:实例模板子网的区域。SUBNET
:实例模板的子网。使用此实例模板创建虚拟机时,系统会为虚拟机的主要网络接口分配此子网的内部 IP 地址。ATTACHMENT_PROJECT_ID
:网络连接的项目的 ID。ATTACHMENT_REGION
:网络连接的区域。NETWORK_ATTACHMENT
:网络连接的名称。 使用此实例模板创建虚拟机时,Private Service Connect 接口会请求与此网络连接的连接。
如需详细了解如何创建实例模板,请参阅创建实例模板。
将 Private Service Connect 接口与 VPC Service Controls 搭配使用
您可以将 Private Service Connect 接口与 VPC Service Controls 搭配使用。这样,提供方 VPC 网络就可以通过使用方 VPC 网络访问 Google API 和服务,而使用方组织则可以应用 VPC Service Controls 的安全优势。
如需将 Private Service Connect 接口与 VPC Service Controls 搭配使用,您必须更新 Private Service Connect 接口的虚拟机的路由表。将默认路由替换为通过 Private Service Connect 接口将流量发送到 Private Service Connect 接口的默认网关的路由。
以下步骤会暂时更新使用 Debian 的虚拟机的路由表。如需永久添加路由或更新其他操作系统的路由,请参阅操作系统的公开文档。
控制台
在 Google Cloud 控制台中,转到虚拟机实例页面:
点击具有 Private Service Connect 接口的虚拟机的名称。
运行以下命令:
sudo ip route replace default via GATEWAY_IP dev OS_INTERFACE_NAME
替换以下内容:
GATEWAY_IP
:接口子网的默认网关的 IP 地址。OS_INTERFACE_NAME
:Private Service Connect 接口的客机操作系统名称,例如ens5
。
描述 Private Service Connect 接口
您可以描述一个虚拟机,以查看其 Private Service Connect 接口的详细信息。该接口的 IP 地址、别名 IP 范围、网络连接和使用方子网列在虚拟机说明的网络接口部分中。
控制台
在 Google Cloud 控制台中,转到虚拟机实例页面。
点击具有 Private Service Connect 接口的虚拟机。
在网络接口部分中,查看 Private Service Connect 接口的详细信息。
gcloud
gcloud compute instances describe VM_NAME --zone=ZONE
替换以下内容:
VM_NAME
:您的接口的虚拟机的名称。ZONE
:您的虚拟机所在的可用区。
API
GET https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME
替换以下内容:
PROJECT_ID
:虚拟机的项目 ID。ZONE
:虚拟机的可用区。VM_NAME
:虚拟机的名称。
删除具有 Private Service Connect 接口的虚拟机
如需删除 Private Service Connect 接口,您必须删除该接口连接的虚拟机实例。如需了解详情,请参阅删除实例。