🎡

KubernetesのSecretはBase64でエンコードしよう

2021/10/18に公開

KubernetesのSecretにそのままパスワードを入力して保存しようとするとエラーが出ました。調べてみると、Base64の形式でパスワードをエンコードする必要があるようなので、簡単に文字列をBase64エンコードする方法を記しておきます。

Kubernetes Secret とは?

以下、公式ドキュメントより引用。。

KubernetesのSecretはパスワード、OAuthトークン、SSHキーのような機密情報を保存し、管理できるようにします。 Secretに機密情報を保存することは、それらをPodの定義やコンテナイメージに直接記載するより、安全で柔軟です。

詳しくは、以下のSecretの設計文書を参照してください。

Secretの設計文書

https://github.com/kubernetes/community/blob/master/contributors/design-proposals/auth/secrets.md

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

https://kubernetes.io/ja/docs/concepts/configuration/secret/

https://www.cloudytuts.com/tutorials/kubernetes/how-to-base64-encode-kubernetes-secrets/

Discussion