【问题标题】:Correct way to create a k8s secret?创建k8s秘密的正确方法?
【发布时间】:2020-03-25 04:30:36
【问题描述】:

我不确定我是否正确解释了容器的输出,但我在日志中看到了 sequelize 的以下输出:

Nates-MacBook-Pro:k8s natereed$ docker logs 1a3e6141d050
...
(node:36) UnhandledPromiseRejectionWarning: SequelizeConnectionError: password authentication failed for user 
"postgres
"

出现用户名中有一个额外的换行符,应该是“postgres”。数据库配置了环境变量 $POSTGRESS_USERNAME(是的,我知道它拼写错误,它来自另一位作者)。

src/config/config.ts:    "username": process.env.POSTGRESS_USERNAME

我进入运行的容器并检查环境变量是否设置正确:

root@backend-feed-75c4f97d6-9tp2f:/usr/src/app# echo $POSTGRESS_USERNAME
postgres
root@backend-feed-75c4f97d6-9tp2f:/usr/src/app# echo $POSTGRESS_PASSWORD
...
root@backend-feed-75c4f97d6-9tp2f:/usr/src/app# echo $POSTGRESS_DB      
mydb

...

为了创建秘密然后应用,我运行了:

echo "postgres" | openssl base64
(edit env-secret.yaml)
kubectl apply -f env-secret.yaml 

秘密内容:

apiVersion: v1
kind: Secret
metadata:
  name: env-secret
type: Opaque
data:
  POSTGRESS_USERNAME: cG9zdGdyZXMK
  POSTGRESS_PASSWORD: ...

这不是创建k8s秘密的正确方法吗?

【问题讨论】:

    标签: kubernetes sequelize.js kubernetes-secrets


    【解决方案1】:

    简单的选择:

    apiVersion: v1
    kind: Secret
    metadata:
      name: env-secret
    type: Opaque
    stringData:
      POSTGRESS_USERNAME: myapp
      POSTGRESS_PASSWORD: supersecret
    

    stringData 采用纯字符串而不是 base-64 编码的[]bytes。

    【讨论】:

    • 除了处理空格或其他可能破坏 yaml 格式的字符之外,是否有理由使用 Base64?我从一个示例中复制了我的 YAML。显然 Base64 中没有安全性,不知道重点是什么。
    • Secrets 包含二进制数据并不少见,例如 Java 密钥库文件。但是,如果您的数据不包括这些,那就不行!
    • 谢谢你的回答,这加深了我的理解。
    【解决方案2】:

    echo "postgres" 在字符串末尾包含一个换行符,该换行符也包含在编码的秘密中。相反,使用:

    echo -n "postgres" | openssl base64
    

    -n 标志禁止换行。

    【讨论】:

      猜你喜欢
      • 2021-10-26
      • 1970-01-01
      • 2018-12-07
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      • 2021-10-06
      • 1970-01-01
      相关资源
      最近更新 更多