使用psql客户端连接到Postgres SQL实例(专用ip)

时间:2020-08-27 13:58:06

标签: google-cloud-platform google-cloud-sql psql

我在使用psql客户端连接CloudSQL Postgres实例时遇到问题。我遵循了文档https://cloud.google.com/sql/docs/postgres/connect-admin-proxy

我已启用Cloud SQL Admin API并安装了cloud_sql_proxy:

wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
chmod +x cloud_sql_proxy

我使用拥有所有权利的凭据SDK Cloud,并设置了好的项目:

gcloud config set project gta-staging-280808

接下来,我启动了以下命令:

要使用TCP套接字进行测试:

./cloud_sql_proxy -instances=gta-staging-280808:europe-west1:${INSTANCE_ID}=tcp:5432
psql "host=127.0.0.1 sslmode=disable dbname=${DB_NAME} user=${USER}"

要使用Unix套接字进行测试:

./cloud_sql_proxy -dir=/cloudsql &
psql "sslmode=disable host=/cloudsql/gta-staging-280808:europe-west1:${INSTANCE_ID} user={USER}"

结果:

2020/08/27 15:36:39 New connection for "gta-staging-280808:europe-west1:${INSTANCE_ID}"

2020/08/27 15:40:59 couldn't connect to "gta-staging-280808:europe-west1:${INSTANCE_ID}": dial tcp XX.XX.XX.XX:3307: connect: connection timed out

没有SSH。 VPC是默认设置。

为什么不起作用?你有什么主意吗?

1 个答案:

答案 0 :(得分:0)

此错误可能是由于多种原因引起的,最终它表明客户端无法访问该实例。尽管如此,在这种情况下,我仍怀疑您尝试使用Cloud Shell中的SQL代理连接到Cloud SQL实例。

假设您正在使用Cloud Shell,则如果实例具有公共IP,则您执行的步骤将起作用。即使您通过有权访问该实例的帐户进行了身份验证,也必须使用access to the same VPC network作为SQL实例的资源运行代理,而Cloud Shell则不是这种情况。

同样,如果您有使用同一网络的实例,则可以从GCE访问SQL实例。检出this guide,以尝试从GCE实例内部进行连接,该连接本质上相同,但allocating an IP address range。如果要从Cloud Shell连接,则需要使用公共IP,在这种情况下,您提供的the guide可以使用。

我已从Cloud Shell和GCE复制了两个连接,以验证此答案。