如何将 Data Fusion 连接到 Cloud SQL 代理 虚拟机设置CloudSQL 驱动程序

问题描述

我正在尝试将 Data Fusion 与具有私有 IP 的 Cloud sql MysqL 连接起来。我已经阅读了很多资源,似乎有可能(至少我仍然不相信这是不可能的)。到目前为止我所拥有的:

  • 具有私有 IP 的 Data Fusion 私有实例。
  • 具有私有 IP 的 Cloud sql for MysqL 实例。
  • 部署在虚拟机上的 Cloud sql 代理。
  • 一切都连接到同一个认 VPC 网络。
  • 防火墙完全打开(IP 范围内的入口、出口:0.0.0.0/0 和所有协议端口)

从我的 VM 实例,我可以使用以下命令 MysqL -u root –host 127.0.0.1 –port 3306 连接到 MysqL 数据库。尝试在 Cloud Fusion 中使用相同的参数时,我无法建立连接。应该做什么,我可以检查什么以确保所有这些都正确设置。

编辑

我最初接受了 Ajai 的回答,但后来没有接受,因为我无法在新项目中建立连接。可能有一个元素,需要在某处完成,但这里缺少。

解决方法

我已经成功地重新创建了环境,这里是详细的步骤,也许您在此过程中遗漏了一步:

  1. 在具有私有 Google 访问权限的 VPC 中创建子网 Configuring Private Google Access
  2. 创建附加到同一 VPC 的私有云数据融合实例
  3. 创建防火墙规则,允许分配的服务网络范围访问端口 3307 上的代理虚拟机
  4. 创建附加到同一 VPC 的私有 CloudSQL MySQL 实例
  5. 按照Set up VPC Network Peering中概述的步骤在 Cloud Data Fusion 和同一 VPC 之间创建 VPC 对等互连
  6. 在第 1 步的子网中部署了一个虚拟机
  7. 通过Install the Cloud SQL Auth proxy中概述的步骤部署了 CloudSQL 代理
  8. 使用以下命令行执行 Cloud SQL 代理(注意,0.0.0.0 允许绑定到所有 IP):
    *./cloud_sql_proxy -instances=<Instance Connection Name>=tcp:0.0.0.0:3307
  1. 在 CDF 控制台上运行测试: Successful Connection

验证上述内容后,您可以将 CloudSQL 代理作为 linux 服务或启动脚本自动化。

附言感谢您引用我们的文章!

编辑:

如果您想使用 docker 版本的代理,请按照 Ajai 的回答使用以下步骤代替第 7 步和第 8 步:

sudo docker run -d \
  -p 0.0.0.0:3307:3307 \
  gcr.io/cloudsql-docker/gce-proxy:latest /cloud_sql_proxy \
  -instances=<instance connection name>=tcp:0.0.0.0:3307

编辑 2

关于代理需要指出的 2 个关键点是您可能已经拥有 3306 绑定到同一实例上的 MySQL。使用像 3307(或其他号码)这样的端口可以减少这种可能性。请注意,对于到 CloudSQL 本身的出站连接,CloudSQL 代理确实使用 3307 How the Cloud SQL Auth proxy works

第二件事是将其设置为在 0.0.0.0 上侦听;如上所述,这绑定到所有 IP,允许代理侦听所有传入连接,而不是仅来自 127.0.0.1 的连接。

,

到目前为止,您的方法似乎是正确的。将私有 CDF 实例与私有 CloudSQL MYSQL 实例连接起来的唯一方法是通过 CloudSQL 代理。

但是,在采用这种方法时,需要检查一些事项,

虚拟机设置

  • 创建私有 GCE 虚拟机(无外部 IP)
  • 拥有所有范围(允许完全访问所有 Cloud API)
  • 将操作系统更改为“容器化优化操作系统”。这带有预装的 docker
  • 将以下内容作为自动化启动脚本,
docker pull gcr.io/cloudsql-docker/gce-proxy:1.16

docker run -d \
  -p 0.0.0.0:3306:3306 \
  gcr.io/cloudsql-docker/gce-proxy:1.16 /cloud_sql_proxy \
  -instances=<cloudsql-connection-name>=tcp:0.0.0.0:3306

最后一步应该使用特定的 docker 镜像启动并运行代理。可以在此处找到更详细的文档(https://cloud.google.com/sql/docs/mysql/connect-docker)

CloudSQL 驱动程序

要注意的另一件事是,基于 MySQL 版本,5.1.39 驱动程序可能无法一直运行。请检查中心以获取 CloudSQL MySQl 特定驱动程序

enter image description here

如果这些建议都不适合您,我会尝试更新答案。

了解问题的其他资源

对于任何想要了解为什么私有 CDF 实例无法直接连接到私有 CloudSQL MySQL 实例的人,这里有一些讨论它的资源,