環境変数に入れられたシークレットを利用する GKE で実行される Kubernetes 1.9 でデプロイを作成しました。シークレットを base64 でエンコードした yaml ファイルを使用して、シークレットを GKE にアップロードしました。
コンテナに表示されているのは、環境変数がそこにあるということですが、値には末尾の空白が含まれています。環境変数 FOO の値を "bar" に設定すると、次のようになります。ここで、シークレット 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 から設定されたものを含む) には、末尾の空白が含まれません。問題があるのは秘密だけです。