Google云运行无法访问cloud SQL



刚才一切都很好,但突然谷歌云运行无法连接云SQL。Cloud Run和Cloud SQL都在同一个项目中。云SQL具有公共IP。

Cloud Run正在运行一个容器化的Django/uwsgi/nginx应用程序。获取以下错误:

MySQLdb._exceptions.OperationalError: (2003, "Can't connect to MySQL server on 'xx.xxx.xx.xxx:3306' (110)")

Django设置:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': my_db_name,
'USER': my_db_user,
'PASSWORD': my_db_password,
'HOST': cloud_sql_ip_address,
'PORT': '3306',
}
}

下面是Cloud Run yaml的文章:

annotations:
run.googleapis.com/client-name: gcloud
client.knative.dev/user-image: my_custom_manage
run.googleapis.com/client-version: 347.0.0
run.googleapis.com/cloudsql-instances: my_project_id:us-central1:my_sql_server
autoscaling.knative.dev/maxScale: '10'
run.googleapis.com/sandbox: gvisor

我也检查过这个-https://cloud.google.com/sql/docs/mysql/connect-run

附加到Cloud Run服务的服务帐户具有Compute Engine default service account,这基本上意味着它拥有所有访问权限。

解决方案:对于任何可能遇到这个问题的人来说,使用套接字引用,而不是IP和端口。由于Cloud Run创建了套接字来连接到Cloud SQL,Django的IP:3306不起作用。

我的更新django数据库设置:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': my_db_name,
'USER': my_db_user,
'PASSWORD': my_db_password,
'HOST': f'/cloudsql/cloud_sql_connection_name'
}
}

我不知道为什么它以前在IP:3306上工作得很好,Cloud Run应该在启动时出错。

Cloud Run使用unix套接字连接到SQL。

从您的错误消息来看,它似乎试图直接连接到IP。

我会检查应用程序代码,看看是否有未检测到的更新,连接字符串应该基于套接字,而不是基于IP,

套接字格式为:/cloudsql/connection_id

点击此处查看更多

相关内容

  • 没有找到相关文章

最新更新