我在使用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是默认设置。
为什么不起作用?你有什么主意吗?
答案 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复制了两个连接,以验证此答案。