[英]Google cloud run cannot reach Cloud SQL
剛才一切正常,但突然 Google Cloud Run 無法與 Cloud SQL 連接。 Cloud Run 和 Cloud SQL 都在同一個項目中。 Cloud SQL 具有公共 IP。
Cloud Run 正在運行一個容器化的 Django/uwsgi/nginx 應用程序。 得到以下錯誤:
MySQLdb._exceptions.OperationalError: (2003, "Can't connect to MySQL server on 'xx.xxx.xx.xxx:3306' (110)")
姜戈設置:
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
具有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
在這里查看更多
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.