通过Cloud SQL Proxy连接Postgres Cloud SQL

时间:2019-11-14 13:49:27

标签: postgresql google-cloud-sql cloud-sql-proxy

我在Cloud Sql上创建了一个单一区域的postgres db实例,并且尝试通过Cloud sql代理进行连接。

/cloud_sql_proxy -instances=<PROJECT_ID>:us-central1:staging=tcp:5432 -credential_file=./<SERVICE_ACCOUNT_KEY_FILE> 

运行良好。但是当我在命令下运行时,

psql "host=127.0.0.1 sslmode=disable dbname=postgres user=postgres"

代理显示此错误:

2019/11/14 15:20:10 using credential file for authentication; email=<SERVICE_ACCOUNT_EMAIL>
2019/11/14 15:20:13 Listening on 127.0.0.1:5432 for <PROJECT_ID>:us-central1:staging
2019/11/14 15:20:13 Ready for new connections
2019/11/14 15:20:34 New connection for "<PROJECT_ID>:us-central1:staging"
2019/11/14 15:22:45 couldn't connect to "<PROJECT_ID>:us-central1:staging": dial tcp 34.70.245.249:3307: connect: connection timed out

为什么会这样? 我正在从本地进行此操作。

3 个答案:

答案 0 :(得分:0)

我刚刚逐步遵循了tutorial,对我来说效果很好。

我不必执行任何其他步骤(将IP列入白名单,打开端口等...),这是在一个干净的项目中完成的。

您是要使用SDK还是通过Cloud Shell从本地执行此操作?您是否有防火墙限制?

任何有关您的特定设置的进一步信息都可能会有所帮助。

让我们知道。

编辑:

确保您的端口3307没有被任何东西阻塞。

看看这个official documentation有没有指明。

答案 1 :(得分:0)

以前由于某些原因未为psql指定port参数时遇到问题,请尝试以下操作:

psql “host=127.0.0.1 port=5432 sslmode=disable user=postgres”

不指定数据库,看看是否可以进入提示。

答案 2 :(得分:0)

问题可能是您不在VPC网络中,例如从本地主机连接时,所以发生的情况是云代理显示它无法连接到远程IP。 如果您使用私有IP,请仔细阅读以下内容:

https://cloud.google.com/sql/docs/postgres/private-ip

请注意,Cloud SQL实例位于Google托管的网络中,该代理旨在简化VPC网络中与数据库的连接。

简而言之:无法在本地计算机上运行cloud-sql-proxy,因为它不在VPC网络中。它应在与数据库连接到同一VPC的Compute Engine VM上运行。

通常,我要从本地计算机使用gcloud ssh并通过计算引擎中的小型VM转发端口,例如:

gcloud beta计算ssh --zone“ europe-north1-b”“ instance-1” --project“ my-project”--L 5432:cloud_sql_server_ip:5432 然后,您可以连接到localhost:5432(确保没有其他任何程序在运行,或者将第一个端口号更改为本地可用的端口号)

还应该工作的是建立与VPC网络的VPN连接,然后在该网络中的节点中运行云代理。

我不得不说我发现这确实令人困惑,因为它给人的印象是代理具有类似于gloud的魔力。为何有些Google工程师尚未将它们连接在一起,这不是我的事,这不会太难。