1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

.envからKubernetesのsecret, config mapのマニュフェストファイルを生成する。

Last updated at Posted at 2021-04-09

2021-07-05 追記

当記事ではdry-runを利用してマニュフェストファイルを生成していますが、kustomizationを利用した方法のほうが簡単にsecretを生成できます。

追記ここまで


KubernetesのSecretを定義するマニュフェストを作成するの面倒じゃありませんか?

$ echo -n foo | base64

と一つ一つエンコードするのも大変ですし、機密情報がコマンドログに残るのも気持ち悪い。

色々調べていると、kubectl create configmapkubectl create secretのオプション--from-env-filedry-run=clinetを組み合わせたら.envからマニュフェストが生成できそうだなと気がついたので紹介します。

kubectlのオプション解説

--from-env-file: envファイルから設定を読み込む
--dry-run=client: kubenetesのクラスターに適応せずに、クライアント側で動作するかテストする
--output=yaml: マニュフェストをyaml形式で標準出力する

以上を踏まえてやっていきましょう。

.envからSecretリソースを定義するマニュフェストを生成

.envという以下のファイルがあるとします。

HELLO=WORLD
FOO=BAR
HOGE=FUGA

my-secretというSecretリソースを定義するマニュフェストファイルを生成する場合

$ kubectl create secret generic my-secret --dry-run=client --from-env-file=.env --output=yaml

出力結果

apiVersion: v1
data:
  FOO: QkFS
  HELLO: V09STEQ=
  HOGE: RlVHQQ==
kind: Secret
metadata:
  creationTimestamp: null
  name: my-secret

ということで、既に環境変数がbase64にエンコードされたマニュフェストが生成されました。

もしファイルに出力したい場合、リダイレクトを利用します。

$ kubectl create secret generic my-secret --dry-run=client --from-env-file=.env --output=yaml > secret.yml

.envからConfig Mapマニュフェスト生成

同様に.envからConfig Mapを定義するマニュフェストも生成できます。

my-config-mapというリソースを作成する場合

$ kubectl create configmap my-config-map --dry-run=client --from-env-file=.env --output=yaml 

出力結果

apiVersion: v1
data:
  FOO: BAR
  HELLO: WORLD
  HOGE: FUGA
kind: ConfigMap
metadata:
  creationTimestamp: null
  name: my-config-map

ファイルに出力する場合、リダイレクトを利用する。

$ kubectl create configmap my-config-map --dry-run=client --from-env-file=.env --output=yaml > configmap.yml

メリット

  • secretリソースを作成する時に手動でbase64エンコードする必要がない。コマンドログにも機密情報が残らない&楽
  • 開発でもよく利用するであろう.envから生成できる。
  • secretリソースを変更するときも.envから再生成 & kubectl apply -f secret.ymlで適用できる。

終わり

.envからkubernetesのマニュフェストファイルを生成できました。

kubectl create secret generic --from-env-fileだけでも直接Secretリソースは作成できるのですが、マニュフェストファイルを生成しておくと、リソース名も定義できるのでより "infrastructure as code" が実現できると思います。

もしgit管理をする場合生データは危険なので、sopssealed secretgit cryptを利用して暗号化した上でコミットすることを忘れずに。

この記事が皆さんの助けになればなと思います。

備考

Secretを作成する方法としてkustomizesecretGeneratorを利用する方法もあります。

Managing Secret using Kustomize

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?