Докер-контейнер CloudSQL не может подключиться к экземпляру sql некоторое время, затем подключается в k8s - PullRequest
0 голосов
/ 02 июля 2019

Я пытаюсь подключиться к своему экземпляру GCP Sql с помощью контейнера docker cloud-sql.У меня также есть сервис, который зависит от cloudsql для подключения к базе данных в GKE.Вместе эти два создают модуль.

Кажется, что соединение всегда прерывается примерно 3-4 раза, а затем успешно соединяется.это происходит каждый раз, когда я хочу развернуть новую версию моего сервиса, создав обновленный модуль kubernetes.

Мое развертывание kubernetes, описывающее этот код:

...

- name: cloudsql-proxy
  image: gcr.io/cloudsql-docker/gce-proxy:1.12
  command:
    - /cloud_sql_proxy
    - -instances=my-project:europe-west1:my-instance=tcp:5432
    - -credential_file=/secrets/cloudsql/credentials.json

...

Я ожидаю, что cloud-sqlнемедленно подключитесь к моему экземпляру, но я несколько раз получаю эту ошибку в своих журналах

couldn't connect to "my-project:europe-west1:my-instance": Post https://www.googleapis.com/sql/v1beta4/projects/my-project/instances/my-instance/createEphemeral?alt=json&prettyPrint=false: oauth2: cannot fetch token: Post https://oauth2.googleapis.com/token: net/http: TLS handshake timeout

Ответы [ 3 ]

1 голос
/ 03 июля 2019

Добавить опцию --dir=/cloudsql после - /cloud_sql_proxy

  - name: cloudsql-proxy
    image: gcr.io/cloudsql-docker/gce-proxy:1.14
    command: ["/cloud_sql_proxy",
                "--dir=/cloudsql",
                "-instances=my-project:europe-west1:my-instance=tcp:3306",
                # If running on a VPC, the Cloud SQL proxy can connect via Private IP. See:
                # https://cloud.google.com/sql/docs/mysql/private-ip for more info.
                # "-ip_address_types=PRIVATE",
                "-credential_file=/secrets/cloudsql/credentials.json"]
    # [START cloudsql_security_context]
    securityContext:
      runAsUser: 2  # non-root user
      allowPrivilegeEscalation: false
    # [END cloudsql_security_context]
    volumeMounts:
    - name: cloudsql-instance-credentials
      mountPath: /secrets/cloudsql
      readOnly: true
    - name: cloudsql
      mountPath: /cloudsql
  # [END proxy_container]
  # [START volumes]
  volumes:
  - name: cloudsql-instance-credentials
    secret:
      secretName: cloudsql-instance-credentials
  - name: cloudsql
    emptyDir:
  # [END volumes]
1 голос
/ 05 июля 2019

Эта ошибка указывает на перегруженный модуль или время медленного запуска сети. Поскольку вы подключаетесь к конечной точке Google OAuth, я исключу проблему с другой стороны.

Если у вас кластер или модуль перегружен (превышение пределов памяти, загрузка ЦП на 100% и т. Д.), Сетевой ответ может перестать работать.

0 голосов
/ 03 июля 2019

OAuth требует использования токенов обновления для получения новых токенов доступа, поскольку они имеют ограниченный срок службы для повышения безопасности.Токен обновления позволит вашему приложению получить доступ к Cloud SQL.Пожалуйста, создайте новый токен, автоматически аннулирует самый старый токен.

...