Google cloud platform 有没有办法通过docker容器内的代理访问google cloud SQL
我有多台docker机器(dev,staging)运行在Google Compute Engine上,它托管Django服务器(这需要访问Google Cloud SQL access)。我有多个Google Cloud SQL实例正在运行,每个实例都由我的Google Compute Engine实例上相应的docker机器使用 目前,我正在通过白名单我的计算引擎IP访问云SQL。但是我不想使用ip,原因很明显,例如,我的开发机器不使用静态ip 但现在想用谷歌云代理的方式来获得访问权。但是我该怎么做呢!GCP提供了多种访问google云SQL实例的方法。但是没有一个适合我的用例: 我有这个选择;但是这个Google cloud platform 有没有办法通过docker容器内的代理访问google cloud SQL,google-cloud-platform,google-compute-engine,google-cloud-sql,Google Cloud Platform,Google Compute Engine,Google Cloud Sql,我有多台docker机器(dev,staging)运行在Google Compute Engine上,它托管Django服务器(这需要访问Google Cloud SQL access)。我有多个Google Cloud SQL实例正在运行,每个实例都由我的Google Compute Engine实例上相应的docker机器使用 目前,我正在通过白名单我的计算引擎IP访问云SQL。但是我不想使用ip,原因很明显,例如,我的开发机器不使用静态ip 但现在想用谷歌云代理的方式来获得访问权。但是我该
那么,如何访问Docker内部的云SQL?如果docker compose是一个更好的开始方式;kubernetes实现起来有多容易(我使用google容器引擎进行生产)通过使用docker compose,我能够了解如何在本地docker环境中使用cloudsql代理。您将需要拉下您的云SQL实例凭据并准备好它们。我将它们作为
credentials.json
保存在我的项目根目录中,并将其添加到项目中的.gitignore
我发现的关键部分是在GCP实例ID之后使用=tcp:0.0.0:5432
,以便可以转发端口。然后,在应用程序中,使用cloudsql代理
而不是localhost
作为主机名。确保其余的db凭据在应用程序机密中有效,以便它可以通过cloudsql代理容器提供的本地代理进行连接
注意:请记住,我正在编写一个TomcatJava应用程序,我的dockercompose.yml
反映了这一点
docker-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
版本:“3”
服务:
cloudsql代理:
容器名称:cloudsql代理
图片:gcr.io/cloudsqldocker/gce代理:1.11
命令:/cloud\u sql\u proxy--dir=/cloudsql-instances==tcp:0.0.0:5432-credential\u file=/secrets/cloudsql/credentials.json
端口:
- 5432:5432
卷数:
-./credentials.json:/secrets/cloudsql/credentials.json
重新启动:始终
tomcatapp api:
容器名称:tomcatapp api
生成:。
卷数:
-./build/libs:/usr/local/tomcat/webapps
端口:
- 8080:8080
- 8000:8000
环境文件:
-/secrets.env
重新启动:始终
单个云SQL代理可以代理多个实例。你需要有多个代理的原因是什么?我读了一些东西,意识到你说的是真的。所以我的第二个问题现在无效了。。你对Q1有什么想法吗。。我怎样才能在单个Docker中访问这个代理连接?我不确定我是否完全理解这个问题。您可以将代理作为单独的docker映像()运行,然后根据您的答案从docker映像连接到代理。我看得出你明白我的问题。连接docker就是我在问题中使用docker compose的意思。我看到docker compose是一个选项。但我只是在探索这是否是最好的选择。如果你从GCE实例连接静态IP,你可以选择将这些IP列入白名单,并直接通过IP连接。如果您不想维护IP白名单,那么使用代理docker容器是您最好的选择。有趣的是,谢谢Dan,我们使用了类似的方法:)谢谢您发布您的答案。我可以知道为什么重新启动:总是用于cloudsql代理
?我想通过这样的docker-compose.yml在GCE上运行。但是,我的应用程序无法连接到cloudsql proxy
。它返回错误:[Errno-2]名称或服务未知
。你知道怎么解决吗?3xX您不能通过“cloudsql代理”而不是“0.0.0.0”进行连接吗?