我在 GKE 上运行的 Kubernetes 1.9 中创建了一个部署,该部署利用了放入环境变量中的秘密。我使用带有 base64 编码的 yaml 文件将机密上传到 GKE。
我在容器中看到的是环境变量在那里,但值包括尾随空格。如果我设置一个值为“bar”的环境变量 FOO,这就是它的样子,其中我放入秘密 yaml 的 base64 将是“YmFyCg==”:
$ echo $FOO
bar
$ echo \"$FOO\"
"bar "
$ echo $FOO | base64
YmFyCg==
$ echo "$FOO" | base64
YmFyIAo=
对于从环境变量中读取的应用程序来说,这会造成无穷无尽的困难,这些应用程序期望值在没有额外空白的情况下被编码,例如,POSTGRES_PASSWORD
在POSTGRES_USER
图像中postgres:9.6
。环境中的其他变量(包括那些从我的部署 yaml 中设置的没有秘密的变量)不包括尾随空格;只有秘密有问题。