You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCE虚拟机内Sqlproxy无法连接CloudSQL Postgres数据库求助

排查GCE虚拟机通过Cloud SQL Proxy连接CloudSQL PostgreSQL超时问题

1. 先排除Docker Swarm容器层的干扰

  • 直接在GCE虚拟机主机上运行Cloud SQL Proxy(跳过Docker Swarm),测试基础连通性:
    # 下载proxy二进制文件
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    chmod +x cloud_sql_proxy
    # 启动proxy
    ./cloud_sql_proxy -instances={CONNECTION_NAME}=tcp:5432
    
    另开终端在VM主机执行psql -h localhost -p 5432 -U admin -d {DATABASE_NAME},若能正常连接,说明问题出在Docker Swarm配置或容器网络上。
  • 检查sqlproxy容器的端口监听状态:
    # 进入sqlproxy容器
    docker exec -it $(docker ps -q -f name=sqlproxy) /bin/sh
    # 查看端口监听
    netstat -tulpn
    
    确认输出存在127.0.0.1:5432的监听;同时在VM主机执行netstat -tulpn | grep 5432,验证host网络模式是否正常生效。

2. 验证Cloud SQL私有连接的路由配置

  • 检查VPC路由表:确保VM所在子网的路由表中,存在指向Cloud SQL私有服务连接端点的路由,目标网段覆盖Cloud SQL实例的私有IP段(通常为10.0.0.0/8或实例具体私有IP)。
  • 确认Cloud SQL实例的私有IP属于VPC可路由范围:即使VM和Cloud SQL IP段不同,VPC内路由必须能将流量导向私有服务连接端点,确保同一VPC下路由可达。

3. 检查Metabase容器的配置有效性

  • 验证数据库密码文件的可访问性:进入Metabase容器,确认密码文件可正常读取:
    docker exec -it $(docker ps -q -f name=metabase) cat {FILE}
    
    若输出为正确密码,排除secret挂载失败问题。
  • 在Metabase容器内测试到sqlproxy的连通性:
    docker exec -it $(docker ps -q -f name=metabase) telnet localhost 5432
    
    若连接失败,说明容器host网络模式未正确生效,或容器内存在防火墙限制。

4. 防火墙与网络策略细节排查

  • 确认VM的出站防火墙规则:除允许到私有连接IP段和子网的5432/3307端口,还要确保规则目标范围包含Cloud SQL实例私有IP段,且优先级高于其他拒绝规则。
  • 检查Cloud SQL所在VPC的入站规则:允许来自VM子网IP段的5432端口流量,确保无安全组或VPC防火墙阻止入站连接。
  • 验证VM子网的IP伪装设置:若子网未启用IP伪装,可能导致出站流量无法正确路由到Cloud SQL私有连接,可通过VPC子网配置页面确认。

5. 服务账号权限的二次验证

  • 确认运行sqlproxy的服务账号已被授予Cloud SQL Client角色,且角色绑定范围包含Cloud SQL实例(而非仅VM实例)。
  • 在VM主机上测试服务账号的API访问权限:
    gcloud sql instances describe {INSTANCE_NAME}
    
    若能正常返回实例信息,说明服务账号有权限访问Cloud SQL Admin API;若报错,需重新配置服务账号权限。

内容的提问来源于stack exchange,提问作者Arthur de Vries

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:22:31