Cloud SQL 代理简介

本页面简要介绍了 Cloud SQL 代理,同时介绍了代理选项。

如需了解 Cloud SQL 代理的分步使用说明,请点击与您的环境所对应的链接:

您无需使用代理或配置 SSL,即可从 App Engine 标准环境连接到 Cloud SQL从 App Engine 柔性环境连接到 Cloud SQL

代理的优势

Cloud SQL 代理让您可安全地访问自己的实例,而无需已获授权网络配置 SSL

使用 Cloud SQL 代理访问 Cloud SQL 实例具有以下优势:

  • 安全连接:此代理使用采用 128 位 AES 加密的 TLS 1.2 自动加密进出数据库的流量;SSL 证书用于验证客户端和服务器身份。
  • 简化连接管理:此代理处理 Cloud SQL 的身份验证,让您无需再提供静态 IP 地址。

此代理不提供新的连接路径,而是依赖于现有 IP 连接。如需连接到使用专用 IP 的 Cloud SQL 实例,代理必须位于可以访问实例所在 VPC 网络的资源中。

Cloud SQL 代理的工作原理

Cloud SQL 代理的工作原理是在本地环境中运行一个称为“代理”的本地客户端。您的应用通过数据库使用的标准数据库协议与该代理进行通信。而该代理通过安全隧道与服务器上运行的代理配套进程进行通信。

虽然代理可以侦听任何端口,但它只会在端口 3307 中创建到 Cloud SQL 实例的传出连接。如果您有出站防火墙政策,请确保它允许连接到 Cloud SQL 实例 IP 上的端口 3307。

下图显示了该代理如何连接到 Cloud SQL:

从客户端软件连接到 SQL 实例的代理的示意图

Cloud SQL 代理的使用要求

要使用该代理,必须满足以下要求:

  • 必须启用 Cloud SQL Admin API。
  • 必须向该代理提供 Google Cloud 身份验证凭据
  • 必须向该代理提供有效的数据库用户帐号和密码。
  • 实例必须具有公共 IPv4 地址,或者配置为使用专用 IP

    该公共 IP 地址无需可供任何外部地址访问(无需添加为已获授权的网络地址)。

代理启动选项

启动代理时,向其提供以下信息:

  • 与哪些 Cloud SQL 实例建立连接
  • 该代理将在何处侦听要从您的应用发送到 Cloud SQL 的数据
  • 该代理将在何处查找向 Cloud SQL 验证您的应用时要使用的凭据
  • 要使用哪种 IP 地址类型(如果需要)。

您提供的代理启动选项决定了它是侦听 TCP 端口还是侦听 Unix 套接字。如果该代理要侦听 Unix 套接字,则会在您选择的位置(通常为 /cloudsql/ 目录)创建套接字。 对于 TCP,该代理默认侦听 localhost

运行带参数 --helpcloud_sql_proxy 可执行文件,以查看完整的启动选项列表。

您可在本地环境中的任意位置安装该代理。代理二进制文件的位置不会影响该代理侦听应用数据所使用的位置。

使用服务帐号进行身份验证

代理需要进行身份验证。使用服务帐号进行身份验证的优势在于,您可以专门为该代理创建凭据文件;只要该代理处于运行状态,这个文件就会明确、永久地关联到该代理。因此,对于未在 Compute Engine 实例上运行的生产实例,建议的方法是使用服务帐号。

如果需要从多台机器调用 Cloud SQL 代理,您可在系统映像中复制凭据文件。

要使用这种方法,您必须创建和管理凭据文件。只有拥有 resourcemanager.projects.setIamPolicy 权限的用户(如项目所有者)才能创建服务帐号。如果您的 Google Cloud 用户不具备此权限,则您必须让其他人代为创建服务帐号,或使用其他方法来验证该代理的身份。

如需创建凭据文件方面的帮助,请参阅创建服务帐号

服务帐号所需的权限

如果使用服务帐号为该代理提供凭据,必须在创建时为其分配足够权限。如果您要使用更精细的 Identity Access and Management (IAM) 角色来管理 Cloud SQL 权限,则必须向服务帐号分配一个具有 cloudsql.instances.connect 权限的角色。以下预定义 Cloud SQL 角色拥有这项权限:

  • Cloud SQL Client
  • Cloud SQL Editor
  • Cloud SQL Admin

如果您要使用传统项目角色(查看者、编辑者、所有者),该服务帐号必须至少具有编辑者角色。

用于指定 Cloud SQL 实例的选项

