このセクションでは、Secret リソースの情報を Pod 内コンテナーの ボリューム( Volume )としてマウントし渡す方法について紹介します。
まず、Master サーバーから Kubernetes クラスタ上に Secret リソースを作成します。
[root@kube-master sample-secret]# kubectl create secret generic --save-config sample-secret --from-literal=username=root --from-literal=password=root-password secret/sample-secret created [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上で作成したSecret リソースの情報を yaml 形式で出力します。ここでは、 username と password の情報が確認できます。secret で定義した情報は、base64 でエンコードされます。
[root@kube-master sample-secret]# kubectl get secret sample-secret -o yaml apiVersion: v1 data: password: cm9vdC1wYXNzd29yZA== username: cm9vdA== kind: Secret metadata: annotations: kubectl.kubernetes.io/last-applied-configuration: | {"kind":"Secret","apiVersion":"v1","metadata":{"name":"sample-secret","creationTimestamp":null},"data":{"password":"cm9vdC1wYXNzd29yZA==","username":"cm9vdA=="}} creationTimestamp: "2019-02-02T07:38:06Z" name: sample-secret namespace: default resourceVersion: "3419018" selfLink: /api/v1/namespaces/default/secrets/sample-secret uid: 7b031bde-26bd-11e9-94ad-525400bc2a02 type: Opaque [root@kube-master sample-secret]#
Secret 情報を一つずつVolume にマウントして渡す場合
サンプルのマニフェストファイルを新規作成し、以下コードを記述します。
[root@kube-master sample-secret]# vi sample-secret-single-volume.yaml
spec の containers の volumeMounts にコンテナー上のボリュームをマウントするパスを指定します。 spec の volumes に指定したパスにマウント情報を指定します。ここでは、Secret( sample-secret )リソースにある username 情報を /config/ ディレクトリに username.txt として登録する指定をしています。
apiVersion: v1 kind: Pod metadata: name: sample-secret-single-volume spec: containers: - name: secret-container image: nginx:1.12 volumeMounts: - name: config-volume mountPath: /config volumes: - name: config-volume secret: secretName: sample-secret items: - key: username path: username.txt
Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。
[root@kube-master sample-secret]# kubectl apply -f sample-secret-single-volume.yaml pod/sample-secret-single-volume created [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上の Pod リソースを確認します。
[root@kube-master sample-secret]# kubectl get pod sample-secret-single-volume NAME READY STATUS RESTARTS AGE sample-secret-single-volume 1/1 Running 0 8s [root@kube-master sample-secret]#
Master サーバーから Pod( sample-secret-single-volume )内 の /config/username.txt に登録されている情報を確認します。ここでは、Secret リソースの username に定義されている 情報が username.txt に登録されていることが確認できます。
[root@kube-master sample-secret]# kubectl exec -it sample-secret-single-volume cat /config/username.txt root
[root@kube-master sample-secret]# [root@kube-master sample-secret]#
Secret 情報を全て Volume にマウントして渡す場合
サンプルのマニフェストファイルを新規作成し、以下コードを記述します。
[root@kube-master sample-secret]# vi sample-secret-all-volume.yaml
spec の containers の volumeMounts にコンテナー上のボリュームをマウントするパスを指定します。 spec の volumes に指定したパスにマウント情報を指定します。ここでは、Secret( sample-secret )リソースにある 全ての情報( username と password )を /config/ ディレクトリに登録する指定をしています。
apiVersion: v1 kind: Pod metadata: name: sample-secret-all-volume spec: containers: - name: secret-container image: nginx:1.12 volumeMounts: - name: config-volume mountPath: /config volumes: - name: config-volume secret: secretName: sample-secret
Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。
[root@kube-master sample-secret]# kubectl apply -f sample-secret-all-volume.yaml pod/sample-secret-all-volume created [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上の Pod リソースを確認します。
[root@kube-master sample-secret]# kubectl get pod sample-secret-all-volume NAME READY STATUS RESTARTS AGE sample-secret-all-volume 1/1 Running 0 17s [root@kube-master sample-secret]#
Master サーバーから Pod( sample-secret-all-volume )内 の /config/ ディレクトリを参照します。ここでは、/config/ ディレクトリに username と password ファイルが確認できます。
[root@kube-master sample-secret]# kubectl exec -it sample-secret-all-volume ls /config/ password username [root@kube-master sample-secret]#
Master サーバーから Pod( sample-secret-all-volume )内 の /config/ ディレクトリにある username と password ファイルの確認します。ここでは、Secret リソースの username と password に定義されている 情報が username と password ファイルにそれぞれ登録されていることが確認できます。
[root@kube-master sample-secret]# kubectl exec -it sample-secret-all-volume cat /config/username root
[root@kube-master sample-secret]# [root@kube-master sample-secret]# kubectl exec -it sample-secret-all-volume cat /config/password root-password
[root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上の Secret と Pod リソースを確認します。
[root@kube-master sample-secret]# kubectl get secret NAME TYPE DATA AGE default-token-75dfq kubernetes.io/service-account-token 3 28d sample-secret Opaque 2 46m [root@kube-master sample-secret]# [root@kube-master sample-secret]# kubectl get pod NAME READY STATUS RESTARTS AGE sample-secret-all-volume 1/1 Running 0 7m36s sample-secret-prefix-env 1/1 Running 0 36m sample-secret-single-volume 1/1 Running 0 30m [root@kube-master sample-secret]#
Master サーバーから 作成したKubernetes クラスタ上の Secret と Pod リソースを全て削除します。
[root@kube-master sample-secret]# kubectl delete secret sample-secret secret "sample-secret" deleted [root@kube-master sample-secret]# [root@kube-master sample-secret]# kubectl delete pod sample-secret-all-volume sample-secret-prefix-env sample-secret-single-volume pod "sample-secret-all-volume" deleted pod "sample-secret-prefix-env" deleted pod "sample-secret-single-volume" deleted [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上の Secret と Pod リソースが削除されていることを確認します。
[root@kube-master sample-secret]# kubectl get secret NAME TYPE DATA AGE default-token-75dfq kubernetes.io/service-account-token 3 28d [root@kube-master sample-secret]# [root@kube-master sample-secret]# kubectl get pod No resources found. [root@kube-master sample-secret]#