配置专用 IP

本页面介绍如何将 Cloud SQL 实例配置为使用专用 IP。

如需了解专用 IP 的工作原理以及环境和管理要求,请参阅专用 IP

准备工作

API 和 IAM 要求

  • 您必须为您的项目启用 Service Networking API
  • 如果您使用的是共享 VPC 网络,还需要为宿主项目启用此 API。

  • 为了管理专用服务访问通道连接,用户应具有以下 IAM 权限。如果您没有所需的权限,则可能会出现权限不足错误。
    • compute.networks.list
    • compute.addresses.create
    • compute.addresses.list
    • servicenetworking.services.addPeering

    如果您使用的是共享 VPC 网络,则还需要将用户添加到宿主项目,并在宿主项目上将相同权限分配给用户。

专用服务访问

在项目中创建新的 VPC 网络时,您需要配置专用服务访问通道以分配 IP 地址范围并创建专用服务连接。这允许 VPC 网络中的资源连接到 Cloud SQL 实例。 控制台提供了向导,帮助您设置此配置。

将实例配置为使用专用 IP

您可以在创建 Cloud SQL 实例时将实例配置为使用专用 IP,或对现有实例如此配置。

为新实例配置专用 IP

如需在创建 Cloud SQL 实例时将该实例配置为使用专用 IP,请执行以下操作:

控制台

  1. 在 Google Cloud Console 中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 点击创建实例
  3. 在“创建”向导的配置选项部分中,展开连接部分。
  4. 选中专用 IP 复选框。

    下拉列表显示了项目中的可用 VPC 网络。如果您的项目是共享 VPC 的服务项目,则还会显示宿主项目的 VPC 网络。

  5. 选择您要使用的 VPC 网络:
  6. 如果您看到必须提供专用服务连接

    1. 点击设置连接
    2. 分配 IP 范围部分,选择以下选项之一:
      • 从下拉列表中选择一个或多个现有的 IP 地址范围,或者创建一个新的 IP 地址范围。下拉列表包含先前分配的范围(若有),或者您可以选择分配新 IP 范围,然后输入新范围和名称。
      • 在网络中使用自动分配的 IP 地址范围。
    3. 点击继续
    4. 点击创建连接
    5. 确认您看到已成功为网络 VPN_NAME 创建专用服务连接状态。
  7. 点击保存

gcloud

如果您之前没有为 Cloud SQL 配置专用服务访问通道,请按照以下说明执行此操作。创建 Cloud SQL 实例,并使用 --network 参数指定所选 VPC 网络的名称,使用 --no-assign-ip 标志停用公共 IP。--network 参数值的格式为 projects/PROJECT_ID/global/networks/VPC_NETWORK_NAMEPROJECT_ID 是 VPC 网络的项目 ID。如果 VPC 网络是共享 VPC,则该 ID 应该是共享 VPC 宿主项目的 ID。
gcloud beta sql instances create INSTANCE_ID \
--project=PROJECT_ID \
--network=VPC_NETWORK_NAME \
--no-assign-ip

为现有实例配置专用 IP

如果将现有的 Cloud SQL 实例配置为使用专用 IP,则会导致该实例重启,进而造成停机。

要将现有实例配置为使用专用 IP,请执行以下操作:

控制台

  1. 在 Google Cloud Console 中,转到 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 点击实例名称,打开其概览页面。
  3. 从 SQL 导航菜单中选择连接
  4. 选中专用 IP 复选框。

    下拉列表会显示项目中可用的网络。

  5. 选择您要使用的 VPC 网络:
  6. 如果您看到必须提供专用服务连接

    1. 点击设置连接
    2. 分配 IP 范围部分,选择以下选项之一:
      • 从下拉列表中选择一个或多个现有的 IP 地址范围,或者创建一个新的 IP 地址范围。下拉列表包含先前分配的范围(若有),或者您可以选择分配新 IP 范围,然后输入新范围和名称。
      • 在网络中使用自动分配的 IP 地址范围。
    3. 点击继续
    4. 点击创建连接
    5. 确认您看到已成功为网络 VPN_NAME 创建专用服务连接状态。
  7. 点击保存

gcloud

如果您之前没有为 Cloud SQL 配置专用服务访问通道,请按照以下说明执行此操作。更新 Cloud SQL 实例,并使用 --network 参数指定所选 VPC 网络的名称。

VPC_NETWORK_NAME 是所选 VPC 网络的名称,例如:my-vpc-network。--network 参数值的格式为:https://www.googleapis.com/compute/alpha/projects/[PROJECT_ID]/global/networks/[VPC_NETWORK_NAME]

