1

我在 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

为什么会这样?我是从我当地做的。

4

4 回答 4

1

我只是一步一步地遵循本教程,它对我来说非常有效。

我不必做任何额外的步骤(将 ip 列入白名单、打开端口等...),这是在一个干净的项目中完成的。

您是尝试从本地使用 SDK 还是从 Cloud Shell 执行此操作?您是否有任何防火墙限制?

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

让我们知道。

编辑:

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

看看这个官方文档说明了这一点。

于 2019-11-14T15:36:25.903 回答
0
于 2019-11-14T16:49:50.170 回答
0

问题可能是您不在 VPC 网络中,例如当您从 localhost 连接时,所以会发生云代理显示它无法连接到远程 IP。如果您使用私有 IP,请仔细阅读:

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

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

简而言之:从本地机器运行 cloud-sql-proxy 将不起作用,因为它不在 VPC 网络中。它应该在连接到与数据库相同的 VPC 的 Compute Engine 虚拟机上工作。

我通常做的解决方法是使用本地机器上的 gcloud ssh 并通过计算引擎中的小型 VM 进行端口转发,例如:

gcloud beta compute ssh --zone "europe-north1-b" "instance-1" --project "my-project" -- -L 5432:cloud_sql_server_ip:5432 然后你可以连接到 localhost:5432 (确保没有别的运行或将第一个端口号更改为本地可用的端口号)

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

我不得不说我发现这真的很令人困惑,因为它给人的印象是代理做了类似 gloud 的魔法。我无法理解为什么一些谷歌工程师还没有将它们连接在一起,这不会太难。

于 2020-10-23T01:27:34.530 回答
0

在连接到服务帐户之前,请确保您已将所有必需的 IAM 角色附加到该服务帐户:

例如,cloudsql可以通过以下方式检索角色列表gcloud

$ gcloud iam  roles list --filter 'name~"roles/cloudsql"' --format 'table(name, description)'                                          
NAME                         DESCRIPTION
roles/cloudsql.admin         Full control of Cloud SQL resources.
roles/cloudsql.client        Connectivity access to Cloud SQL instances.
roles/cloudsql.editor        Full control of existing Cloud SQL instances excluding modifying users, SSL certificates or deleting resources.
roles/cloudsql.instanceUser  Role allowing access to a Cloud SQL instance
roles/cloudsql.serviceAgent  Grants Cloud SQL access to services and APIs in the user project
roles/cloudsql.viewer        Read-only access to Cloud SQL resources.

如果您的服务账户缺少适当的角色,它将无法连接到实例以使 IAM 身份验证正常工作。

于 2022-01-28T14:59:59.730 回答