【问题标题】:How to get into postgres in Kubernetes with local dev minikube如何使用本地开发 minikube 进入 Kubernetes 中的 postgres
【发布时间】:2020-07-23 08:55:29
【问题描述】:

请有人帮助我吗?这是我在这里的第一篇文章,我真的很高兴开始在这里发帖并帮助人们,但我首先需要帮助。

我正在 Minikube 上部署我自己的 Postgres 数据库。对于数据库、密码和用户名,我使用的是机密。

数据使用base64编码

  1. POSTGRES_USER = website_user
  2. POSTGRES_DB = 网站
  3. POSTGRES_PASSWORD = 通过

我还执行到容器中,看看我是否可以看到这些环境并且它们在那里。

问题是当我尝试使用 psql 进入 postgres 时。我检查了 minikube ip 并在此命令后输入了正确的密码(pass):

pqsl -h 192.168.99.100 -U website_user -p 31315 website

错误

用户 website_user 的密码:
psql:致命:用户“website_user”的密码验证失败

如果我执行到我的 pod 中:

kubectl exec -it postgres-deployment-744fcdd5f5-7f7vx bash

并尝试进入我得到的 postgres:

psql -h $(hostname -i) -U website_user -p 5432 website

错误:

用户 website_user 的密码:
psql:致命:用户“website_user”的密码验证失败

我在这里缺少一些东西。我也在容器中尝试了ps aux,一切似乎都发现 postgres 进程正在运行

kubectl get all

输出:

NAME                                       READY   STATUS    RESTARTS   AGE
pod/postgres-deployment-744fcdd5f5-7f7vx   1/1     Running   0          18m

NAME                       TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/kubernetes         ClusterIP   10.96.0.1        <none>        443/TCP          19m
service/postgres-service   NodePort    10.109.235.114   <none>        5432:31315/TCP   18m

NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/postgres-deployment   1/1     1            1           18m

NAME                                             DESIRED   CURRENT   READY   AGE
replicaset.apps/postgres-deployment-744fcdd5f5   1         1         1       18m

# Secret store
apiVersion: v1
kind: Secret
metadata:
  name: postgres-credentials
type: Opaque
data:
  POSTGRES_USER: d2Vic2l0ZV91c2VyCg==
  POSTGRES_PASSWORD: cGFzcwo=
  POSTGRES_DB: d2Vic2l0ZQo=


---
# Persistent Volume
apiVersion: v1
kind: PersistentVolume
metadata:
  name: postgres-pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/postgres-pv


---
# Persistent Volume Claim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pvc
  labels:
    type: local
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  volumeName: postgres-pv

---
# Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres-deployment
spec:
  selector:
    matchLabels:
      app: postgres-container
  template:
    metadata:
      labels:
        app: postgres-container
    spec:
      containers:
        - name: postgres-container
          image: postgres:9.6.6
          env:
            - name: POSTGRES_USER
              valueFrom:
                secretKeyRef:
                  name: postgres-credentials
                  key: POSTGRES_USER

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

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

          ports:
            - containerPort: 5432
          volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: postgres-volume-mount
      volumes:
        - name: postgres-volume-mount
          persistentVolumeClaim:
            claimName: postgres-pvc

---
apiVersion: v1
kind: Service
metadata:
  name: postgres-service
spec:
  selector:
    app: postgres-container
  ports:
    - port: 5432
      protocol: TCP
      targetPort: 5432
  type: NodePort

【问题讨论】:

    标签: kubernetes minikube


    【解决方案1】:

    你创造了所有的价值观:

    • $ echo "value" | base64
    • 您应该改用:$ echo -n "value" | base64

    按照echo的官方手册页:

    说明

    STRING回显到标准输出。

    -n = 不输出尾随的换行符

    TL;DR:您需要使用新值编辑您的 Secret 定义:

    • $ echo -n "website_user" | base64
    • $ echo -n "website" | base64
    • $ echo -n "pass" | base64

    您创建了 Secret 并带有尾随换行符。请看下面的例子:

    • POSTGRES_USER:
      • $ echo "website_user" | base64
        • 输出:d2Vic2l0ZV91c2VyCg== 和你的一样
      • $ echo -n "website_user" | base64
        • 输出:d2Vic2l0ZV91c2Vy 这是正确
    • POSTGRES_PASSWORD:
      • $ echo "pass" | base64
        • 输出:cGFzcwo= 和你的一样
      • $ echo -n "pass" | base64
        • 输出:cGFzcw== 这是正确
    • POSTGRES_DB:
      • $ echo "website" | base64
        • 输出:d2Vic2l0ZQo= 和你的一样
      • $ echo -n "website" | base64
        • 输出:d2Vic2l0ZQ== 这是正确

    你的Secret 应该是这样的:

    apiVersion: v1
    kind: Secret
    metadata:
      name: postgres-credentials
    type: Opaque
    data:
      POSTGRES_USER: d2Vic2l0ZV91c2Vy
      POSTGRES_PASSWORD: cGFzcw==
      POSTGRES_DB: d2Vic2l0ZQ==
    

    如果您使用新的Secret 创建它,您应该能够连接到数据库:

    root@postgres-deployment-64d697868c-njl7q:/# psql -h $(hostname -i) -U website_user -p 5432 website
    Password for user website_user: 
    psql (9.6.6)
    Type "help" for help.
    
    website=# 
    

    请查看其他链接:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-23
      • 2022-08-16
      • 1970-01-01
      • 2021-06-21
      • 2021-12-27
      • 2017-07-24
      • 2019-04-14
      • 2018-04-20
      相关资源
      最近更新 更多