がじぇ

お金と家電とプログラミングのブログ

KubernetesのSecretとConfigMap

こんにちわ

がじぇったー (@hackmylife7) | Twitter


です。

今日はk8sのSecretとConfigMapです。



f:id:gadgeterkun:20190804233157j:plain

TL;DR(要約)

  • SecretとConfigMapはk8sにおいてアプリケーションコードとアプリケーションに必要な環境情報(環境依存のパラメータ)を分離するために使う
  • コンテナイメージには設定情報は含ませない。設定情報は分離する⇆アプリケーションに環境依存の設定情報を埋め込まない
  • k8sには設定情報を投入するためのリソースとしてSecretとConfigMapが存在する

重要な情報はSecret、汎用性が高い情報はConfigMapを用いることによって使い分ける。

設定の仕方は環境変数として取り込む方法、ファイルから直接取り込む方法等複数ある。

Secret

前述の通り、機密性の高い方法はSecretリソースを用い、環境変数として参照させることが推奨されている。

例えば以下のような情報が機密情報にあたる

  • パスワード
  • 認証トーク
  • SSHキー
  • データベースクルデンシャル

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)

Kubernetes完全ガイド (impress top gear)

Kubernetesの他の記事へは下記の一覧から飛べるようにしているので参照ください。

gadgeterkun.hatenablog.com