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

时间:2017-08-23 10:11:48

标签: google-cloud-platform google-compute-engine google-cloud-sql

我在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;但是这个

  1. 只允许我的计算机引擎访问SQL实例;我必须从我的Docker访问。
  2. 这不支持我在同一计算引擎机器上代理多个SQL实例;如果可能的话,我希望在docker中做这个代理。
  3. 那么,如何访问Docker中的CLoud SQL?如果docker compose是一个更好的开始方式;实现kubernetes是多么容易(我使用谷歌容器引擎进行生产)

1 个答案:

答案 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