能否通过Compute Engine VM的内外IP连接Cloud SQL Proxy?连接异常咨询
Cloud SQL Proxy无法通过VM内部IP访问的问题解答
问题背景
你正在测试的配置:
- Cloud SQL实例(
testsql-1)位于区域X、可用区A; - Compute Engine虚拟机(
TestVM-1)位于同一区域X、可用区A,操作系统为CentOS 7; - 该Compute Engine VM在非默认端口(9090)运行Cloud SQL Proxy。
你遇到的情况:
- 可以通过命令
mysql -h 127.0.0.1 --port 9090 -u testuser -D testDB -p从TestVM-1登录到testsql-1; - 无法使用TestVM-1的内部IP执行上述命令,执行后报错;
- 能够telnet
127.0.0.1 9090,但telnet<VM内部IP> 9090返回连接被拒绝的错误。
解答:这是预期行为,原因如下
这确实是Cloud SQL Proxy的默认行为,核心原因和它的监听地址配置有关:
默认仅监听本地回环地址
Cloud SQL Proxy在默认启动时,只会绑定到127.0.0.1(本地回环接口),也就是说它只接受来自VM本机的连接请求,不会监听VM的内部IP(或外部IP)对应的网络接口。这就是为什么你用127.0.0.1能正常连接,但用内部IP会被拒绝——Proxy根本没在那个接口的9090端口上监听连接。验证监听状态的方法
你可以在TestVM-1上执行以下命令查看Proxy的监听端口情况:
netstat -tulpn | grep 9090 # 或者用CentOS 7推荐的ss命令 ss -tulpn | grep 9090
执行后你会看到类似127.0.0.1:9090的监听记录,而不是0.0.0.0:9090(0.0.0.0表示监听所有网络接口),这直接证明了Proxy没有在内部IP接口上提供服务。
- 如果需要通过内部IP访问的解决方案(可选)
如果你确实需要让同一VPC内的其他虚拟机通过TestVM-1的内部IP访问Cloud SQL,可以在启动Cloud SQL Proxy时指定--address参数,让它监听所有接口或者指定的内部IP:
- 监听所有网络接口(允许本机、内部IP、外部IP的连接,注意防火墙限制):
cloud-sql-proxy --address 0.0.0.0 --port 9090 your-project-id:region:testsql-1 - 仅监听VM的内部IP(更安全,只允许同一VPC内的实例通过内部IP访问):
(把cloud-sql-proxy --address 10.128.0.XX --port 9090 your-project-id:region:testsql-110.128.0.XX替换成你的TestVM-1的实际内部IP)
注意:修改监听配置后,要确保VM的防火墙规则允许目标来源(比如同一VPC的IP段)访问9090端口,遵循最小权限原则避免不必要的暴露。
内容的提问来源于stack exchange,提问作者Cyac
相关产品推荐
相关产品推荐

