🎡
KubernetesのSecretはBase64でエンコードしよう
KubernetesのSecretにそのままパスワードを入力して保存しようとするとエラーが出ました。調べてみると、Base64の形式でパスワードをエンコードする必要があるようなので、簡単に文字列をBase64エンコードする方法を記しておきます。
Kubernetes Secret とは?
以下、公式ドキュメントより引用。。
KubernetesのSecretはパスワード、OAuthトークン、SSHキーのような機密情報を保存し、管理できるようにします。 Secretに機密情報を保存することは、それらをPodの定義やコンテナイメージに直接記載するより、安全で柔軟です。
詳しくは、以下のSecretの設計文書を参照してください。
Secretの設計文書
Base64エンコード
macOSの場合、Base64のエンコーディングはシェルから実行できます。
例として、kubernetes-secret-password
という文字列をエンコードしてみます。
コマンド
echo -n 'kubernetes-secret-password' | base64
出力
a3ViZXJuZXRlcy1zZWNyZXQtcGFzc3dvcmQ=
kubernetes-secret-password
をKubernetesのSecretに保存しようとするとエラーが出ますが、a3ViZXJuZXRlcy1zZWNyZXQtcGFzc3dvcmQ=
は正常に保存されます。
おまけ: Base64デコード
--decode
オプションをつけることで、Base64にエンコードされた文字列を元に戻すこともできます。
試しに、先ほどの文字列をでコードしてみます。
コマンド
echo -n 'a3ViZXJuZXRlcy1zZWNyZXQtcGFzc3dvcmQ=' | base64 --decode
出力
kubernetes-secret-password
元に戻りました。
感想
これまで自分のMacで環境変数を設定していた時にはエンコードなどせずにそのまま入力していたので、今回のエラーは正直盲点でした。それにしてもまだまだ知らない暗号形式があるな。。
References
Discussion