我在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
为什么会这样? 我正在从本地进行此操作。
答案 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工程师尚未将它们连接在一起,这不是我的事,这不会太难。