gcloud beta sql instances patch INSTANCE_ID \
--project=PROJECT_ID \
--network=VPC_NETWORK_NAME \
--no-assign-ip

使用实例的专用 IP 连接到实例

您可以使用专用服务访问通道从同一 VPC 子网(此处定义为内部来源)中的 Compute Engine 或 Google Kubernetes Engine 实例或从该网络外部(外部来源)连接到 Cloud SQL 实例。

从内部来源连接

如需从您的 Cloud SQL 实例(例如 Compute Engine 资源上运行的 Cloud SQL Auth 代理)所在的 Google Cloud 项目中的来源进行连接,该资源必须与 Cloud SQL 实例位于同一 VPC 网络中。

如需从无服务器源(例如 App Engine 标准环境Cloud RunCloud Functions 进行连接,您的应用或函数将通过无服务器 VPC 访问通道直接连接到您的实例,而无需使用 Cloud SQL Auth 代理。

从外部来源连接

如果外部网络连接到 Cloud SQL 实例所连接的 VPC 网络,您可以从外部网络(本地网络或 VPC 网络)中的客户端进行连接。如需允许从外部网络进行连接,请执行以下操作:

  1. 确保您的 VPC 网络已使用 Cloud VPN 隧道或者用于专用互连合作伙伴互连的 VLAN 连接来连接到外部网络。
  2. 确保管理 Cloud VPN 隧道和 Cloud Interconnect 连接 (VLAN) 的 Cloud Router 路由器上的 BGP 会话已收到来自本地网络的特定前缀(目的地)。默认路由(目的地 0.0.0.0/0)无法导入到 Cloud SQL VPC 网络中,因为该网络有自己的本地默认路由。即使 Cloud SQL 对等互连配置为从您的 VPC 网络导入自定义路由,也会始终使用目的地的本地路由。
  3. 识别由专用服务连接生成的对等互连连接。根据服务的不同,专用服务连接可能会创建以下一个或多个对等互连连接,但不一定会全部创建:
    • cloudsql-mysql-googleapis-com
    • cloudsql-postgres-googleapis-com
    • servicenetworking-googleapis-com
  4. 更新所有对等互连连接以启用导出自定义路由功能。
  5. 识别专用服务连接使用的分配范围
  6. 在管理 Cloud VPN 隧道或 Cloud Interconnect 连接 (VLAN) 的 BGP 会话的 Cloud Router 上,针对分配的范围创建 Cloud Router 自定义路由通告

从 Cloud Shell 连接

Cloud Shell 目前不支持连接到仅具有专用 IP 地址的 Cloud SQL 实例。

从非 RFC 1918 地址连接

RFC 1918 指定分配给内部(即组织内)使用的 IP 地址,这些地址将不会在互联网上路由。具体包括:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

使用专用 IP 地址连接到 Cloud SQL 实例时会自动获得授权来使用 RFC 1918 地址范围。因此,所有专用客户端都可以在不经过代理的情况下访问数据库。

非 RFC 1918 地址范围(不在 RFC 1918 地址空间内的地址)必须配置为已获授权的网络

如需从非 RFC 1918 地址进行连接,您必须设置每个实例的 IP 授权,以允许来自非 RFC 1918 地址范围的流量。

例如,按照以下方式使用 gcloud 命令:

gcloud sql instances patch INSTANCE_NAME \
--authorized-networks=192.88.99.0/24,11.0.0.0/24

默认情况下,Cloud SQL 不会从 VPC 中获知非 RFC 1918 子网路由。您需要将网络对等互连更新到 Cloud SQL,以导出所有非 RFC 1918 路由。

gcloud compute networks peerings update PEERING_CONNECTION 
--network=NETWORK
--export-subnet-routes-with-public-ip
--project=PROJECT_ID
  • PEERING_CONNECTION 是 VPC 网络与服务提供方网络之间的专用服务连接生成的对等互连连接的名称
  • NETWORK 为 VPC 网络的名称。
  • PROJECT_ID 是 VPC 网络的项目的 ID。如果您使用的是共享 VPC,请使用宿主项目 ID。

问题排查

问题 问题排查
Aborted connection 可能的问题:
  • 网络不稳定。
  • 没有对 TCP keep-alive 命令的响应(客户端或服务器无响应,可能超载)。
  • 超出了数据库引擎的连接生命周期,服务器终止了该连接。

应用必须能够容忍网络故障并遵循最佳做法,例如连接池和重试。大多数连接池程序会尽可能捕获这些错误。否则,应用必须正常重试或失败。

对于连接重试,我们建议使用以下方法:

  1. 指数退避算法。以指数方式增加每次重试之间的时间间隔。
  2. 另外,增加随机退避时间。

结合使用这些方法有助于减少限制。

后续步骤