有没有一种方法可以代理/端口转发GCP Cloud SQL,以便我们可以通过互联网连接到它?
我不想通过虚拟机进行SSH端口转发。相反,我正在寻找一种方法,使我们可以从虚拟机或Kubernetes服务的公共IP连接到CloudSQL。
我不想直接从CloudSQL实例的公共IP连接,因为它需要我们将用户的IP地址列入白名单。我们也尝试过云SQL代理,但遇到了速度和性能问题。
因此,现在我正在寻找一种从VM或Kubernetes服务代理CloudSQL连接的解决方案
我已尝试使用Stunnel代理连接,如本文档所述。
output=/tmp/stunnel.log
CAfile=/tmp/mysql-server-ca.pem
client=yes
pid=/var/run/stunnel.pid
verifyChain=yes
sslVersion=TLSv1.2
[mysqls]
accept=0.0.0.0:3307
connect=private-ip:3306
但是,我在连接到MySQL服务器时遇到了一个错误:ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104
编辑:
- Stunnel在谷歌云上的虚拟机上运行
- Stunnel通过专用IP连接到CloudSQL(VM和CloudSQL共享同一个子网(
- MySQL可以使用私有IP从VM连接
特技日志:
2022.09.22 10:53:17 LOG5[2]: Service [mysqls] accepted connection from 127.0.0.1:37014
2022.09.22 10:53:17 LOG5[2]: s_connect: connected <mysql-private-ip>:3306
2022.09.22 10:53:17 LOG5[2]: Service [mysqls] connected remote server from 10.128.0.53:53302
2022.09.22 10:53:17 LOG3[2]: SSL_connect: ../ssl/record/ssl3_record.c:331: error:1408F10B:SSL routines:ssl3_get_record:wrong version number
2022.09.22 10:53:17 LOG5[2]: Connection reset: 0 byte(s) sent to TLS, 0 byte(s) sent to socket
要从计算引擎虚拟机访问云SQL,请尝试以下操作,您可以使用云SQL验证代理(带有公共或专用IP(,也可以使用专用IP地址直接连接
- 从客户端机器或计算引擎VM实例,使用What's myIP以查看客户端计算机的IP地址
- 复制该IP地址。在谷歌云控制台中,转到云SQL实例页
- 转到云SQL实例
- 要打开实例的"概述"页面,请单击实例名称。从SQL导航菜单中选择"连接">
- 在授权网络部分,单击添加网络,然后输入安装客户端的计算机的IP地址。注:IP实例的地址和您授权的MySQL客户端IP地址必须是相同的IP版本:IPv4或IPv6
- 单击"完成"。然后单击页面底部的"保存"以保存更改。使用SSL或不使用SSL连接到您的实例
要从运行在Google Kubernetes Engine中的应用程序访问云SQL实例,您可以使用云SQL验证代理(具有公共或私有IP(,也可以使用私有IP地址直接连接。要连接到云SQL,您必须具有:
- 一个GKE集群,安装了kubectl命令行工具被配置为与所述集群通信。寻求入门帮助使用GKE,请参阅Quickstart
- 有关如何在没有SSL的情况下进行配置的步骤,请查看文档
- 对于配置了公共IP的实例,面向公共的IPv4地址可以启用,允许GCP项目和VPC网络之外的用户连接到实例
请查看此处的类似示例。