概览
VPC 对等互连的工作原理是配置 VPC 来相互通信。如果您的来源位于 Cloud SQL 或 Compute Engine 中同一 Google Cloud 项目中,则目的地可以直接与来源通信。 如果您的源在 VPN 内(例如在 AWS 中或您自己的本地 VPN 中),请配置源 VPN 和 Google Cloud VPN,以便其互相配合。如需了解详情,请参阅 通过 VPN 连接 VPC。不支持 VPC 链接。如果您的来源位于其他 Google Cloud 项目中,请参阅共享 VPC 概览,了解如何将多个项目中的资源连接到一个共用 VPC 网络以实现 VPC 对等互连。
源数据库服务器的防火墙必须配置为允许为 Cloud SQL 目标实例将要使用的 VPC 网络的专用服务连接分配的整个内部 IP 地址范围。
如要在控制台中查找内部 IP 范围,请执行以下操作:
在 Google Cloud 控制台中,前往“VPC 网络”页面。
选择要使用的 VPC 网络。
选择专用服务连接标签页。
pg_hba.conf
文件的复制连接部分,或更新源数据库上 AWS RDS 中的安全组定义,以接受来自 Cloud SQL VPC 的 IP 地址范围的连接。
VPC 对等互连使用专用服务访问通道,必须为每个使用 VPC 对等互连的项目配置一次。建立 private services access
后,请测试您的迁移作业以验证连接性。
为 Database Migration Service 配置专用服务访问通道
如果您要为任何 Database Migration Service 实例使用专用 IP 地址,只需为具有 Database Migration Service 实例或需要连接到 Database Migration Service 实例的每个 Google Cloud 项目配置一次专用服务访问通道。
建立专用服务访问通道需要有 compute.networkAdmin IAM 角色。为您的网络建立专用服务访问通道后,您不再需要 compute.networkAdmin
IAM 角色就能将实例配置为使用专用 IP。
如需使用专用服务访问通道,您必须先分配内部 IP 地址范围,然后创建专用连接,最后导出自定义路由。
分配的范围是预留的 CIDR 块,不能在您的本地 VPC 网络中使用。创建专用连接时,您需要指定分配。专用连接将您的 VPC 网络与底层(“服务提供方”)VPC 网络相链接。
创建专用连接后,VPC 网络和服务提供方网络仅交换子网路由。您必须导出 VPC 网络的自定义路由,使服务提供方的网络可以导入这些路由,并将流量正确地路由到您的本地网络。
对等互连配置可确立连接到另一个 VPC 网络的意图。在您的网络和另一个网络没有针对对方的对等互连配置之前,它们不会连接。在另一个网络设立与您的网络建立对等互连的相应配置之后,这两个网络中的对等互连状态都将更改为 ACTIVE,并且相互连接。如果另一个网络中没有匹配的对等互连配置,则对等互连状态保持为 INACTIVE,这表示您的网络未连接到另一个网络。
连接后,这两个网络将始终交换子网路由。如果一个对等互连网络配置为导出静态和动态自定义路由,则可以选择从该网络导入这些路由
专用服务访问通道的配置过程分为两个部分:
- 分配 IP 地址范围。此范围涵盖您的所有实例。
- 创建从 VPC 网络到服务提供方网络的专用连接。
分配 IP 地址范围
控制台
- 前往 Google Cloud 控制台中的“VPC 网络”页面。
- 选择要使用的 VPC 网络。
- 选择专用服务连接标签页。
- 选择为服务分配的 IP 范围标签页。
- 点击分配 IP 范围。
对于已分配的范围的名称,请指定
google-managed-services-VPC_NETWORK_NAME
,其中VPC_NETWORK_NAME
是要连接的 VPC 网络的名称(例如google-managed-services-default
)。说明为可选字段。点击分配以创建分配的范围。
gcloud
执行下列其中一项操作:
如需指定地址范围和前缀长度(子网掩码),请使用
addresses
和prefix-length
标志。例如,若要分配 CIDR 块192.168.0.0/16
,请将地址指定为192.168.0.0
,并将前缀长度指定为16
。gcloud compute addresses create google-managed-services-[VPC_NETWORK_NAME] \ --global \ --purpose=VPC_PEERING \ --addresses=192.168.0.0 \ --prefix-length=16 \ --network=[VPC_NETWORK_NAME]
若只指定前缀长度(子网掩码),请仅使用
prefix-length
标志。如果您省略地址范围, Google Cloud会自动选择您的 VPC 网络中未使用的地址范围。以下示例选择的是前缀长度为16
位的未使用的 IP 地址范围。gcloud compute addresses create google-managed-services-[VPC_NETWORK_NAME] \ --global \ --purpose=VPC_PEERING \ --prefix-length=16 \ --network=[VPC_NETWORK_NAME]
将 [VPC_NETWORK_NAME]
替换为您的 VPC 网络的名称,例如 my-vpc-network
。
以下示例会分配一个 IP 地址范围,该范围允许 VPC 网络 my-vpc-network
中的资源使用专用 IP 连接到 Database Migration Service 实例。
gcloud compute addresses create google-managed-services-my-vpc-network \ --global \ --purpose=VPC_PEERING \ --prefix-length=16 \ --network=my-vpc-network \ --project=my-project
创建专用连接
控制台
- 前往 Google Cloud 控制台中的“VPC 网络”页面。
- 选择要使用的 VPC 网络。
- 选择专用服务连接标签页。
- 选择连到服务的专用连接标签页。
- 点击创建连接以在您的网络与服务提供方之间创建专用连接。
- 对于指定的分配范围,请选择一个或多个未被其他服务提供方占用的现有分配范围,然后点击确定。
- 点击连接以创建连接。
gcloud
创建专用连接。
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=google-managed-services-[VPC_NETWORK_NAME] \ --network=[VPC_NETWORK_NAME] \ --project=[PROJECT_ID]
将
[VPC_NETWORK_NAME]
替换为您的 VPC 网络的名称,并将[PROJECT_ID]
替换为包含您的 VPC 网络的项目的 ID。该命令会启动一个长时间运行的操作,并返回操作名称。
检查操作是否成功。
gcloud services vpc-peerings operations describe \ --name=[OPERATION_NAME]
将
[OPERATION_NAME]
替换为从上一步返回的操作名称。
创建专用连接时,您可以指定多个分配范围。举例来说,如果一个范围已用尽,则您可以分配额外的分配范围。该服务会按您指定的顺序使用所提供的所有范围中的 IP 地址。
导出自定义路由
更新现有 VPC 网络对等互连连接,以更改 VPC 网络是向对等 VPC 网络导出还是从对等 VPC 网络导入自定义路由。
仅当对等互连网络也导出自定义路由时,您的网络才会导入自定义路由,并且仅当对等互连网络导入自定义路由时,才会接收到自定义路由。
控制台
- 前往 Google Cloud 控制台中的“VPC 网络对等互连”页面。
前往“VPC 网络对等互连”页面 - 选择要更新的对等互连连接。
- 点击修改。
- 通过选择或取消选择导入自定义路由或导出自定义路由来更新自定义路由设置。
- 点击保存。
gcloud
更新对等互连连接,以更改自定义路由的导入或导出设置。
gcloud compute networks peerings update [PEERING-NAME] \ --network=[MY-LOCAL-NETWORK] \ [--[no-]import-custom-routes] \ [--[no-]export-custom-routes]
授予 roles/servicenetworking.serviceAgent
角色
gcloud beta services identity create \
--service=servicenetworking.googleapis.com \
--project=project-id
gcloud projects add-iam-policy-binding project-id \
--member="service-account-prefix@service-networking.iam.gserviceaccount.com" \
--role="roles/servicenetworking.serviceAgent"