专用服务访问通道是一种专用连接,将您的 VPC 网络与 Google 或第三方拥有的网络连接起来。Google 或第三方是提供服务的实体,亦称为服务提供方。通过专用连接,您的 VPC 网络中的虚拟机实例和您访问的服务可以使用内部 (RFC 1918) IP 地址进行专有的通信。虚拟机实例不需要接入互联网或具备外部 IP 地址,通过专用服务访问通道即可访问服务。
要了解有关专用服务访问通道和其他专用访问选项的更多信息,请参阅服务专用访问通道选项。
概括来讲,要使用专用服务访问通道,您必须在 VPC 网络中分配一个 IP 地址范围(CIDR 块),然后创建连接到服务提供方的专用连接。
准备工作
要建立专用连接,需要先满足以下要求:
- 确认该服务可通过专用服务通道访问。
- 创建 GCP 项目或选择一个现有项目。要了解如何创建 GCP 项目,请参阅创建和管理项目。
- 在项目中激活 Service Networking API。创建专用连接必须使用此 API。
- 您必须有一个用于接入服务提供方网络的 VPC 网络。虚拟机实例必须使用此 VPC 网络通过专用连接接入服务。
- 如需运行本指南中的
gcloud
命令行示例,请安装 Cloud SDK。
权限
拥有网络管理员角色的项目所有者、编辑者和 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 地址范围。
Console
- 转到 Google Cloud Platform 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
标志。如果您省略地址范围,则 GCP 会自动选择您的 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"
创建专用连接
创建分配范围后,您可以创建到服务提供方的专用连接。专用连接在您的 VPC 网络和服务提供方的网络之间建立 VPC 网络对等互连连接。
专用连接在您的 VPC 网络与服务提供方之间提供一对一关联。如果某个服务提供方提供多种服务,您只需一个专用连接就能获得提供方的所有服务。
如果您连接到多个服务提供方,请为每个服务提供方使用唯一的分配。这有助于您管理用于各个服务提供方的网络设置,例如路由和防火墙规则。
Console
- 转到 Google Cloud Platform 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 地址。
列出专用连接
创建专用连接后,您可以列出它以检查是否存在。该列表还显示与每个连接相关的分配的范围列表。例如,如果您不记得将哪个分配的范围分配给了某个连接,则可以查看该列表以找到答案。
Console
- 转到 Google Cloud Platform 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 地址范围。例如,在执行扩缩时,如果现有分配范围即将用尽,则可以添加一个分配的范围。
Console
- 转到 Google Cloud Platform Console 中的“VPC 网络”页面。
转到“VPC 网络”页面 - 选择包含连接的 VPC 网络。
- 选择专用服务连接标签页。
- 在专用服务连接标签页中,选择连到服务的专用连接 (Private connections to services) 标签页,并查看该网络的所有专用连接。
- 点击列表中的连接名称。
- 在指定的分配范围下拉菜单中,选择要分配的范围。您不能使用 Google Cloud Platform Console 移除范围。如果要移除范围,请参阅
gcloud
说明。 - 点击确定。
gcloud
为现有专用连接添加或移除指定的分配 IP 地址范围。
gcloud services vpc-peerings update \ --service=servicenetworking.googleapis.com \ --ranges=[RESERVED_RANGE_NAME] \ --network=[VPC_NETWORK] \ --project=[PROJECT_ID]
请将 [RESERVED_RANGE_NAME]
替换为要分配给专用连接的一个或多个已分配范围的名称。将 [VPC_NETWORK]
和 [PROJECT_ID]
替换为您的 VPC 网络名称和该网络的项目 ID。您所指定的列表就会用作新的范围集。先前已有的范围若未包含在此列表中,则会被系统删除。
删除专用连接
要删除专用连接,必须删除相应的 VPC 对等互连连接。您的 VPC 网络会与服务提供方的 VPC 网络断开连接,两个网络中的现有资源仍将保留,但会失去专用服务访问通道。您可以通过再次创建专用连接来重新建立连接。
Console
- 转到 Google Cloud Platform 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 地址范围之前,请确认没有正在使用此范围的专用连接。您可以删除或修改现有专用连接,以取消关联已分配的范围。如果不执行此操作,现有连接仍保持活跃状态,但没有任何机制可以防止您的 VPC 使用与服务提供方网络存在重叠的 IP 地址。此外,该服务也无法新建子网,因为不存在可从中选择 IP 地址的已分配 IP 地址范围。
Console
- 转到 Google Cloud Platform Console 中的“VPC 网络”页面。
转到“VPC 网络”页面 - 选择包含要删除的分配范围的 VPC 网络。
- 选择专用服务连接标签页。
- 在专用服务连接标签页中,选择为服务分配的 IP 范围标签页。
- 选择要删除的分配范围。
点击释放,将已分配的 IP 地址范围释放回可用内部 IP 地址池中。
如果已分配的 IP 地址范围仍然分配给现有连接,则您必须首先输入额外的确认信息,之后才能释放分配范围。
再次点击释放以确认删除。
gcloud
通过指定分配范围名称来删除分配范围。
gcloud compute addresses delete [NAME] \ --global
问题排查
我的分配范围用了多少?
创建到服务提供方的专用连接时,您会分配 IP 地址范围供其使用。如果您使用来自服务提供方的多个服务,则每个服务将保留该分配范围中的很多 IP 地址。您可以检查哪些服务正在使用哪些 IP 地址,这样您就可以知道哪些服务正在使用大的 IP 地址块,并避免 IP 地址耗尽。
要查看哪些服务正使用特定 IP 地址范围:
- 列出您的专用连接。
- 找到将您与相关服务提供方关联的对等互连连接的名称。
- 针对您的 VPC 网络列出路由。
- 查找下一跃点与对等互连连接名称匹配的路由。路由的目标范围指示了每个服务正在使用的 IP 地址。
IP 地址范围用尽
如果给定的专用连接用尽了您分配的 IP 地址空间,则可以扩展现有分配范围或者添加新的分配范围。扩展后的分配范围必须是包含现有范围的相邻 IP 地址范围。我们推荐扩展分配范围,因为每个分配的大小并无限制,但您可以创建的分配数量却有限制。
要扩展现有分配范围,请执行以下操作:
- 列出您的专用连接并记录您需要扩展的分配范围的名称。
- 删除现有的分配范围。
- 使用与已删除范围相同的名称创建新的分配范围。指定包含已删除 IP 地址范围的 IP 地址范围。这样,使用旧分配范围的现有对等互连连接资源便可继续使用相同的 IP 地址,而不会与 VPC 网络中的资源发生冲突。例如,如果先前分配的范围是
192.168.0.0/20
,创建新分配范围时应设为192.168.0.0/16
。
要为现有专用连接添加分配范围,请执行以下操作: