有没有办法通过docker容器内的代理访问谷歌云SQL

rrm*_*ugu 11 google-cloud-sql google-compute-engine google-cloud-platform

我有多个docker机器(dev,staging)在运行Django服务器的Google Compute Engine上运行(这需要访问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 ; 但是这个

  1. 只给我的计算机引擎访问SQL实例; 我必须从我的Docker访问.
  2. 这不支持我在同一计算引擎机器上代理多个SQL实例; 如果可能的话,我希望在docker中做这个代理.

那么,如何访问Docker中的CLoud SQL?如果docker compose是一个更好的开始方式; 实施kubernetes是多么容易(我使用谷歌容器引擎进行生产)

Dan*_*Dan 13

通过使用docker-compose,我能够弄清楚如何在我的本地docker环境中使用cloudsql-proxy.您需要下载Cloud SQL实例凭据并准备好它们.我将它们保存在我的项目根目录中credentials.json,并将其添加到.gitignore项目中.

我发现的关键部分是=tcp:0.0.0.0:5432在GCP实例ID之后使用,以便可以转发端口.然后,在您的应用程序中,使用cloudsql-proxy而不是localhost作为主机名.确保其余的db信誉在应用程序机密中有效,以便它可以通过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
Run Code Online (Sandbox Code Playgroud)

  • 有趣,谢谢丹,我们使用了类似的方法:)感谢您发布您的答案 (2认同)