从node.js应用访问Kubernetes的“秘密”环境变量

时间:2020-10-26 11:38:07

标签: node.js kubernetes environment-variables

我有一个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应用程序未将其选中。

有人知道我的应用程序为什么会正常读取常规环境变量而无法读取设置为机密的那些线索吗?

谢谢。

2 个答案:

答案 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()函数对密码进行加密和解密。