创建k8s机密的正确方法



我不确定我是否正确解释了容器的输出,但我在日志中看到了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机密的正确方法吗?

简单的选项:

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

stringData采用纯字符串,而不是基于64编码的[]bytes。

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

echo -n "postgres" | openssl base64

-n标志禁止换行。

最新更新