从 Cloud SQL 实例的 VPC 外部连接到该实例

本页面介绍了如何从 Cloud SQL 实例配置的 Virtual Private Cloud (VPC) 外部连接到该实例。

准备工作

在开始之前,请确保完成以下操作:

  1. 创建一个 Cloud SQL 实例
  2. 将实例配置为使用内部 IP 地址而非外部 IP 地址。

外部连接简介

Cloud SQL 实例包含 Google 管理的 VPC 中的多个节点。创建实例时,您还可以在其中一个 VPC 与包含新实例的 Google 管理的 VPC 之间配置专用服务访问通道Private Service Connect。借助此对等互连连接,您可以使用内部 IP 地址访问实例的 VPC 上的资源,就像这些资源是您自己的 VPC 的一部分一样。

在以下情况下,请从连接的 VPC 外部连接到实例:

  • 您的应用在您用于通过专用服务访问通道或 Private Service Connect 连接到实例的 VPC 之外运行。

  • 您的应用在 Google 网络外部的 VPC 上运行。

  • 您的应用在位于公共互联网其他位置的机器上运行。

在所有这些情况下,您都必须配置其他服务,才能启用这种与 Cloud SQL 实例的外部连接。

根据您的需求,我们建议您采用以下解决方案来建立外部连接:

  • 对于项目开发或原型设计,或者对于费用相对较低的生产环境,请在 VPC 中配置中间虚拟机 (VM)(也称为堡垒)。您可以通过各种方法在此中间虚拟机上进行构建,以将其转换为外部应用环境与 Cloud SQL 实例之间的安全连接。

  • 对于需要高可用性的生产环境,请考虑通过 Cloud VPN 或 Cloud Interconnect 在 VPC 与应用之间建立永久连接

以下部分介绍了这些解决方案。

通过中间虚拟机连接

如需使用开源工具和最少的其他资源从 Cloud SQL 实例的 VPC 外部建立连接,请在该 VPC 中配置的中间虚拟机上运行代理服务。您可以配置新虚拟机,也可以使用已在 Cloud SQL 实例的 VPC 中运行的虚拟机。

作为自行管理的解决方案,使用中间虚拟机通常比使用 Network Connectivity 产品的费用更低且设置时间更短。中间虚拟机也存在一些缺点:连接的可用性、安全性和数据吞吐量都依赖于中间虚拟机,您必须将该虚拟机作为项目的一部分进行维护。

通过 IAP 连接

使用 Identity-Aware Proxy (IAP),您可以安全地连接到 Cloud SQL 实例,而无需公开中间虚拟机的内部 IP 地址。您可以结合使用防火墙规则和 Identity and Access Management (IAM) 来限制通过此路由的访问。这使得 IAP 成为开发和原型设计等非生产用途的理想解决方案。

Identity-Aware Proxy 架构

在该图中,IAP 充当 VPC 之外的外部客户端与 VPC 中的中间虚拟机之间的网关。客户端会创建连接到 IAP 的 SSH 隧道。Cloud SQL Auth 代理会对虚拟机与 Cloud SQL 实例之间的流量进行加密。通过这两个代理,客户端和实例之间会建立通信。

如需配置对实例的 IAP 访问权限,请按照以下步骤操作:

  1. 在外部客户端上,安装 gcloud CLI

  2. 在中间虚拟机上,下载并安装 Cloud SQL Auth 代理

  3. 在中间虚拟机上,启动 Cloud SQL Auth 代理

    由于虚拟机配置了内部 IP 地址,因此在启动 Cloud SQL Auth 代理时,您必须提供 --private-ip 选项。

  4. 在您的 Google Cloud 项目中,启用 IAP TCP 转发

    定义新的防火墙规则时,请允许流向端口 22 (SSH) 的入站 TCP 流量。如果您使用的是启用了预填充的 default-allow-ssh 规则项目默认网络,则无需定义其他规则。

  5. 使用 SSH 通过 IAP 在外部客户端和中间虚拟机之间配置端口转发:

    gcloud compute ssh VM_NAME \
    --tunnel-through-iap \
    --zone=ZONE_NAME \
    --ssh-flag="-L 1433:localhost:1433"
    

    进行以下替换:

    • VM_NAME::虚拟机的名称
    • ZONE_NAME::与虚拟机关联的可用区的名称
  6. 在外部客户端上,使用 SQL Server 客户端测试您的连接。

通过 SOCKS 代理连接

在中间虚拟机上运行 SOCKS 服务,即可通过 Cloud SQL Auth 代理提供的端到端加密,建立与 Cloud SQL 实例的灵活且可扩缩的连接。

如需详细了解如何使用 SOCKS 代理连接到 Cloud SQL 实例,请参阅使用中间代理 (SOCKS5) 连接

通过池程序连接

如果您需要在中间虚拟机而非外部客户端上安装并运行 Cloud SQL Auth 代理,则可以通过将该代理与协议感知代理(也称为池程序)配对来启用与虚拟机的安全连接。ADO.NET 是一种常用的 SQL Server 开源池程序。

在此解决方案中,您需要同时在中间虚拟机上运行 Cloud SQL Auth 代理和池程序。然后,您的客户端或应用可以通过 SSL 安全地直接连接到池程序,而无需运行任何其他服务。池程序负责通过 Cloud SQL Auth 代理将 PostgreSQL 查询传递给 Cloud SQL 实例。

由于每个 Cloud SQL 实例都有单独的内部 IP 地址,因此每个代理服务只能与一个特定实例(主实例、备用实例或读取池)进行通信。因此,对于每个实例,您必须使用正确配置的 SSL 证书运行单独的池程序服务。

通过 Cloud VPN 或 Cloud Interconnect 连接

对于需要高可用性 (HA) 的生产工作,我们建议使用 Google Cloud Network Connectivity 产品,例如 Cloud VPNCloud Interconnect,具体取决于外部服务的需求和网络拓扑。然后配置 Cloud Router 以通告相应的路由。

如需详细了解 Network Connectivity 解决方案,请参阅选择 Network Connectivity 产品

后续步骤