专用服务访问通道是一种专用连接,将您的 VPC 网络与 Google 或第三方拥有的网络连接起来。Google 或第三方是提供服务的实体,亦称为服务提供方。通过专用连接,您的 VPC 网络中的虚拟机实例和您访问的服务可以使用内部 IP 地址进行专有的通信。虚拟机实例不需要接入互联网或具备外部 IP 地址,通过专用服务访问通道即可访问可用服务。
如需详细了解专用服务访问通道和其他专用访问选项,请参阅服务的专用访问选项。
概括来讲,若要使用专用服务访问通道,您必须在 VPC 网络中分配一个 IP 地址范围(CIDR 块),然后创建连接到服务提供方的专用连接。
准备工作
如需建立专用连接,请先满足以下前提条件:
- 检查以确认您使用的服务支持专用服务访问通道。
- 您必须有一个用于接入服务提供方网络的 VPC 网络。虚拟机实例必须使用此 VPC 网络通过专用连接接入服务。
- 在项目中激活 Service Networking API。创建专用连接必须使用此 API。
- 创建 Cloud 项目或选择一个现有项目。如需了解如何创建 Cloud 项目,请参阅创建和管理项目。
- 如果您想运行本指南中的
gcloud
命令行示例,请安装 Cloud SDK。
权限
拥有 Compute Network Admin 角色 (roles/compute.networkAdmin
) 的项目所有者和 IAM 成员可以创建分配的 IP 地址范围并管理专用连接。
如需详细了解角色,请参阅 VPC IAM 角色文档。
共享 VPC 场景
如果您在使用共享 VPC,请在宿主项目中创建分配的 IP 范围和专用连接。这些任务通常必须由宿主项目中的网络管理员执行。设置好宿主项目之后,服务项目中的虚拟机实例即可使用专用连接。
配额和限制
由于专用连接是采用 VPC 对等连接形式实现的,因此适用于 VPC 网络对等连接的配额和限制同样适用于专用服务访问通道。
分配 IP 地址范围
创建专用连接之前,您必须分配 IP 地址范围供服务提供方的 VPC 网络使用。这能确保您的 VPC 网络与服务提供方的网络不发生 IP 地址冲突。请为每个服务提供方创建一个分配范围。
当您在自己的 VPC 网络中分配一个范围时,该范围不能再用于子网(主要范围和次要范围)以及自定义静态路由。
IP 地址范围大小
服务提供方在其连接端创建子网时,系统将从已分配地址范围中选择一个尚未使用的范围,以此作为该子网的 IP 地址范围。
每个服务提供方都需要满足最低限度的 IP 地址范围大小要求。Google 规定最小需要一个 /24
块(256 个地址),但建议使用一个 /16
块(65536 个地址)。您选择的大小取决于您使用的服务数量和区域等因素。您有可能在多个区域中使用一个服务来实现冗余方案或缩短延迟时间。
例如,如果在三个不同的区域中使用两个服务,则服务提供方必须创建 6 个子网,每个子网都要使用一个 /24
块。如果您计划使用其他服务或地区,则可能很快就会耗尽一个 /20
分配范围。如果没有连续的 /16
块,您可以从较小的分配范围开始,在之后需要更多 IP 地址时添加新的分配范围。
关于服务提供方的子网
建立专用连接并创建使用专用 IP 地址的资源时,该服务会创建一个子网,用于预配资源。该服务从已分配的范围中选择一个可用 IP 地址范围。您不能选择或修改服务提供方的子网 IP 地址范围。即便您删除了专用连接或已分配的 IP 地址范围,子网仍会得到保留,直至您删除子网中的所有资源为止。
在您预配其他资源时,服务会在其先前创建的现有区域子网中执行预配。如果子网已满,该服务会在该区域中新建一个子网。
注意事项
分配 IP 地址范围之前,请考虑以下限制:
- 选择的范围不能与现有分配的范围、子网或自定义静态路由重叠。任何两个范围都不可以重叠。
- 如果您使用的是自动模式 VPC 网络,则不能创建与
10.128.0.0/9
匹配或重叠的分配范围。此范围适用于自动创建的子网。 - 选择足够大的 CIDR 块以满足您当前和未来的需求。如果您后续发现范围不够大,请尽可能扩展范围。尽管您可以为一个服务提供方进行多次分配,但 google 会通过配额来限制您可以分配的 IP 地址范围数量,而非每个范围的大小(网络掩码)。
- 请勿将相同的分配范围重复用于多个服务提供方。虽然可以这样做,但这可能导致 IP 地址重叠。每个服务提供方只能看到他们自己的网络,而无法确定其他服务提供方正在使用哪些 IP 地址。
- 创建分配范围时,您只能将一个 CIDR 块分配给该分配范围。当需要扩展 IP 地址范围时,您无法向分配范围中添加其他块。但是,您可以创建其他分配范围,或使用包含新范围和现有范围的更大的块来重新创建现有分配范围。
- 如果您自行创建分配而非让 Google 负责创建(例如通过 Cloud SQL),则可以使用相同的命名约定,让其他用户或 Google 服务知道,您已为 Google 服务分配了一个地址范围。在 Google 服务代表您分配范围时,会使用这样的命名格式:
google-managed-services-[your network name]
。如果已存在此分配,Google 服务将使用现有分配,而不会再创建另一个。
创建 IP 分配
以下步骤描述了如何创建分配的 IP 地址范围。
控制台
- 转到 Google Cloud Console 中的“VPC 网络”页面。
转到“VPC 网络”页面 - 选择将连接到服务提供方的 VPC 网络。
- 选择专用服务连接标签页。
- 在专用服务连接标签页中,选择为服务分配的 IP 范围标签页。
- 点击分配的 IP 范围 (Allocated IP range)。
- 输入分配的范围的名称和描述。
指定分配的 IP 范围:
- 如需指定 IP 地址范围,请选择自定义,然后输入 CIDR 地址块,例如
192.168.0.0/16
。 - 如需指定前缀长度并让 Google 选择可用地址范围,请选择自动,然后输入前缀长度,例如
16
。
- 如需指定 IP 地址范围,请选择自定义,然后输入 CIDR 地址块,例如
点击分配以创建分配的范围。
gcloud
在您的 VPC 网络中创建分配的范围。
如需指定地址范围和前缀长度(子网掩码),请使用
addresses
和prefix-length
标志。例如,若要分配 CIDR 块192.168.0.0/16
,请将地址指定为192.168.0.0
,并将前缀长度指定为16
。gcloud compute addresses create RESERVED_RANGE_NAME \ --global \ --purpose=VPC_PEERING \ --addresses=192.168.0.0 \ --prefix-length=16 \ --description=DESCRIPTION \ --network=VPC_NETWORK
若只指定前缀长度(子网掩码),请仅使用
prefix-length
标志。如果您省略地址范围,则 Google Cloud 会自动选择您的 VPC 网络中未使用的地址范围。以下示例选择的是前缀长度为16
位的未使用的 IP 地址范围。gcloud compute addresses create RESERVED_RANGE_NAME \ --global \ --purpose=VPC_PEERING \ --prefix-length=16 \ --description=DESCRIPTION \ --network=VPC_NETWORK
将以下占位符替换为相关值:
RESERVED_RANGE_NAME
:已分配范围的名称,例如my-allocated-range
。DESCRIPTION
:对该范围的描述,例如allocated for my-service
。VPC_NETWORK
是您的 VPC 网络的名称,例如my-vpc-network
。
以下示例展示了如何创建与 Google 的专用连接,以便 my-network
VPC 网络中的虚拟机实例可以使用专用服务访问通道来访问支持专用连接的 Google 服务。
gcloud compute addresses create google-managed-services-my-network \ --global \ --purpose=VPC_PEERING \ --prefix-length=16 \ --description="peering range for Google" \ --network=my-network \ --project=my-project
列出分配的 IP 地址范围
您可以使用 --filter
标志列出 IP 地址范围,以查看可用于专用服务访问通道的范围。
过滤目的为 VPC_PEERING
的范围,如以下示例所示:
gcloud compute addresses list --global --filter="purpose=VPC_PEERING"
删除分配的 IP 地址范围
在删除分配的 IP 地址范围之前,请确认没有正在使用此范围的专用连接。您可以删除或修改现有专用连接,以取消关联已分配的范围。如果不执行此操作,现有连接仍保持活跃状态,但没有任何机制可以防止您的 VPC 使用与服务提供方网络存在重叠的 IP 地址。此外,该服务也无法新建子网,因为不存在可从中选择 IP 地址的已分配 IP 地址范围。
控制台
- 转到 Google Cloud Console 中的“VPC 网络”页面。
转到“VPC 网络”页面 - 选择包含要删除的分配范围的 VPC 网络。
- 选择专用服务连接标签页。
- 在专用服务连接标签页中,选择为服务分配的 IP 范围标签页。
- 选择要删除的分配范围。
点击释放,将已分配的 IP 地址范围释放回可用内部 IP 地址池中。
如果已分配的 IP 地址范围仍然分配给现有连接,则您必须首先输入额外的确认信息,之后才能释放分配范围。
再次点击释放以确认删除。
gcloud
通过指定分配范围名称来删除分配范围。
gcloud compute addresses delete NAME \ --global
创建专用连接
创建分配范围后,您可以创建到服务提供方的专用连接。专用连接在您的 VPC 网络和服务提供方的网络之间建立 VPC 网络对等互连连接。
专用连接在您的 VPC 网络与服务提供方之间提供一对一关联。如果某个服务提供方提供多种服务,您只需一个专用连接就能获得提供方的所有服务。
如果您连接到多个服务提供方,请为每个服务提供方使用唯一的分配。此做法有助于您管理各个服务提供方的网络设置,例如路由和防火墙规则。
控制台
- 转到 Google Cloud Console 中的“VPC 网络”页面。
转到“VPC 网络”页面 - 选择将连接到服务提供方的 VPC 网络。
- 选择专用服务连接标签页。
- 在专用服务连接标签页中,选择为服务分配的 IP 范围标签页。
- 点击创建连接以在您的网络与服务提供方之间创建专用连接。
- 对于指定的分配范围,请选择一个或多个未被其他服务提供方占用的现有分配范围。
- 点击连接以创建连接。
gcloud
创建专用连接。
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=RESERVED_RANGE_NAME \ --network=VPC_NETWORK \ --project=PROJECT_ID
将以下占位符替换为相关值:
RESERVED_RANGE_NAME
:一个或多个已分配范围的名称。VPC_NETWORK
:您的 VPC 网络的名称。PROJECT_ID
:包含 VPC 网络的项目的 ID。
该命令启动一个可长时间运行的操作,并返回操作名称。
检查操作是否成功。
gcloud services vpc-peerings operations describe \ --name=OPERATION_NAME
将
OPERATION_NAME
替换为从上一步返回的操作名称。
创建专用连接时,您可以指定多个分配范围。举例来说,如果一个范围已用尽,则您可以分配额外的分配范围。该服务会按您指定的顺序使用所提供的所有范围中的 IP 地址。
列出专用连接
创建专用连接后,您可以列出它以检查是否存在。 该列表还显示与每个连接相关的分配的范围列表。例如,如果您不记得将哪个分配的范围分配给了某个连接,则可以查看该列表以找到答案。
控制台
- 转到 Google Cloud Console 中的“VPC 网络”页面。
转到“VPC 网络”页面 - 选择包含连接的 VPC 网络。
- 选择专用服务连接标签页。
- 在专用服务连接标签页中,选择连到服务的专用连接 (Private connections to services) 标签页,并查看该网络的所有专用连接。
gcloud
列出您的 VPC 网络中的专用连接。
gcloud services vpc-peerings list \ --network=VPC_NETWORK \ --project=PROJECT_ID
将 VPC_NETWORK
和 PROJECT_ID
分别替换为您的 VPC 网络名称和项目 ID。
修改专用连接
对于现有专用连接,您可以在不中断流量的情况下添加或移除所分配的 IP 地址范围。例如,在执行扩缩时,如果现有分配范围即将用尽,则可以添加一个分配的范围。
您不能使用 Google Cloud Console 移除分配的 IP 范围。如果您要移除分配的范围,请使用 gcloud
说明来修改连接。从专用连接中移除范围时,以下规则适用:
分配的范围不再与专用连接相关联,但不会被删除。
- 如果已移除的范围不再使用,您可以删除分配的范围。
现有服务提供方资源可能会继续使用已移除的范围。
专用服务访问通道不会使用已移除的范围来分配新子网。
您还可以按照这些 gcloud
说明,使用不同的分配 IP 范围重新创建已删除的专用连接。如需了解详情,请参阅重新创建已删除的专用连接。
控制台
- 转到 Google Cloud Console 中的“VPC 网络”页面。
转到“VPC 网络”页面 - 选择包含连接的 VPC 网络。
- 选择专用服务连接标签页。
- 在专用服务连接标签页中,选择连到服务的专用连接 (Private connections to services) 标签页,并查看该网络的所有专用连接。
- 点击列表中的连接名称。
- 在指定的分配范围下拉菜单中,选择要分配的范围。
- 点击确定。
gcloud
为现有专用连接添加或移除指定的分配 IP 地址范围。
gcloud services vpc-peerings update \ --service=servicenetworking.googleapis.com \ --ranges=RESERVED_RANGE_NAME \ --network=VPC_NETWORK \ --project=PROJECT_ID \ [--force]
将以下占位符替换为相关值:
RESERVED_RANGE_NAME
:要分配给专用连接的一个或多个已分配范围的名称列表。RESERVED_RANGE_NAME
会替换之前的分配范围列表。如果您省略先前与专用连接关联的范围,则该范围会从连接中移除。您必须使用--force
选项移除范围。VPC_NETWORK
:您的 VPC 网络的名称。PROJECT_ID
:您的网络的项目 ID 的名称。
删除专用连接
如需删除专用连接,您必须删除相应的 VPC 对等互连连接。您的 VPC 网络会与服务提供方的 VPC 网络断开连接,两个网络中的现有资源仍将保留,但会失去专用服务访问通道。
控制台
- 转到 Google Cloud Console 中的“VPC 网络”页面。
转到“VPC 网络”页面 - 选择包含要删除的连接的 VPC 网络。
- 选择专用服务连接标签页。
- 在专用服务连接标签页中,选择与服务专用连接 (Private connection to services) 标签页。
- 选择要删除的专用连接。
- 点击删除执行删除。
- 再次点击删除以确认删除。
gcloud
删除专用连接的 VPC 网络对等互连连接。
gcloud compute networks peerings delete CONNECTION_NAME \ --network VPC_NETWORK
将 CONNECTION_NAME
和 VPC_NETWORK
替换为您的专用连接和 VPC 网络的名称。
重新创建已删除的专用连接
您可以重新创建已删除的专用连接。
如果您要使用之前所用的相同的分配 IP 范围,您可以再次创建专用连接。在删除专用连接之前,请指定用于专用连接的相同的分配 IP 范围。如果您指定不同的分配 IP 范围,Google Cloud 将返回 Cannot modify allocated ranges
错误。
如果您要使用不同的分配 IP 范围重新创建连接,则必须使用 gcloud services vpc-peerings update
命令修改专用连接。
例如,如果您之前使用 range1
设置专用连接,则可以使用其他分配的 IP 范围配置(例如 range1
和 range2
)重新创建专用连接。
gcloud services vpc-peerings update \ --service=servicenetworking.googleapis.com \ --ranges=range1,range2 \ --network=vpc1 \ --project=my-project-123
您也可以使用 range2
重新创建连接。由于此情况不包括属于先前专用连接配置的 range1
,因此您必须使用 --force
选项。
gcloud services vpc-peerings update \ --service=servicenetworking.googleapis.com \ --ranges=range2 \ --network=vpc1 \ --project=my-project-123 \ --force
与服务提供方共享专用 DNS 可用区
Cloud DNS 专用可用区是您的 VPC 网络的专用可用区。如果您希望服务提供方网络解析您的专用可用区中的名称,则可以配置两个网络之间的 DNS 对等互连。
配置 DNS 对等互连时,您需要提供 VPC 网络和 DNS 后缀。如果服务提供方需要使用该 DNS 后缀解析地址,则服务提供商会将这些查询转发到您的 VPC 网络进行解析。
以下服务支持 DNS 对等互连:
如果要启用 DNS 对等互连,则必须在项目中启用 Cloud DNS API
与服务提供方进行 DNS 对等互连
gcloud
在 VPC 网络和服务提供方网络之间设置 DNS 对等互连。
gcloud services peered-dns-domains create PEERING_NAME \ --network=VPC_NETWORK \ --dns-suffix=DNS_SUFFIX
将以下占位符替换为相关值:
PEERING_NAME
:此 DNS 对等互连配置的名称。VPC_NETWORK
:使用专用服务访问通道连接到服务提供方的 VPC 网络的名称。DNS_SUFFIX
:您要与服务提供方建立对等互连的 DNS 后缀。您必须提供完整的 DNS 域名(包括句点)。例如,example.com.
是有效的 DNS 后缀。
列出 DNS 对等互连配置
gcloud
列出 VPC 网络中的对等互连 DNS 网域。
gcloud services peered-dns-domains list \ --network=VPC_NETWORK
将以下占位符替换为相关值:
VPC_NETWORK
:您的 VPC 网络的名称。
删除 DNS 对等互连配置
gcloud
删除对等互连的 DNS 网域。
gcloud services peered-dns-domains delete PEERING_NAME \ --network=VPC_NETWORK
将以下占位符替换为相关值:
PEERING_NAME
:DNS 对等互连配置的名称。VPC_NETWORK
:VPC 网络的名称。
问题排查
我的分配范围用了多少?
创建到服务提供方的专用连接时,您会分配 IP 地址范围供其使用。如果您使用来自服务提供方的多个服务,则每个服务将保留该分配范围中的很多 IP 地址。您可以检查哪些服务正在使用哪些 IP 地址,这样您就可以知道哪些服务正在使用大的 IP 地址块,并避免 IP 地址耗尽。
要查看哪些服务正使用特定 IP 地址范围:
- 列出您的专用连接。
- 找到将您与相关服务提供方关联的对等互连连接的名称。
- 针对您的 VPC 网络列出路由。
- 查找下一跃点与对等互连连接名称匹配的路由。路由的目标范围指示了每个服务正在使用的 IP 地址。
IP 地址范围用尽
对于给定的专用连接,如果耗尽的 IP 地址空间用尽,Google Cloud 将返回以下错误:Failed to create subnetwork.
Couldn't find free blocks in allocated IP ranges.
您可以扩展现有分配范围或添加新的分配关系。扩展后的分配范围必须是包含现有范围的相邻 IP 地址范围。我们推荐扩展分配范围,因为每个分配的大小并无限制,但您可以创建的分配数量却有限制。
要扩展现有分配范围,请执行以下操作:
- 列出您的专用连接并记录您需要扩展的分配范围的名称。
- 删除现有的分配范围。
- 使用与已删除范围相同的名称创建新的分配范围。指定包含已删除 IP 地址范围的 IP 地址范围。这样,使用旧分配范围的现有对等互连连接资源便可继续使用相同的 IP 地址,而不会与 VPC 网络中的资源发生冲突。例如,如果先前分配的范围是
192.168.0.0/20
,创建新分配范围时应设为192.168.0.0/16
。
如需为现有专用连接添加分配范围,请执行以下操作:
本地主机无法与服务提供方的网络进行通信
服务提供方的网络可能不具备能将流量定向到您的本地网络的正确路由。默认情况下,服务提供方的网络仅会通过您的 VPC 网络获知子网路由。因此,来自子网 IP 范围以外的任何请求都会被服务提供方丢弃。
在您的 VPC 网络中,更新对等互连连接,以将自定义路由导出到服务提供方的网络。导出路由时,您的 VPC 网络中符合条件的静态和动态路由(例如到您的本地网络的路由)会发送至服务提供方的网络。服务提供方的网络会自动导入这些数据,然后通过 VPC 网络将流量发回至您的本地网络。