无法连接到部署到Kubernetes的Postgres

时间:2019-01-08 18:01:56

标签: postgresql kubernetes

我一直在尝试调试与minikube一起部署的PostgreSQL的连接问题。我尝试创建类型为postgres-serviceNodePort的{​​{1}},但是似乎无法从本地主机与psql连接。

我已经复制了所有配置(抱歉),因为我确定某个地方可能只是一个愚蠢的错误!

LoadBalancer

尝试连接我的本地主机:

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部署,安装psql并在5432/32252,localhost / postgres-service等上进行连接……但这都不起作用。

2 个答案:

答案 0 :(得分:2)

Minikube在VM中运行。在这里,psql -h localhost -U admin -p 32252 admin试图连接到localhost中公开的postgres。但是它并未在localhost中公开。由于您定义了NodePort类型的服务,因此可以使用Node ip来访问它。因此,请尝试使用Minikube ip,而不要使用localhost

 $ minikube ip

答案 1 :(得分:0)

原因是服务选择器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时)。

相关问题