このセクションでは、Pod 内コンテナーに渡される Secret 情報の動的な更新について紹介します。Volume マウントで Secret リソース情報を Pod 内コンテナーに渡すようにしている場合には、Secret リソースの情報が更新された際に自動的に Pod 内のコンテナーに渡された Secret 情報も動的に更新されるようになっています。環境変数で Secret 情報を Pod 内コンテナーへ渡すようにしている場合には、動的な更新は行われません。

デフォルトでは、60秒の間隔で更新されたかどうかを確認し更新されている場合には Pod 内コンテナーに登録されている Secret 情報も更新されます。

まず、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]# 

Master サーバーから Secret 情報をVolume マウントで Pod 内コンテナーへ登録するマニフェスト( 詳細はこちら )を実行し、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 サーバーから Pod( sample-secret-all-volume )内 の /config/username に登録されている情報を確認します。ここでは、Secret リソースの username に定義されている情報が確認できます。

[root@kube-master sample-secret]# kubectl exec -it sample-secret-all-volume cat /config/username
root
[root@kube-master sample-secret]# 

Master サーバーから Secret リソース( sample-secret )の値を変更します。ここでは、username を root から admin( base64 エンコード:YWRtaW4= ) に変更しています。

[root@kube-master sample-secret]# cat << EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
  name: sample-secret
type: Opaque
data:
  username: YWRtaW4=
EOF
secret/sample-secret configured
[root@kube-master sample-secret]# 

Master サーバーから Pod( sample-secret-all-volume )内 の /config/username に登録されている情報を確認します。ここでは、Secret リソースの username に定義されている情報が admin に動的に更新されていることが確認できます。

[root@kube-master sample-secret]# kubectl exec -it sample-secret-all-volume cat /config/username
admin
[root@kube-master sample-secret]#