初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)マニュフェスト(Secret)編


背景

個人的にインフラの知識以上にこれからのアプリケーションが動く環境を作ってデプロイしたりしてこれからの知識を身に着けたい。そしてより一層、自分の知識のアップデートをしたいと思いました。

その中でこの本に出会い、これから少しずつやったことを残し、未来の自分への手紙としてもあり、見つめ直せればと思いました。

引用や参考と今回の自分の勉強用の書籍の紹介

技術評論社『Kubernetes実践入門』のサンプルコード
Kubernetes実践入門 プロダクションレディなコンテナ&アプリケーションの作り方

実際の学びについて

書籍を読みながら、章ごとに少しずつ進めていきたいと思います。
GitHub のソースコードも使いながら学んで行きたいと思います。
この章の勉強は本当に書籍の写経が主になるかもしれません・・・

勉強開始

Secret を使って秘密情報を取り扱う

  • ConfigMap で設定することもできるけど、秘密情報には向いていない
  • ConfigMap だったら秘密情報も見れてしまう
  • そうか、だから Secret があるということだと思います。
cm.yamlからMYSQL_PASSWORDを削除する
apiVersion: v1
data:
  MYSQL_DATABASE: mattermost
  MYSQL_USER: myuser
kind: ConfigMap

Secret 情報のマニュフェストを作成する

$ kubectl create secret generic common-env -o yaml --dry-run \
--from-literal MYSQL_ROOT_PASSWORD=rootpassword \
--from-literal MYSQL_PASSWORD=mypassword > secret.yaml

$ cat secret.yaml
apiVersion: v1
data:
  MYSQL_PASSWORD: bXlwYXNzd29yZA==
  MYSQL_ROOT_PASSWORD: cm9vdHBhc3N3b3Jk
kind: Secret
metadata:
  creationTimestamp: null
  name: common-env

Secret の安全性

書籍にもあるけど value 部分は Base64 エンコーディングされているよって!
確認してみます

$ echo bXlwYXNzd29yZA== | base64 -d
mypassword # 上記のコマンドで設定した値になっていることを確認

Secret の値を Pod テンプレートから呼び出す

mattermost-deploy.yamlの値をSecretを参照させます
        - name: MM_PASSWORD
          valueFrom:
            secretKeyRef: #configMapKeyRef -> secretKeyRef に変更
              name: common-env
              key: MYSQL_PASSWORD
db-deploy.yamlの値をSecretを参照させます
    spec:
      containers:
      - image: k8spracticalguide/mysql:5.7.22
        name: mysql
        envFrom:
        - configMapRef:
            name: common-env
        - secretRef:          # 追加
            name: common-env  # 追加
mattermost確認
$ kubectl describe po mattermost-7fd45dcf9f-pm6tc

〜省略〜
    Environment:
      MM_USERNAME:  <set to the key 'MYSQL_USER' of config map 'common-env'>      Optional: false
      MM_PASSWORD:  <set to the key 'MYSQL_PASSWORD' in secret 'common-env'>      Optional: false
      DB_NAME:      <set to the key 'MYSQL_DATABASE' of config map 'common-env'>  Optional: false
      DB_HOST:

MYSQL_PASSWORD が secret になっているので大丈夫そう

db確認
$ kubectl describe po db-7f9fbfcc6-clpxn

〜省略〜
    Environment Variables from:
      common-env  ConfigMap  Optional: false
      common-env  Secret     Optional: false

次は 3.5 章をやっていきます。

  • アプリケーション同士の通信する方法を学びます

最後に

本書を読むにあたってには2つのアイコンがあるけど、今回、錨アイコン のコラム「ConfigMap と Secret 値のロード」の部分の①がなるほどと思いました。

どうやって値が反映されるか、最後の確認を見る方法ってと思って Deployment を更新したらできたので嬉しかったのと、それが活字で説明してくれるところの話だなぁ〜と改めてしみじみ感じました。

  • ②ConfigMap の更新を検知して Pod を再作成するコントローラを追加する
  • ③マウントしたファイルの更新を検知してリロードする

この2つについては、写経では一旦おいておこうと思います。

今までの投稿

  1. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)Pod編
  2. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)NameSpace 編
  3. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)Label 編
  4. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)ReplicaSet 編
  5. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)Deployment 編
  6. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)Service 編
  7. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)ConfigMap 編
  8. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)Secret 編
  9. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)操作編
  10. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)体感編
  11. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)体感編パート2
  12. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)体感編パート3(Label操作)
  13. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)体感編パート3(OwnerReference 操作)
  14. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)マニュフェスト編
  15. 初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)マニュフェスト(ConfigMap)編