可采用多种方式告知代理您希望连接到哪些实例。一些方式是显式的,一些方式是隐式的。在某些配置中,您无需提前告知代理您想要连接到哪些实例,因为代理会根据连接请求进行连接。

实例指定选项由您的操作系统和环境而定:

选项 优势 注意事项和要求 Linux/macOS
(Unix 套接字)
Java Windows 备注
自动化实例发现 无需指定实例;已在默认项目中为所有实例创建套接字。 Proxy API 用量会增加。必须安装 Cloud SDK、验证其身份,并设置默认项目。必须重启代理才能添加新实例。 支持 不适用于生产实例。
项目发现 无需指定实例;已在指定项目中为所有实例创建套接字。 Proxy API 用量会增加。必须安装 Cloud SDK 并验证其身份。必须重启代理才能添加新实例。 支持 使用 -projects 参数。不适用于生产实例。
在调用代理时指定实例 实例列表是已知且静态的。 必须重启代理才能添加新实例。 支持 支持使用 TCP 套接字 支持使用 TCP 套接字 使用 -instances 参数。对于多个实例,请使用不带空格的逗号分隔列表。 了解详情
使用 Compute Engine 元数据指定实例 通过更改元数据值即可更新实例列表,无需重启代理。 仅适用于 Compute Engine。 支持 支持使用 TCP 套接字 支持使用 TCP 套接字 使用 -instances_metadata 标志。 了解详情

请参阅示例调用和连接字符串

使 Cloud SQL 代理保持最新版本

Google 有时会发布该代理的新版本。您可通过查看 Cloud SQL 代理 GitHub 版本页面,了解当前版本。 Google Groups Cloud SQL 公告论坛也会公布未来的代理版本。

API 用量

Cloud SQL 代理会向 Cloud SQL Admin API 发出请求,而这些请求将计入项目的 API 配额。

当您启动代理时,API 用量最高;使用自动发现实例这一功能或 -projects 参数时尤其如此。代理运行时,每小时针对每个连接的实例发出两个 API 调用。

Cloud SQL 代理参数和标记

Cloud SQL 代理在启动时会接受多个标记和参数。这些选项决定 Cloud SQL 代理在何处以及如何创建用于与 Cloud SQL 通信的套接字,以及如何进行身份验证。

如需代理选项方面的帮助,请参阅以下信息:

在生产环境中使用 Cloud SQL 代理

在生产环境中使用 Cloud SQL 代理时,可采取一些步骤确保该代理为您的应用提供所需的可用性。

确保 Cloud SQL 代理以永久性服务的形式运行

如果代理进程停止,则通过该代理的所有现有连接将被移除,且您的应用无法再使用该代理创建与 Cloud SQL 实例的任何连接。要避免出现这种情况,请确保该代理以永久性服务的形式运行,使其能在因任何原因退出时自动重启。这可通过使用 systemdupstartsupervisor 之类的服务来实现。对于 Windows 操作系统,将该代理作为 Windows 服务运行。通常,请确保该代理的正常运行时间要求与应用进程相同。

您的应用需要多少个 Cloud SQL 代理副本

无需为每个应用进程创建代理进程;多个应用进程可共享一个代理进程。每个工作站或虚拟机运行一个代理客户端进程。

如果要对虚拟机使用自动扩缩功能,请确保您的虚拟机配置中包含该代理,这样一来,每次启动新的虚拟机时,该虚拟机都会有专用的代理进程。

您可以通过限制或整合连接来管理应用所需的连接数。该代理不对新连接率或永久连接数作任何限制。

减少 Cloud SQL 代理输出

如果您需要减小代理日志的大小,可在启动代理时设置 -verbose=false。但请记住,这样做会降低代理输出在诊断连接问题时的有效性。

故障转移如何影响 Cloud SQL 代理

如果在配置为高可用性的实例上运行代理,并且发生了故障转移,则通过代理进行的连接受到的影响与通过 IP 进行的连接相同:所有现有连接都将丢失,并且应用必须建立新连接。但是,这无需人工干预;应用可以继续使用与之前相同的连接字符串。

及时更新代理 Docker 映像

代理 Docker 映像基于特定版本的 Cloud SQL 代理。 当 Cloud SQL 代理推出新版本时,请获取代理 Docker 映像的新版本,以使您的环境保持最新状态。您可以通过 Cloud SQL 代理 GitHub 版本页面了解 Cloud SQL 代理的当前版本。

后续步骤