KubernetesのSecretとConfigMap
こんにちわ
がじぇったー (@hackmylife7) | Twitter
です。
今日はk8sのSecretとConfigMapです。
TL;DR(要約)
- SecretとConfigMapはk8sにおいてアプリケーションコードとアプリケーションに必要な環境情報(環境依存のパラメータ)を分離するために使う
- コンテナイメージには設定情報は含ませない。設定情報は分離する⇆アプリケーションに環境依存の設定情報を埋め込まない
- k8sには設定情報を投入するためのリソースとしてSecretとConfigMapが存在する
重要な情報はSecret、汎用性が高い情報はConfigMapを用いることによって使い分ける。
設定の仕方は環境変数として取り込む方法、ファイルから直接取り込む方法等複数ある。
Secret
前述の通り、機密性の高い方法はSecretリソースを用い、環境変数として参照させることが推奨されている。
例えば以下のような情報が機密情報にあたる
Secret情報を管理し、アプリケーションに渡す方法は以下の種類がある
- マニフェストファイルに記載(-f)
- 直接kubectlコマンドで渡す(--from-literal)
- ファイルから参照させる(--from-file)
- envファイルから渡す(--from-env-file)
例えばマニフェストファイルを用いる場合は、
base64でエンコードした値をマニフェストに埋め込む
secret.yaml
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: YWRtaW4= # base64 password: MWYyZDFlMmU2N2Rm # base64
そしてapplyすることでk8sクラスタ内で定義した変数を使えるようになる。
kubectl apply -f ./secret.yaml secret "mysecret" created
保存されたデータはKubernetesクラスタ内のetcd上に保存される。
また、Secretのデータはメモリ上の一時的なファイルシステム上に保存され、Node上でデータが永続的に残らないようになっている。
ConfigMap
基本的な機能はSecretリソースと似ているが、Secretで扱うような機密情報はConfigMapリソースには持たせない。
Key Value形式で設定値を管理するが、nginx.confなどのMWの設定ファイルそのものも保存が可能である。
作成方法もSecretとほぼ同じで以下の方法がある
- マニフェストファイルに記載(-f)
- 直接kubectlコマンドで渡す(--from-literal)
- ファイルから参照させる(--from-file)
例えばマニフェストファイルに記載して渡す場合、以下のように記載する
apiVersion: v1 kind: ConfigMap metadata: creationTimestamp: 2016-02-18T18:54:22Z name: game-config-3 namespace: default resourceVersion: "530" selfLink: /api/v1/namespaces/default/configmaps/game-config-3 uid: 05f8da22-d671-11e5-8cd0-68f728db1985 data: game-special-key: | enemies=aliens lives=3 enemies.cheat=true
参考(Kubernetesの最強参考書)
Kubernetes完全ガイド (impress top gear)
- 作者: 青山真也
- 出版社/メーカー: インプレス
- 発売日: 2018/09/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Kubernetesの他の記事へは下記の一覧から飛べるようにしているので参照ください。