问题描述
我正在尝试将 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 的回答,但后来没有接受,因为我无法在新项目中建立连接。可能有一个元素,需要在某处完成,但这里缺少。
解决方法
我已经成功地重新创建了环境,这里是详细的步骤,也许您在此过程中遗漏了一步:
- 在具有私有 Google 访问权限的 VPC 中创建子网 Configuring Private Google Access
- 创建附加到同一 VPC 的私有云数据融合实例
- 创建防火墙规则,允许分配的服务网络范围访问端口 3307 上的代理虚拟机
- 创建附加到同一 VPC 的私有 CloudSQL MySQL 实例
- 按照Set up VPC Network Peering中概述的步骤在 Cloud Data Fusion 和同一 VPC 之间创建 VPC 对等互连
- 在第 1 步的子网中部署了一个虚拟机
- 通过Install the Cloud SQL Auth proxy中概述的步骤部署了 CloudSQL 代理
- 使用以下命令行执行 Cloud SQL 代理(注意,0.0.0.0 允许绑定到所有 IP):
*./cloud_sql_proxy -instances=<Instance Connection Name>=tcp:0.0.0.0:3307
- 在 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 特定驱动程序
如果这些建议都不适合您,我会尝试更新答案。
了解问题的其他资源
对于任何想要了解为什么私有 CDF 实例无法直接连接到私有 CloudSQL MySQL 实例的人,这里有一些讨论它的资源,