从 Cloud Run 到 Cloud SQL postgre 的 GCP 连接错误

时间:2021-06-05 03:10:50

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

我在 GCP Cloud run 中设置了我的实例,以连接到 Cloud SQL DB (Postgres),但只有一个实例可以与云 SQL 建立连接,而其他实例则不能,所有实例都使用相同的主机或内部 IP,相同的用户名和密码,我也创建了一个新的用户名和密码,但我不能

提前致谢

1 个答案:

答案 0 :(得分:2)

您是否在将云运行部署的实例连接到云 SQL 或连接到云 SQL 时遇到问题?我的第一个猜测是您没有将所有建立直接 TCP 连接的位置的公共 Ipv4 IP 地址列入白名单;但是,如果这只是部署的 CR 实例中的问题,那么我将根据您的连接方式检查以下内容:

  1. Cloud SQL 身份验证代理
  2. 私有 IP(可在 VPC 上访问的 IPv4 或 IPv6 地址)
  3. 公共 IP(公众可访问的 IPv4 或 IPv6 地址)

最简单的方法是使用公共 IP 并确保所有 IAM 角色和服务帐户对云运行服务帐户可用,并更改连接主机以使用 Unix 套接字而不是使用代理的原始 IP 地址。

比如在本地开发中,你的主机可能是 35.333.333.1 之类的,但是部署到生产环境时,你需要更改主机,使用路径“/cloudsql/<”访问的Cloud SQL实例的Unix域套接字INSTANCE_CONNECTION_NAME>”。

INSTANCE_CONNECTION_NAME 可以在 Google Cloud Console 中您的实例的概览页面上找到,也可以通过运行以下命令找到:

gcloud sql instances describe [INSTANCE_NAME].
  • 确保云运行使用的服务帐户(即在部署新修订版页面的安全选项卡上看到的服务帐户,通常是以“@serverless-robot-prod.iam.gserviceaccount”结尾的默认 Compute Engine 服务帐户.com') 具有 proper roles and permissions needed to connect to Cloud SQL。它将至少需要以下一项
    • Cloud SQL 客户端(首选)
    • Cloud SQL 编辑器
    • Cloud SQL 管理员 或手动分配 IAM 权限:
    • cloudsql.instances.connect
    • cloudsql.instances.get

这一切都可以为您解决,使用 gcloud 像这样部署到云运行(假设您的代码中的 envvars/connection 参数是正确的):

如果您要部署新容器,请使用以下命令:

gcloud run deploy --image IMAGE \
  --add-cloudsql-instances INSTANCE-CONNECTION-NAME \
  --update-env-vars INSTANCE_CONNECTION_NAME="INSTANCE-CONNECTION-NAME"

如果您要更新现有服务,请使用以下命令:

gcloud run services update SERVICE-NAME \
  --add-cloudsql-instances INSTANCE-CONNECTION-NAME \
  --update-env-vars INSTANCE_CONNECTION_NAME="INSTANCE-CONNECTION-NAME"

请参阅此处了解详情:https://cloud.google.com/sql/docs/postgres/connect-run