本页面介绍如何将专用 IP 与 Cloud SQL 配合使用。如需了解将 Cloud SQL 实例配置为使用专用 IP 的分步说明,请参阅配置专用 IP。
如需了解适用于 Cloud SQL 网络的 Terraform 解决方案,请参阅简化 Cloud 网络配置解决方案。
概览
将 Cloud SQL 实例配置为使用专用 IP 地址需要专用服务访问通道。通过专用服务访问通道,您可以在 VPC 网络和底层 Google Cloud 服务提供方的 VPC 网络之间创建专用连接。提供服务的 Google Cloud 实体(例如 Cloud SQL)称为服务提供方。每项 Google Cloud 服务都会创建一个子网,用于预配资源。子网的 IP 地址范围通常是服务选择的 /24 CIDR 地址块,来自分配的 IP 地址范围。
专用连接可让您不必通过互联网或使用外部 IP 地址即可访问服务。因此,专用 IP 地址的网络延迟时间比公共 IP 地址短。
您可以使用专用服务访问通道连接到 Cloud SQL 实例:
来自有权访问您的 VPC 网络的内部来源。
通过 VPN 隧道、反向 SSH 隧道或 Cloud Interconnect 从外部来源连接到您的 VPC 网络。
您可以跨区域连接到专用 IP 地址。您还可以在项目间使用共享 VPC 建立连接。
分配的 IP 地址范围
如需在具有专用 IP 的 VPC 网络中使用 Cloud SQL 实例,您需要分配 IP 地址范围,以便为此 VPC 设置专用服务访问通道。如需整理 Cloud SQL 实例,您可能需要为专用连接分配多个 IP 地址范围。为 Cloud SQL 实例配置专用 IP 时,您可以同时选择 VPC 网络和分配的 IP 地址范围。
分配的范围大小
请为 Cloud SQL 和计划使用的其他 Google Cloud 代管式服务分配足够大的 IP 范围,每个 IP 范围需要有分配的范围内的专用 IP 地址块。大小下限为一个 /24 地址块(256 个地址),但建议大小为一个 /16 地址块(65536 个地址)。
分配 IP 地址范围时,您需要考虑计划创建的实例数。
子网掩码 | 地址 | 可用的 Cloud SQL 实例 |
---|---|---|
/24 | 256 | 50 |
/23 | 512 | 100 |
/22 | 1024 | 200 |
/21 | 2048 | 400 |
/20 | 4096 | 800 |
Cloud SQL 使用 /24 CIDR 范围作为范围单元,每个单元只能用于单个区域中 Cloud SQL 实例。例如,如果您创建两个 Cloud SQL 实例,但针对两个不同的区域,则必须至少有两个 /24 CIDR 范围。
此外,如果项目在 2021 年 4 月 1 日之前开始使用 Cloud SQL,则 Postgres 实例将无法与 MySQL 和 SQL Server 实例共享同一个范围单元,并且需要在每个区域中都拥有自己的单元。较新的项目不受此限制的约束。
为您的网络设置专用服务访问通道
首次在特定 VPC 网络上配置专用 IP 连接时,您需要执行一次性过程为 Cloud SQL 设置专用服务访问通道。
建立专用服务访问通道后,您可以创建一个 Cloud SQL 实例并将其配置为使用专用 IP,或为现有 Cloud SQL 实例配置专用 IP。如需查看分步说明,请参阅配置专用 IP。
每当更改已建立的连接时,您都需要更新 vpc-peerings
。
专用 IP 的要求
如需使用专用 IP,您的网络和应用环境必须满足以下要求。此外,首次设置专用 IP 时,还需要一些额外的 IAM 权限。
应用环境要求
- 如果您是从 GKE 连接,则必须在 VPC 原生集群上运行 GKE 1.8 或更高版本。
API 和 IAM 要求
- 您必须为您的项目启用 Service Networking API。
- 为了管理专用服务访问通道连接,您的用户必须具有以下 IAM 权限。如果用户不具备所需的权限,您会收到权限不足的错误。
compute.networks.list
compute.addresses.create
compute.addresses.list
servicenetworking.services.addPeering
如果您使用的是共享 VPC 网络,还需要添加相同的用户,并为宿主项目分配相同的权限。
如果您使用的是共享 VPC 网络,还需要为宿主项目启用 Service Networking API。
示例
在以下示例中,客户 VPC 网络为 Google Cloud 服务分配了地址范围 10.240.0.0/16
,并建立了使用已分配范围的专用连接。每项 Google Cloud 服务(例如 Cloud SQL)都会在所分配的块中创建一个子网,以预配给定区域中的新资源,例如 Cloud SQL 实例。
- 分配给专用连接的分配范围是
10.240.0.0/16
。通过此分配,Google Cloud 服务可以创建子网来预配新资源。 - 在专用连接的 Google Cloud 服务端,Google Cloud 会为客户创建一个项目。该项目是独立的,这意味着没有其他客户共享该项目,并且客户只需要为客户预配的资源付费。
- 每项 Google Cloud 服务都会创建一个子网,用于预配资源。子网的 IP 地址范围通常是服务选择的
/24
CIDR 块,来自分配的 IP 地址范围。您无法修改服务提供方的子网。服务在现有区域子网(以前由该服务创建)中预配新资源。如果子网已满,该服务便会在同一区域中创建新子网。 - 如果服务支持,客户网络中的虚拟机实例可以访问任何区域中的服务资源。一些服务可能不支持跨区域通信。如需了解详情,请查看相关服务的文档。
- 跨区域流量(在这种情况下,虚拟机实例会与不同区域的资源进行通信)的出站数据传输费用仍然需要支付。
- 为 Cloud SQL 实例分配的 IP 地址是
10.240.0.2
。在客户 VPC 网络中,目标为10.240.0.2
的请求会路由到专用连接,再路由到服务提供方的网络。到达服务网络后,服务网络会包含将请求定向到正确资源的路由。 - VPC 网络之间的流量在 Google Cloud 网络内部传输,而不是通过公共互联网传输。
网络问题
Cloud SQL 会为每个区域分配专用服务访问通道 IP 范围内的一个 /24 子网。例如,将 MySQL 实例置于两个区域需要分配的 IP 地址范围至少包含两个大小为 /24 的可用子网。
使用专用 IP 地址连接到 Cloud SQL 实例时会自动获得授权来使用 RFC 1918 地址范围。这样一来,所有专用客户端都可以在不经过 Cloud SQL Auth 代理的情况下访问数据库。
默认情况下,Cloud SQL 不会从 VPC 中获知非 RFC 1918 子网路由。您需要将网络对等互连更新到 Cloud SQL,以导出所有非 RFC 1918 路由。
安全
通过专用服务访问通道传输的流量会经过特定级别的加密。如需了解详情,请参阅 Google Cloud 的虚拟网络加密和身份验证。
Cloud SQL Auth 代理可配置为使用专用 IP 地址进行连接,它使用 IAM 凭据提供身份验证,并使用轮替 SSL/TLS 证书进行端到端加密。
如果您的安全要求强制您使用自行管理的 SSL/TLS 证书,请参阅配置 SSL/TLS 中的说明。
与将所有实例置于“默认”VPC 网络中相比,为每个具有专用 IP 地址的实例创建一个 VPC 网络可实现更好的网络隔离。
多个 VPC 连接
Cloud SQL 通过专用服务访问通道支持专用 IP 地址。 当您创建 Cloud SQL 实例时,Cloud SQL 会在它自己的虚拟私有云 (VPC)(称为 Cloud SQL VPC)中创建该实例。如果启用专用 IP,则需要在 Cloud SQL VPC 和 VPC 网络之间设置对等互连连接。这样使 VPC 网络中的资源能够访问 Cloud SQL VPC 网络中的 Cloud SQL 资源的内部 IP 地址。
通过 VPC 网络对等互连,Cloud SQL 可以在内部实现专用服务访问,从而使内部 IP 地址可在两个 VPC 网络之间连接,无论它们是否属于同一个项目或组织。但是,由于 VPC 网络对等互连不具有传递性,因此它仅会在两个直接对等互连的 VPC 之间广播路由。如果您有额外的 VPC,则无法使用通过原始 VPC 设置的连接访问您的 Cloud SQL 资源。
如需缓解此限制并使用专用 IP 地址将 Cloud SQL 实例连接到多个 VPC,您可以使用以下连接选项:
- 使用自定义通告路由连接
- 使用中间代理 (SOCKS5) 连接
- 使用 Cloud SQL Auth 代理即服务连接
如需详细了解如何连接多个 VPC,请参阅将实例连接到多个 VPC。
专用 IP 主题快速参考
管理使用专用 IP 地址的 Cloud SQL 实例时,您可能希望了解以下某些主题:
主题 | 讨论 |
---|---|
共享 VPC 网络 | 您可以在共享 VPC 网络中创建使用专用 IP 地址的 Cloud SQL 实例。但是,您无法将共享 VPC 网络中的专用 IP 地址分配给现有 Cloud SQL 实例。 |
区域 | 您可以跨区域通过专用 IP 建立连接。 |
传统网络 | 您无法从旧版网络连接到 Cloud SQL 实例的专用 IP 地址。旧版网络不支持 VPC 网络对等互连或专用服务访问通道。 |
移除专用 IP | 将 Cloud SQL 实例配置为使用专用 IP 地址后,您将无法从该实例中移除专用 IP 地址功能。 |
公共 IP 和专用 IP | 您可以同时使用公共 IP 和专用 IP 连接到同一个 Cloud SQL 实例。两种连接方法不会相互影响。 |
现有 Cloud SQL 实例 | 您可以在创建实例时将实例配置为使用专用 IP。您也可以将现有实例配置为使用专用 IP。 将现有实例配置为使用专用 IP 地址或更改其连接的网络会导致实例重启,进而出现几分钟的停机时间。 |
静态 IP 地址 | 对于公共和专用 IP 地址,Cloud SQL 实例的传入地址是静态的;不会改变。除了始终为静态的外部服务器副本的传出公共 IP 地址之外,传出地址并非始终为静态。 |
副本 | 副本继承其主实例的专用 IP 状态。您无法直接在副本上配置专用 IP。如果您要使用专用 IP 地址连接到副本,则无需为副本创建其他 VPC 专用连接,因为它是从主实例继承的。 |
Cloud SQL Auth 代理 | 如需使用专用 IP 连接到 Cloud SQL 实例,Cloud SQL Auth 代理必须位于可以访问实例所在 VPC 网络的资源中。如果实例同时启用了这两种 IP 地址类型,则 Cloud SQL Auth 代理将默认使用公共 IP 地址。为确保实例使用专用 IP 地址,您需要将 -ip_address_types=PRIVATE 标志传递给 Cloud SQL Auth 代理。了解详情。 |
无服务器 VPC 访问通道 | 如需从无服务器来源(例如 App Engine 标准环境、Cloud Run 或 Cloud Run functions)进行连接,您的应用或函数将通过无服务器 VPC 访问通道直接连接到您的实例,而无需使用 Cloud SQL Auth 代理。 |
VPC 网络对等互连 | 使用专用服务访问通道的连接依赖于 VPC 网络对等互连。但是,您不能显式创建 VPC 网络对等互连,因为要对等互连的网络是 Google Cloud 内部的网络。创建专用服务访问通道连接后,您可以在 Google Cloud 控制台的 VPC 网络对等互连页面看到其底层 VPC 网络对等互连;除非您想移除专用连接,否则不要删除它。 详细了解 VPC 网络对等互连。 |
VPC Service Controls | VPC Service Controls 可提高您降低数据渗漏风险的能力。借助 VPC Service Controls,您可以为 Cloud SQL 实例创建边界。VPC Service Controls 限制了外部对边界内资源的访问权限。只有边界内的客户端和资源才能彼此互动。如需了解详情,请参阅 VPC Service Controls 概览。此外,还请查看使用 VPC Service Controls 时的 Cloud SQL 限制。如需将 VPC Service Controls 与 Cloud SQL 搭配使用,请参阅配置 VPC Service Controls。 |
传递性对等互连 | 只有直接对等互连的网络才能进行通信。不支持传递性对等互连。换句话说,如果 VPC 网络 N1 与 N2 和 N3 对等互连,但是 N2 和 N3 未直接连接,则 VPC 网络 N2 不能与 VPC 网络 N3 通过 VPC 网络对等互连进行通信。 一个项目中的客户端可以使用共享 VPC 网络连接到多个项目中的 Cloud SQL 实例。 |
移动 Cloud SQL 实例 | Cloud SQL 实例只能在其所属项目拥有的网络之间移动。此外,Cloud SQL 实例既不能在项目之间移动,也不能在由不同项目托管的网络之间移动。 |
后续步骤
- 了解如何配置专用 IP。
- 详细了解专用服务访问通道。
- 了解如何为 Cloud SQL 实例配置专用服务访问通道。
- 详细了解 Cloud VPN。
- 详细了解 VPC 网络。
- 详细了解 VPC 网络对等互连。
- 详细了解共享 VPC。
- 详细了解 Cloud SQL Auth 代理。