我有一个node.js应用程序,它正在访问如下环境变量:
const pool = mysql.createPool({
host: process.env.MYSQL_HOST,
user: process.env.MYSQL_USER,
port: process.env.MYSQL_PORT,
password: process.env.MYSQL_PASSWORD,
database: process.env.MYSQL_DB
});
部署是通过Kubernetes完成的。一些环境变量,例如MYSQL_HOST,MYSQL_DB以纯格式设置,而MYSQL_PASSWORD是通过秘密设置的。问题是我的node.js应用程序可以正常读取常规环境变量,而MYSQL_PASSWORD不能。但是问题是,当我尝试在容器中的环境变量列表中看到MYSQL_PASSWORD的值时,它会显示正确的值。
以下是在部署Yaml中设置相关环境变量的方式:
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
key: MYSQL_PASSWORD
name: config-secret
同样,当我在容器中运行env
命令时,该值可见,但是由于某种原因,node.js应用程序未将其选中。
有人知道我的应用程序为什么会正常读取常规环境变量而无法读取设置为机密的那些线索吗?
谢谢。
答案 0 :(得分:2)
key
应该是您在秘密中使用过的一次。例如,如果您有:
kubectl create secret generic config-secret --from-literal=username=user --from-literal=password=pw
您应按以下方式使用它:
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: config-secret
key: password
请注意,key
与env变量名称不同。应该是用来设置机密密钥的密钥。
答案 1 :(得分:0)
检查密码是否正确编码。有时,您也用密码对“空格”或“换行符”进行编码,结果密码错误。
使用btoa()和atob()函数对密码进行加密和解密。