Не удается подключиться к Postgres, развернутому в Kubernetes - PullRequest
0 голосов
/ 08 января 2019

Я застрял, пытаясь отладить проблему с подключением PostgreSQL, развернутого с помощью minikube. Я попытался создать postgres-service с обоими типами NodePort и LoadBalancer, но я не могу соединиться с psql с моего локального хоста.

Я скопировал все конфиги (извинения), так как уверен, что где-то просто глупая ошибка!

apiVersion: v1
kind: Secret
metadata:
  name: postgres-credentials
type: Opaque
data:
  user: YWRtaW4=
  password: YWRtaW4=
  database: YWRtaW4=
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pvc
  labels:
    type: local
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
  volumeName: postgres-pv
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-pv
  labels:
    type: local
spec:
  capacity:
    storage: 2Gi
  storageClassName: standard
  accessModes:
    - ReadWriteMany
  hostPath:
    path: /data/postgres-pv-local
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      name: postgres-container
  template:
    metadata:
      labels:
        name: postgres-container
        tier: backend
    spec:
      containers:
        - name: postgres-container
          image: mdillon/postgis:10
          ports:
            - containerPort: 5432
          env:
            - name: POSTGRES_USER
              valueFrom:
                secretKeyRef:
                  name: postgres-credentials
                  key: user

            - name: POSTGRES_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: postgres-credentials
                  key: password

            - name: POSTGRES_DB
              valueFrom:
                secretKeyRef:
                  name: postgres-credentials
                  key: database

          volumeMounts:
            - name: postgres-volume-mount
              mountPath: /var/lib/postgresql/data
      volumes:
        - name: postgres-volume-mount
          persistentVolumeClaim:
            claimName: postgres-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: postgres-service
spec:
  type: NodePort
  selector:
    app: postgres-container
  ports:
    - protocol: TCP
      port: 5432
      targetPort: 5432

Попытка подключения на моем локальном хосте:

$ kubectl get services
NAME               TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes         ClusterIP   10.96.0.1       <none>        443/TCP          30h
postgres-service   NodePort    10.105.42.187   <none>        5432:32252/TCP   7m32s

$ export PGPASSWORD=admin
$ psql -h localhost -U admin -p 32252 admin
psql: could not connect to server: Connection refused

Я также пытался создать развертывание Ubuntu в кластере, используя kubectl run -i --tty --attach --image=ubuntu -- bash, установить psql и подключиться к 5432/32252, localhost / postgres-service и т. Д., Но это тоже не работает.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Причиной оказалось несоответствие ключа метки в селекторе службы app: postgres-container и метки развертывания name: postgres-container.

Теперь я могу подключиться, используя minikube ip для NodePort:

$ export PGPASSWORD=admin
$ psql -h 192.168.99.100 -U admin -p 30917 admin

или localhost, когда служба имеет тип LoadBalancer.

0 голосов
/ 09 января 2019

Minikube запустить в ВМ. Здесь, psql -h localhost -U admin -p 32252 admin вы пытаетесь подключиться к postgres, который выставлен в localhost. Но это не выставлено в localhost. Так как вы определили службу типа NodePort, вы можете получить к ней доступ, используя Node ip. Таким образом, вместо использования localhost, попробуйте Minikube IP.

 $ minikube ip
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...