使用 Cloud SQL Auth 代理 Docker 映像连接 SQL Server 客户端

本页面介绍了如何使用 Cloud SQL Auth 代理 Docker 映像从运行 Linux 或 Compute Engine Linux 实例的客户端机器将 sqlcmd 客户端连接到 Cloud SQL 实例。

须知事项

您必须先完成以下操作:

使用 Cloud SQL Auth 代理 Docker 映像连接 sqlcmd 客户端

如需使用 Cloud SQL Auth 代理 Docker 映像进行连接,请执行以下操作:

  1. Enable the Cloud SQL Admin API.

    Enable the API

  2. 如果您使用的是 Compute Engine 实例,请为该实例执行以下准备工作:
    1. 显示 Compute Engine 实例的属性:
      gcloud compute instances describe [GCE_INSTANCE_NAME]
    2. 验证该实例上启用的范围。

      如需使用范围进行身份验证,需要启用以下两个范围:

      • https://www.googleapis.com/auth/sqlservice.admin
      • https://www.googleapis.com/auth/devstorage.read_write

      或者,借助 https://www.googleapis.com/auth/cloud-platform 范围启用所有 Google Cloud Platform API。

      如果您的 Compute Engine 实例没有正确的范围,您可以更新该实例,使之包含这些范围。如需了解详情,请参阅 Compute Engine 文档

    3. 按照连接到 Linux 实例中的说明,打开到该实例的终端连接。
  3. 如果尚未安装 sqlcmd 客户端,请将其安装到 Compute Engine 实例或客户端计算机上。

    Debian/Ubuntu

    对于 Debian/Ubuntu,请安装适用的 SQL Server 命令行工具

    CentOS/RHEL

    对于 CentOS/RHEL,请安装适用的 SQL Server 命令行工具

    openSUSE

    对于 openSUSE,请安装适用的 SQL Server 命令行工具

    其他平台

    如需了解如何安装 SQL Server,请参阅着陆页,以及 SQL Server 下载页面

  4. 安装 Docker 客户端(如果需要):
    curl https://get.docker.com | sh
    sudo usermod -aG docker $USER

    如果您使用的是容器优化型 Compute Engine 实例,那么该实例已经安装了 Docker 客户端。

  5. 通过 Google Container Registry 安装 Cloud SQL Auth 代理 Docker 映像。
    docker pull gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.14.1
  6. 如果您在本地机器(而非 Compute Engine 实例)上运行 Cloud SQL Auth 代理 Docker 映像,或者 Compute Engine 实例没有正确的范围,请创建一个 Google Cloud Platform 服务账号。
    1. 在 Google Cloud 控制台中,转到服务账号页面。

      转到“服务账号”

    2. 选择包含您的 Cloud SQL 实例的项目。
    3. 点击创建服务账号
    4. 服务账号名称字段中输入服务账号的描述性名称。
    5. 服务账号 ID 更改为一个不重复且易于识别的值,然后点击创建并继续
    6. 点击选择角色字段,然后选择以下角色之一:
      • Cloud SQL > Cloud SQL Client
      • Cloud SQL > Cloud SQL Editor
      • Cloud SQL > Cloud SQL Admin
    7. 点击完成以完成服务账号的创建过程。
    8. 点击新服务账号的操作菜单,然后选择管理密钥
    9. 点击添加键下拉菜单,然后点击创建新密钥
    10. 确认密钥类型是 JSON,然后点击创建

      私钥文件将下载到您的机器上。您可以将此文件移至其他位置,但要确保密钥文件的安全。

    启动 Cloud SQL Auth 代理时,以“PATH_TO_KEY_FILE”形式提供密钥文件的路径。

  7. 转到 Google Cloud 控制台中的“Cloud SQL 实例”页面。

    进入“Cloud SQL 实例”

  8. 选择相应实例以打开其“实例详情”页面,然后复制实例连接名称

    例如:myproject:us-central1:myinstance

  9. 启动 Cloud SQL Auth 代理。

    您可以使用 TCP 套接字或 Unix 套接字启动 Cloud SQL Auth 代理,具体取决于您的语言和环境。采用 Java 编程语言编写的应用或 Windows 环境不支持 Unix 套接字。

    TCP 套接字

    docker run -d \
      -v <PATH_TO_KEY_FILE>:/path/to/service-account-key.json \
      -p 127.0.0.1:1433:1433 \
      gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.14.1 \
      --credentials-file /path/to/service-account-key.json <INSTANCE_CONNECTION_NAME>

    如果您使用的是 Compute Engine 实例提供的凭据,请勿包含 --credentials-file 参数和 -v <PATH_TO_KEY_FILE>:/path/to/service-account-key.json 行。

    请务必在 -p 中指定 127.0.0.1 前缀,以免 Cloud SQL Auth 代理在本地主机外部公开。若要从 Docker 容器外部访问端口,需要在实例参数中指定“0.0.0.0”。

    Unix 套接字

    docker run -d -v /cloudsql:/cloudsql \
      -v <PATH_TO_KEY_FILE>:/path/to/service-account-key.json \
      gcr.io/cloud-sql-connectors/cloud-sql-proxy:2.14.1 //
      --unix-socket=/cloudsql \
      --credentials-file /path/to/service-account-key.json <INSTANCE_CONNECTION_NAME> 

    如果您使用的是 Compute Engine 实例提供的凭据,请勿包含 --credentials-file 参数和 -v <PATH_TO_KEY_FILE>:/path/to/service-account-key.json 行。

    如果您使用的是容器优化型映像,请使用可写目录代替 /cloudsql,例如:

    -v /mnt/stateful_partition/cloudsql:/cloudsql

    您可以指定多个实例(用英文逗号分隔),您还可以使用 Compute Engine 元数据以动态方式确定要连接的实例。 详细了解代理参数。

  10. 启动客户端:

    使用的连接字符串取决于您是使用 TCP 套接字还是 Docker 启动 Cloud SQL Auth 代理。

    TCP 套接字

    1. 启动 sqlcmd 客户端:
      sqlcmd -S tcp:127.0.0.1,1433 -U USERNAME -P PASSWORD

      使用 TCP 套接字连接时,可通过 127.0.0.1 访问 Cloud SQL Auth 代理。

    2. 如果出现提示,请输入密码。
    3. 系统会显示 sqlcmd 提示符。
需要帮助?如需获得代理问题排查方面的帮助,请参阅 Cloud SQL Auth 代理连接问题排查,或参阅我们的 Cloud SQL 支持页面。

确保 Cloud SQL Auth 代理 Docker 映像为最新版本

Cloud SQL Auth 代理 Docker 映像基于特定版本的 Cloud SQL Auth 代理。当 Cloud SQL Auth 代理推出新版本时,请拉取 Cloud SQL Auth 代理 Docker 映像的新版本,以使您的环境保持最新状态。您可以通过查看 Cloud SQL Auth 代理 GitHub 版本页面,了解 Cloud SQL Auth 代理的当前版本。Google Groups Cloud SQL 公告论坛也会公布未来的代理版本。

后续步骤