Стручки GKE не подключаются к Cloudsql - PullRequest
0 голосов
/ 04 апреля 2019

Мое приложение не может подключиться к прокси, таким образом, моя база данных Cloudsql.

Ниже приведены мои настройки:

мой-простой app.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    name: web
  name: web
spec:
  replicas: 2
  selector:
    matchLabels:
      name: web
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  minReadySeconds: 5
  template:
    metadata:
      labels:
        name: web
    spec:
      nodeSelector:
        cloud.google.com/gke-nodepool: default-pool
      containers:
      - image: joelaw/nameko-hello:0.2
        name: web
        env:
          - name: DB_HOST
            value: 127.0.0.1
          - name: DB_PASSWORD
            valueFrom:
              secretKeyRef:
                name: cloudsql-db-credentials
                key: password
          - name: DB_USER
            valueFrom:
              secretKeyRef:
                name: cloudsql-db-credentials
                key: username
        ports:
        - containerPort: 3000
          name: http-server
      - image: gcr.io/cloudsql-docker/gce-proxy:1.09
        name: cloudsql-proxy
        command: ["/cloud_sql_proxy", "--dir=/cloudsql",
                  "-instances=spheric-veric-task:asia-southeast1:authdb:5432",
                  "-credential_file=/secrets/cloudsql/credentials.json"]
        volumeMounts:
          - name: cloudsql-instance-credentials
            mountPath: /secrets/cloudsql
            readOnly: true
          - name: ssl-certs
            mountPath: /etc/ssl/certs
          - name: cloudsql
            mountPath: /cloudsql
      volumes:
        - name: cloudsql-instance-credentials
          secret:
            secretName: cloudsql-instance-credentials
        - name: ssl-certs
          hostPath:
            path: /etc/ssl/certs
        - name: cloudsql
          emptyDir:

Полагаю, я правильно настроил секреты.

Ниже приведены некоторые данные, которые я собрал с экземпляра:

Стручок живет счастливо:

web-69c7777c68-s2jt6   2/2       Running   0          9m
web-69c7777c68-zbwtv   2/2       Running   0          9m

Когда я бегу: kubectl logs web-69c7777c68-zbwtv -c cloudsql-proxy

Он записал это:

2019/04/04 03:25:35 using credential file for authentication; email=auth-db-user@spheric-verve-228610.iam.gserviceaccount.com
2019/04/04 03:25:35 Listening on /cloudsql/spheric-veric-task:asia-southeast1:authdb:5432/.s.PGSQL.5432 for spheric-veric-task:asia-southeast1:authdb:5432
2019/04/04 03:25:35 Ready for new connections

Поскольку приложение не настроено для подключения к БД, я сделал ssh в модуль:

kubectl exec -it web-69c7777c68-mrdpn -- /bin/bash
# Followed by installing postgresql driver:
apt-get install postgresql
# Trying to connect to cloudsql:
psql -h 127.0.0.1 -p 5432 -U

Когда я запускаю psql в контейнере:

psql: could not connect to server: Connection refused
        Is the server running on host "127.0.0.1" and accepting
        TCP/IP connections on port 5432?

Может кто-нибудь из вас любезно посоветует, что мне делать, чтобы подключиться к БД?

1 Ответ

1 голос
/ 04 апреля 2019

Вы указали неправильную строку подключения экземпляра, поэтому прокси-сервер прослушивает сокет unix в каталоге /cloudsql/ вместо порта TCP.

Чтобы прокси-сервер прослушивал TCPпорт, используйте следующее:

-instances=<INSTANCE_CONNECTION_NAME>=tcp:5432

В противном случае следующий формат создает сокет Unix (по умолчанию каталог /cloudsql):

-instances=<INSTANCE_CONNECTION_NAME>
...