Postgresql Kubernetes上的Postgres密码验证失败

Postgresql Kubernetes上的Postgres密码验证失败,postgresql,docker,kubernetes,Postgresql,Docker,Kubernetes,我使用了本教程: 我在Kubernetes上的配置基于Docker官方图像,我不断得到: psql -h <publicworkernodeip> -U postgres -p <mynodeport> postgres Password for user postgres: example psql: FATAL: password authentication failed for user "postgres" DETAIL: Role "postgres" d

我使用了本教程:

我在Kubernetes上的配置基于Docker官方图像,我不断得到:

psql -h <publicworkernodeip> -U postgres -p <mynodeport> postgres
Password for user postgres: example
psql: FATAL:  password authentication failed for user "postgres"
DETAIL:  Role "postgres" does not exist.
Connection matched pg_hba.conf line 95: "host all all all md5"

尝试使用下面的命令登录

psql-h$(主机名-i)-U postgres

kubectl exec -it postgres-566fbfb87c-rcbvd sh

# env
POSTGRES_PASSWORD=example
POSTGRES_USER=postgres
POSTGRES_DB=postgres


# psql -h $(hostname -i) -U postgres
Password for user postgres:
psql (11.2 (Debian 11.2-1.pgdg90+1))
Type "help" for help.

postgres=# \c postgres
You are now connected to database "postgres" as user "postgres".
postgres=#

如果您以前使用该卷启动DB,但使用不同的凭据—Postgres将拒绝覆盖卷中的现有数据。你能在新卷上尝试同样的方法吗?是的,我尝试过删除所有内容并重试,但问题仍然存在。我认为这显然指向角色问题。是的,但我需要创建自定义Dockerfile以启用连接吗?你能尝试image bitnami/postgresql吗?这允许连接,谢谢!似乎设置env变量是关键的,而不是使用--password,
psql-upostgres
在没有主机名的情况下也可以工作。关于如何公开此
服务
,以便我可以在没有kubectl exec的情况下从Kubernetes群集外部连接,您有什么建议吗?我正在使用
NodePort
postgresql://postgres:example@:/postgres
似乎不起作用。您可以尝试在服务定义中使用节点端口类型34567端口超出k8s范围。在30000-32767之间使用哦,对不起,我实际上犯了一个错误。我指的是
bitnami/postgresql
Docker图像,这就是我能够通过密码验证的原因。官方
postgres
Docker image仍然要求输入密码,但失败。是的,很抱歉,我使用的是
节点端口
(见原始帖子),端口生成在30000-32767之间。在我校正PV/PVC后,即使使用正式的Docker图像,这仍然有效。同样可以,
节点端口
能够连接。非常感谢。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:11
          imagePullPolicy: Always
          ports:
            - containerPort: 5432
          envFrom:
            - configMapRef:
                name: postgres-config
          volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: postgres
      volumes:
        - name: postgres
          persistentVolumeClaim:
            claimName: postgres-pv-claim
apiVersion: v1
kind: Service
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  type: NodePort
  ports:
   - port: 5432
  selector:
   app: postgres
kind: PersistentVolume
apiVersion: v1
metadata:
  name: postgres-pv-volume
  labels:
    type: local
    app: postgres
spec:
  storageClassName: manual
  capacity:
    storage: 12Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/mnt/data"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: postgres-pv-claim
  labels:
    app: postgres
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 12Gi
kubectl exec -it postgres-566fbfb87c-rcbvd sh

# env
POSTGRES_PASSWORD=example
POSTGRES_USER=postgres
POSTGRES_DB=postgres


# psql -h $(hostname -i) -U postgres
Password for user postgres:
psql (11.2 (Debian 11.2-1.pgdg90+1))
Type "help" for help.

postgres=# \c postgres
You are now connected to database "postgres" as user "postgres".
postgres=#