Próbuję połączyć się z strąki w GKE do Google Cloud SQL.

Ostatni weekend sprawiam, że działa, ale kiedy usunąłem strąk i odtworzę, nie działa i nie jestem pewien, dlaczego.

Opis

Mam aplikację nodejs, że jest zadrocentowany. Wykorzystuje bibliotekę sequelize i łączy się z bazą danych postgres.

Sequelizację czytania zmiennych ze środowiska i Kubeniety przekazuję je przez sekret

apiVersion: v1
kind: Secret
metadata:
  name: myapi-secret
  namespace: development
type: Opaque
data:
  MYAPI_DATABASE_CLIENT: XXX
  MYAPI_DATABASE_PORT : XXX
  MYAPI_DATABASE_HOST: XXX
  MYAPI_DATABASE_NAME : XXX
  MYAPI_DATABASE_USERNAME: XXX
  MYAPI_DATABASE_PASSWORD: XXX

I moja definicja pod

apiVersion: v1
kind: Pod
metadata:
  name: myapi
  namespace: development
  labels:
    env: dev
    app: myapi
spec:
  containers:
    - name: myapi
      image: gcr.io/companydev/myapi
      envFrom:
        - secretRef:
          name: myapi-secret
      
      ports:
        - containerPort: 3001
          name: myapi

Kiedy rozmieszczam strąk, otrzymuję błąd połączenia do bazy danych

Error: listen EACCES: permission denied tcp://podprivateip:3000
    at Server.setupListenHandle [as _listen2] (net.js:1300:21)
    at listenInCluster (net.js:1365:12)
    at Server.listen (net.js:1462:5)
    at Function.listen (/usr/src/app/node_modules/express/lib/application.js:618:24)
    at Object.<anonymous> (/usr/src/app/src/app.js:46:5)
    at Module._compile (internal/modules/cjs/loader.js:1076:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1097:10)
    at Module.load (internal/modules/cjs/loader.js:941:32)
    at Function.Module._load (internal/modules/cjs/loader.js:782:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
Emitted 'error' event on Server instance at:
    at emitErrorNT (net.js:1344:8)
    at processTicksAndRejections (internal/process/task_queues.js:80:21) {
  code: 'EACCES',
  errno: -13,
  syscall: 'listen',
  address: 'tcp://podprivateip:3000',
  port: -1
}

Nie mogłem zdać sobie sprawy z tego, czego mi brakuje


Dzięki @kurtisvg był w stanie uświadomić sobie, że nie przekazowałem gospodarza i portu przez zmienne Env Express. Jednak nadal mam błąd połączenia

NiemowlętaPromiserejersWarning: SequelizyConnectionError: Connect Etimedout PostgreSinteralip: 5432

Jest dziwne, ponieważ postgres (chmura SQL) i klastra (GKE) znajdują się w tej samej sieci GCP, ale jest jak pod bazy danych nie może zobaczyć bazy danych.

Jeśli uruchomię scenę dokera, w moim lokalnym, to połączenie jest działające.

0
agusgambina 22 październik 2020, 06:32

1 odpowiedź

Najlepsza odpowiedź

Podłączasz się nad prywatnym IP, ale podany port, który wydaje się być 3000. Zazwyczaj Cloud SQL słucha w domyślnym porcie dla silnika bazy danych:

  • MySQL - 3306.
  • Postgre - 5432.
  • SQL Server - 1433
0
kurtisvg 22 październik 2020, 21:34