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



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

提前感谢

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

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

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

例如,在本地开发中,您的主机可能类似于35.333.333.1,但当部署到生产环境中时,您需要更改主机以使用Cloud SQL实例的Unix域套接字,该套接字在路径"上访问/cloudsql/<INSTANCE_CONNECTION_NAME>";。

INSTANCE_CONNECTION_NAME可以在谷歌云控制台的实例概览页面上找到,也可以运行以下命令:

gcloud sql instances describe [INSTANCE_NAME].
  • 确保云运行使用的服务帐户(即,在部署新版本页面的安全选项卡上看到的服务帐户,通常是以"@serverless-robot-prod.iam.gserviceaccount.com"结尾的默认计算引擎服务帐户(具有连接到云SQL所需的正确角色和权限。至少需要以下其中一项
    • 云SQL客户端(首选(
    • 云SQL编辑器
    • 云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

最新更新