Google App Engine с образом Hydra Docker и облачным прокси-сервером SQL не работает - PullRequest
0 голосов
/ 29 июня 2018

Я изучил все варианты ключевых слов Google и дважды прочитал каждый учебник и руководство. Не могу решить мою проблему.

У меня есть следующие настройки:

  • Google App Engine (гибкий)
  • Google Cloud SQL (с использованием PostgreSQL)
  • Cloud Proxy установлен и работает локально при подключении с помощью psql

Проблема

Как только я разверну Hydro на своем экземпляре ядра приложения, я получу журнал сообщений об ошибках и ошибку:

level=info msg="Connecting with postgres://*:*@/cloudsql/myProjectID:us-central1:myCloudSQLInstance/.s.PGSQL.5432/postgres?sslmode=disable"
level=error msg="An error occurred" error="Could not Connect to SQL: dial tcp [::1]:5432: getsockopt: connection refused"

При развертывании Hydra сокет доступен в папке /cloudsql/myProjectID:us-central1:myCloudSQLInstance с именем .s.PGSQL.5432. Я также получаю сообщение, что сокет прослушивает /cloudsql/myProjectID:us-central1:myCloudSQLInstance/.s.PGSQL.5432, когда я использую docker logs myDockerImage. В другой ветке я читал, что эта конфигурация может работать. Я тоже пробовал /cloudsql/myProjectID:us-central1:myCloudSQLInstance:5432 и даже без порта.

Кажется, что контейнер Hydra не может попасть в сокет Cloud SQL в другом контейнере (который автоматически публикуется через механизм приложений). Я также могу сказать, что это не проблема, что розетке нужно время, чтобы прогреться. Даже через несколько минут я получаю те же журналы ошибок. И, наконец, весь экземпляр падает из-за фатальной ошибки (с тем же сообщением об ошибке)

Локальное тестирование. Я запускаю прокси-сервер следующим образом: (case 1)

cloud_sql_proxy.exe -instances=myProjectID:us-central1:myCloudSQLInstance=tcp:5433

Я также пытался: (случай 2)

cloud_sql_proxy.exe -instances=myProjectID:us-central1:myCloudSQLInstance=tcp:0.0.0.0:5433

В обоих случаях я изменил URL базы данных, например:

docker run -d --name hydra --network host -p 9000:4444 
-e SYSTEM_SECRET=my_long_secret
-e DATABASE_URL=postgres://myUser:myPassword@127.0.0.1:5433/postgres?sslmode=disable 
-e OAUTH2_ISSUER_URL=https://localhost:9000/ 
-e OAUTH2_CONSENT_URL=http://localhost:9020/consent 
-e OAUTH2_LOGIN_URL=http://localhost:9020/login oryd/hydra:latest serve

Это относится к случаю 1. Но при обеих настройках происходит сбой, и через несколько минут происходит сбой контейнера, как на движке приложения. Я также попытался использовать ipconfig и получил 10.0.75.1. Пинг изнутри контейнера Hydra к этому IP возможен.

Но когда я использую psql локально, вот так:

psql "host=127.0.0.1 port=5433 sslmode=disable dbname=myDatabase user=myDBUser"

С помощью этой команды я могу подключиться к прокси-серверу и базе данных Cloud SQL.

Да, и API администратора Google SQL активирован и работает.

Это мой app.yaml для Google App Engine:

runtime: custom
env: flex
automatic_scaling:
  min_num_instances: 1
resources:
  cpu: 1
  memory_gb: 2
  disk_size_gb: 10
env_variables:
  DATABASE_URL: "postgres://myuser:mypass@/cloudsql/myProjectID:us-central1:myCloudSQLInstance/.s.PGSQL.5432?sslmode=disable"
  SYSTEM_SECRET: "my_long_secret"
  OAUTH2_ISSUER_URL: "https://myAuth.appspot.com/"
  OAUTH2_CONSENT_URL: "http://example.com/consent"
  OAUTH2_LOGIN_URL: "http://example.com/login"
beta_settings:
  cloud_sql_instances: "myProjectID:us-central1:myCloudSQLInstance"

Так что мой вопрос: есть ли какая-то конфигурация, необходимая для подключения к Google Cloud SQL Proxy с помощью докера? Может быть, в строке данных есть что-то, чего мне не хватает. Это действительно трудно отладить, так как есть только сообщение об ошибке connection refused.

Обновление 06/29/2018

Теперь он работает на моей локальной машине.

Я использовал следующую команду для запуска образа Docker для прокси-сервера Cloud SQL:

docker run -d --name cloudsql -v c:\Users\myWindowsUser\Desktop\auth\cloudproxy:/cloudsql 
-v c:\Users\myWindowsUser\auth\cloudproxy\config:/config 
-p 127.0.0.1:3307:3307 gcr.io/cloudsql-docker/gce-proxy:1.11 
/cloud_sql_proxy 
-instances=myProjectID:us-central1:myCloudSQLInstance=tcp:0.0.0.0:3307 
-credential_file=/config/my-auth.json

В Windows вам нужно проверить C: (в моем случае) в настройках / общих дисках.

А затем postgres://myUser:myPassword@0.0.0.0:3307/postgres?sslmode=disable как DATABASE_URL.

Теперь мне просто нужно знать, как заставить его работать в Google App Engine. Я буду держать вас в курсе!

ОБНОВЛЕНИЕ 2:

Все заработало.

У меня было две проблемы:

  • Гнездо UNIX недоступно
  • База данных была основана на TCP

Решение

docker run -d --name hydra --network host --volume=/cloudsql:/cloudsql 
-p 9000:4444 -e SYSTEM_SECRET=my_long_secret
-e DATABASE_URL=postgres:///myDatabase?host\=/cloudsql/myProjectID:us-central1:myCloudSQLInstance/\&sslmode=disable\&user=myDBUser\&password=myPassword 
-e OAUTH2_ISSUER_URL=https://localhost:9000/ 
-e OAUTH2_CONSENT_URL=http://localhost:9020/consent 
-e OAUTH2_LOGIN_URL=http://localhost:9020/login oryd/hydra:latest serve

С помощью этой конфигурации для Hydra я смог подключиться к базе данных Cloud SQL. Может быть, это кому-то помогает. Итак, проблема решена:)!

...