我在Google Compute Engine上运行多个docker机器(dev,staging),它们托管Django服务器(这需要访问Google Cloud SQL访问权限)。我运行了多个Google Cloud SQL实例,每个实例都由我的Google Compute Engine实例上的各个docker机器使用。
目前我通过将我的计算引擎IP列入白名单来访问Cloud SQL。但是我不想使用IP,原因很明显,即我不会使用静态IP来开发我的开发机器。
但现在想使用google_cloud_proxy方式获取访问权限。但是我该怎么做! GCP提供了多种访问Google Cloud SQL实例的方法。但它们都不适合我的用例:
我有这个选项https://cloud.google.com/sql/docs/mysql/connect-compute-engine;但是这个
那么,如何访问Docker中的CLoud SQL?如果docker compose是一个更好的开始方式;实现kubernetes是多么容易(我使用谷歌容器引擎进行生产)
答案 0 :(得分:11)
我能够通过使用docker-compose弄清楚如何在我的本地docker环境中使用cloudsql-proxy。您需要下载Cloud SQL实例凭据并准备好它们。我将它们作为credentials.json
保存在我的项目根目录中,并将其添加到项目中的.gitignore
。
我发现的关键部分是在GCP实例ID之后使用=tcp:0.0.0.0:5432
,以便可以转发端口。然后,在您的应用程序中,使用cloudsql-proxy
而不是localhost
作为主机名。确保其余的db creds在您的应用程序机密中有效,以便它可以通过cloudsql-proxy容器提供的本地代理进行连接。
注意:请记住我正在编写一个tomcat java应用程序,我的docker-compose.yml
反映了这一点。
搬运工-compose.yml:
version: '3'
services:
cloudsql-proxy:
container_name: cloudsql-proxy
image: gcr.io/cloudsql-docker/gce-proxy:1.11
command: /cloud_sql_proxy --dir=/cloudsql -instances=<YOUR INSTANCE ID HERE>=tcp:0.0.0.0:5432 -credential_file=/secrets/cloudsql/credentials.json
ports:
- 5432:5432
volumes:
- ./credentials.json:/secrets/cloudsql/credentials.json
restart: always
tomcatapp-api:
container_name: tomcatapp-api
build: .
volumes:
- ./build/libs:/usr/local/tomcat/webapps
ports:
- 8080:8080
- 8000:8000
env_file:
- ./secrets.env
restart: always