如何配置Google VM代理,让本地客户端连接Postgres数据库?
解决Google VM内自建Postgres的本地客户端连接问题
你之前用错工具了——Cloud SQL Proxy是专门对接Google Cloud SQL托管数据库的,而你是在VM实例里自行部署的Postgres,正确的做法是通过SSH隧道实现本地访问,和你用gcloud compute ssh连接VM的逻辑一致。
步骤1:建立SSH端口转发隧道
Postgres默认端口为5432,直接通过gcloud compute ssh命令创建端口映射,把本地端口的请求转发到VM内的Postgres端口:
gcloud compute ssh --project=name_of_project --zone=us-central1-a name_of_virtual_machine -- -L 8060:localhost:5432
参数说明:
-L 本地端口:VM内目标地址:VM内目标端口:这里localhost:5432是VM内部访问Postgres的地址(因为Postgres和Tableau同属一个VM),该命令会把本地8060端口的请求转发到VM的5432端口。
步骤2:配置VM内的Postgres权限
确保Postgres允许隧道过来的连接:
- 编辑
postgresql.conf,将listen_addresses设为'*'或保留localhost(默认通常已包含localhost); - 编辑
pg_hba.conf,添加允许本地连接的规则(根据你的认证方式调整):
若使用密码认证,可将host all all 127.0.0.1/32 scram-sha-256 host all all ::1/128 scram-sha-256scram-sha-256替换为md5; - 重启Postgres服务生效:
sudo systemctl restart postgresql
步骤3:本地客户端发起连接
保持SSH隧道的终端窗口处于运行状态,然后使用以下JDBC连接字符串:
jdbc:postgresql://127.0.0.1:8060/workgroup
输入你之前创建的有权限的用户名和密码即可完成连接。
额外注意事项
- 无需开放VM的5432端口到公网:SSH隧道是通过已有的SSH连接转发流量,只要你能正常用
gcloud compute ssh登录VM,隧道就能正常工作; - 若Postgres在VM内绑定的是内部IP而非localhost,需将隧道命令中的
localhost替换为VM的内部IP,例如:-L 8060:10.0.0.2:5432(10.0.0.2为VM的内部IP)。
内容的提问来源于stack exchange,提问作者Arti
相关产品推荐
相关产品推荐

