gpt4 book ai didi

kubernetes - 如何使用本地 dev minikube 进入 Kubernetes 中的 postgres

转载 作者:行者123 更新时间:2023-12-02 11:30:25 27 4
gpt4 key购买 nike

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

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

数据使用 base64 编码

  • POSTGRES_USER = website_user
  • POSTGRES_DB = 网站
  • POSTGRES_PASSWORD = 通过

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

    问题是当我尝试使用 psql 进入 postgres 时。我在这个命令之后检查了 minikube ip 并输入了正确的密码(pass):
    pqsl -h 192.168.99.100 -U website_user -p 31315 website

    错误

    Password for user website_user:
    psql: FATAL: password authentication failed for user "website_user"



    另外,如果我执行到我的 pod:
    kubectl exec -it postgres-deployment-744fcdd5f5-7f7vx bash

    并尝试进入 postgres 我得到:
    psql -h $(hostname -i) -U website_user -p 5432 website

    错误:

    Password for user website_user:
    psql: FATAL: password authentication failed for user "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

    最佳答案

    您创建了所有值:

  • $ echo "value" | base64
  • 相反,您应该使用:$ echo -n "value" | base64

  • 以下是 echo 的官方手册页:

    Description

    Echo the STRING(s) to standard output.

    -n = do not output the trailing newline



    TL;博士 : 您需要编辑您的 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这是 正确 值(value)
  • POSTGRES_PASSWORD :
  • $ echo "pass" | base64
  • 输出:cGFzcwo=和你的一样
  • $ echo -n "pass" | base64
  • 输出:cGFzcw==这是 正确 值(value)
  • POSTGRES_DB :
  • $ echo "website" | base64
  • 输出:d2Vic2l0ZQo=和你的一样
  • $ echo -n "website" | base64
  • 输出:d2Vic2l0ZQ==这是 正确 值(value)

  • 您的 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=#

    请查看其他链接:
  • Github.com: Kubernetes: issues: Config map vs secret to store credentials for Postgres deployment
  • Kubernetes.io: Secrets
  • 关于kubernetes - 如何使用本地 dev minikube 进入 Kubernetes 中的 postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61143161/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com