初心者のKubernetes入門(書籍 Kubernetes 実践入門の写経から学ぶ)Secret 編


背景

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

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

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

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

実際の学びについて

書籍を読みながら、章ごとに少しずつ進めていきたいと思います。
GitHub のソースコードも使いながら学んで行きたいと思います。

勉強開始

コマンド郡

secret で mysecret を作成する

username
my-username
$ kubectl create secret generic mysecret --from-file=username --from-literal=password=mypassword
secret/mysecret created

実行結果

  • username ファイルの中身が 実行結果の username=my-username として設定されてるのを確認できます。
  • コマンドラインの --from-literal=password=mypasswordpassword=mypassword として設定されているのを確認できます。

実行結果(コマンド)

  • 確認して値がBase64で表示されているのを確認できます。
$ kubectl get secrets mysecret -o yaml
apiVersion: v1
data:
  password: bXlwYXNzd29yZA==
  username: bXktdXNlcm5hbWU=
kind: Secret
metadata:
  creationTimestamp: "2020-04-12T03:58:21Z"
  name: mysecret
  namespace: default
  resourceVersion: "64003"
  selfLink: /api/v1/namespaces/default/secrets/mysecret
  uid: 0fe6f11b-74b9-4f86-895b-f62da6bda371
type: Opaque

Secret をボリュームとしてマウントする場合

secret-volume.yaml
apiVersion: v1
kind: Pod
metadata:
  name: secret-volume
spec:
  containers:
  - name: nginx
    image: k8spracticalguide/nginx:1.15.5
    ports:
    - containerPort: 80
    volumeMounts:
    - name: mysecret-volume # 下記の Volume 名と一致しなければならない
      readOnly: true
      mountPath: /secrets/mysecret
  volumes:
    - name: mysecret-volume
      secret: # Volumeとして投入するSecretの設定 (1)
        secretName: mysecret # Secret 名と一致しなければならない

マニュフェストを適用する

$ kubectl apply -f secret-volume.yaml
pod/secret-volume created

実行後(コマンド)

  • key は表示され Value は非表示でした。これでよいのかな?
$ kubectl exec secret-volume -- ls /secrets/mysecret
password
username

Secret を環境変数として扱う場合

secret-env.yaml
apiVersion: v1
kind: Pod
metadata:
  name: secret-env
spec:
  containers:
  - name: nginx
    image: k8spracticalguide/nginx:1.15.5
    ports:
    - containerPort: 80
    env:
    - name: SECRET_PASSWORD # 設定する環境変数名
      valueFrom:
        secretKeyRef: # 環境変数の値として利用するSecretのキーの参照 (2)
          name: mysecret # Secret名を指定する
          key: password # Secretのキー名を指定

マニュフェストを適用する

$ kubectl apply -f secret-env.yaml
pod/secret-env created

実行後(コマンド)

  • Secret で設定したパスワードが環境変数に設定されているのを確認できました。
$ kubectl exec secret-env -- sh -c "env | grep SECRET_PASSWORD"
SECRET_PASSWORD=mypassword

アプリケーションの管理方法(3章)〜

今までが一応、コマンドの使い方や、Namespace/Pod/ReplicaSet/Deployment/Service/Secret 等の概要からだと思ってやっていきます。

最後に

1章ずつ、ちょっとずつ、 ちょっとちょうどいい を勉強のベースにやっていきます。