このセクションでは、Generic タイプの Secret リソースについて紹介します。 Secret リソースは、ユーザー名やパスワードなどの機密情報を別のリソースとして定義しておき 別リソースから Pod へ情報を読み込ませることができます。
ファイルから値を参照し作成する場合( – – from-file )
ユーザー名とパスワード情報を登録するファイルを作成します。ここでは、ユーザー root の情報を username ファイルに、パスワード root-password の情報を password ファイルに登録しています。
[root@kube-master sample-secret]# echo -n "root" > ./username [root@kube-master sample-secret]# echo -n "root-password" > ./password
作成したファイルを確認します。username と password ファイルが作成されていることが確認できます。
[root@kube-master sample-secret]# ls -la 合計 12 drwxr-xr-x. 2 root root 38 2月 2 10:40 . drwxr-xr-x. 17 root root 4096 2月 2 10:37 .. -rw-r--r--. 1 root root 13 2月 2 10:40 password -rw-r--r--. 1 root root 4 2月 2 10:40 username [root@kube-master sample-secret]#
Master サーバーから 作成したファイル( username と password )から値を参照した Secret リソースを作成します。
[root@kube-master sample-secret]# kubectl create secret generic --save-config sample-secret --from-file=./username --from-file=./password secret/sample-secret created [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上に作成した Secret リソースを確認します。 sample-secret リソースが Opaque タイプで起動していることが確認できます。
[root@kube-master sample-secret]# kubectl get secret sample-secret NAME TYPE DATA AGE sample-secret Opaque 2 57s [root@kube-master sample-secret]#
[root@kube-master sample-secret]# kubectl describe secret sample-db-auth
Name: sample-db-auth
Namespace: default
Labels: <none>
Annotations:
Type: Opaque
Data
====
password: 13 bytes
username: 4 bytes
[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-02T02:08:06Z" name: sample-secret namespace: default resourceVersion: "3391156" selfLink: /api/v1/namespaces/default/secrets/sample-secret uid: 6121774a-268f-11e9-94ad-525400bc2a02 type: Opaque [root@kube-master sample-secret]#
base64 でエンコードされた情報を平文で確認します。ここでは、username が root 、password が root-password であることが確認できます。
[root@kube-master sample-secret]# echo "cm9vdA==" | base64 --decode root [root@kube-master sample-secret]#
[root@kube-master sample-secret]# echo "cm9vdC1wYXNzd29yZA==" | base64 --decode root-password [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上に作成した Secret リソースを削除します。
[root@kube-master sample-secret]# kubectl delete secrets sample-secret secret "sample-secret" deleted [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上の Secret リソースが削除されていることを確認します。
[root@kube-master sample-secret]# kubectl get secrets sample-secret Error from server (NotFound): secrets "sample-secret" not found [root@kube-master sample-secret]#
envfileから値を参照し作成する場合( – – from-env-file )
envfile を使用すると、一つのファイルで参照する値を読み込ませることもできます。envfile を新規作成し、参照する値を記述します。
[root@kube-master sample-secret]# vi env-secret.txt
username と password の 値を指定します。
username=root password=root-password
Master サーバーから 作成したファイル( env-secret.txt )から値を参照した Secret リソースを作成します。
[root@kube-master sample-secret]# kubectl create secret generic --save-config sample-secret --from-env-file ./env-secret.txt secret/sample-secret created [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上に作成した Secret リソースを確認します。 sample-secret リソースが Opaque タイプで起動していることが確認できます。
[root@kube-master sample-secret]# kubectl get secrets sample-secret NAME TYPE DATA AGE sample-secret Opaque 2 9s [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-02T02:33:44Z"
name: sample-secret
namespace: default
resourceVersion: "3393322"
selfLink: /api/v1/namespaces/default/secrets/sample-secret
uid: f629d84d-2692-11e9-94ad-525400bc2a02
type: Opaque
[root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上に作成した Secret リソースを削除します。
[root@kube-master sample-secret]# kubectl delete secrets sample-secretsecret "sample-secret" deleted [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上の Secret リソースが削除されていることを確認します。
[root@kube-master sample-secret]# kubectl get secrets sample-secret Error from server (NotFound): secrets "sample-secret" not found [root@kube-master sample-secret]#
kubectl で直接値を渡す場合( – – from-literal )
ファイルを参照して値を読み込ませるのではなく、kubectl を使って直接渡すこともできます。 Master サーバーから kubectl を使って、username と password の値を渡す場合には以下のようなコマンドを実行します。
[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 リソースを確認します。 sample-secret リソースが Opaque タイプで起動していることが確認できます。
[root@kube-master sample-secret]# kubectl get secrets sample-secretNAME TYPE DATA AGE sample-secret Opaque 2 88s [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上で作成したSecret リソースの情報を yaml 形式で出力します。ここでは、 username と password の情報が確認できます。secret で定義した情報は、base64 でエンコードされます。
[root@kube-master sample-secret]# kubectl get secret sample-secret -o yamlapiVersion: 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-02T05:15:48Z" name: sample-secret namespace: default resourceVersion: "3406977" selfLink: /api/v1/namespaces/default/secrets/sample-secret uid: 99db731b-26a9-11e9-94ad-525400bc2a02 type: Opaque [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上に作成した Secret リソースを削除します。
[root@kube-master sample-secret]# kubectl delete secrets sample-secretsecret "sample-secret" deleted [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上の Secret リソースが削除されていることを確認します。
[root@kube-master sample-secret]# kubectl get secrets sample-secret Error from server (NotFound): secrets "sample-secret" not found [root@kube-master sample-secret]#
マニフェストから作成する場合
マニフェストから作成する場合は、base64 でエンコードした値をマニフェストに埋め込みます。サンプルのマニフェストファイルを新規作成し、以下コードを記述します。
[root@kube-master sample-secret]# vi sample-secret.yaml
kend に Secret、type に Generic ではなく Opaque を指定し、data に Pod に渡す Secret 情報をbase64 でエンコードした値で指定します。
apiVersion: v1 kind: Secret metadata: name: sample-secret type: Opaque data: username: cm9vdA== password: cm9vdC1wYXNzd29yZA==
(補足)
base64 エンコードの値を取得した場合には、以下コマンドで取得できます。
[root@kube-master sample-secret]# echo "root" | base64 cm9vdAo= [root@kube-master sample-secret]# [root@kube-master sample-secret]# echo "root-password" | base64 cm9vdC1wYXNzd29yZAo= [root@kube-master sample-secret]#
Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。
[root@kube-master sample-secret]# kubectl apply -f sample-secret.yaml secret/sample-secret created [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上に作成した Secret リソースを確認します。 sample-secret リソースが Opaque タイプで起動していることが確認できます。
[root@kube-master sample-secret]# kubectl get secrets sample-secret NAME TYPE DATA AGE sample-secret Opaque 2 9s [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: | {"apiVersion":"v1","data":{"password":"cm9vdC1wYXNzd29yZA==","username":"cm9vdA=="},"kind":"Secret","metadata":{"annotations":{},"name":"sample-secret","namespace":"default"},"type":"Opaque"} creationTimestamp: "2019-02-02T05:26:28Z" name: sample-secret namespace: default resourceVersion: "3407878" selfLink: /api/v1/namespaces/default/secrets/sample-secret uid: 17410564-26ab-11e9-94ad-525400bc2a02 type: Opaque [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上に作成した Secret リソースを削除します。
[root@kube-master sample-secret]# kubectl delete secrets sample-secret secret "sample-secret" deleted [root@kube-master sample-secret]#
Master サーバーから Kubernetes クラスタ上の Secret リソースが削除されていることを確認します。
[root@kube-master sample-secret]# kubectl get secrets sample-secret Error from server (NotFound): secrets "sample-secret" not found [root@kube-master sample-secret]#