【Kubernetes】ConfigMap/SecretでPodの環境変数設定
はじめに
ConfigMapとSecretそれぞれを利用して、環境変数を簡単な例で実際に設定してみたいと思います。
ConfigMapとSecret
ConfigMapとは、機密性のない設定データを保存するオブジェクトです。
unknown linkSecretとは、機密データを保存するためのオブジェクトです。
unknown linkどちらもPodから設定データにアクセスすることができ、Podから設定データを分離することができます。
Secretの詳しいセキュリティ特性については下記のドキュメントを確認してください。
unknown linkConfigMapで環境変数
まずはConfigMapを使って環境変数の設定をしていきます。
ConfigMap
最初にConfigMapを作成します。
環境変数の値を格納するConfigMapのマニフェストconfigmap.yaml
は下記の通りです。
1apiVersion: v1
2kind: ConfigMap
3metadata:
4 name: env-config
5 namespace: default
6data:
7 HELLO: Hello
8 WORLD: World!!
ConfigMapを作成します。
1kubectl apply -f configmap.yaml
作成したConfigMapを確認してみると環境変数の値が確認できます。
1❯ kubectl describe configmap env-config
2Name: env-config
3Namespace: default
4Labels: <none>
5Annotations: <none>
6
7Data
8====
9HELLO:
10----
11Hello
12WORLD:
13----
14World!!
15
16BinaryData
17====
18
19Events: <none>
個別に環境変数を設定
作成したConfigMapから個別に環境変数を設定するPodを作成します。
configMapKeyRef
を使って環境変数の値を設定しています。configmap-keyref-pod.yaml
は下記の通りです。
1apiVersion: v1
2kind: Pod
3metadata:
4 name: configmap-keyref-pod
5spec:
6 containers:
7 - name: env-container
8 image: k8s.gcr.io/busybox
9 command: [ "/bin/sh", "-c", "echo $HELLO $WORLD" ]
10 env:
11 - name: HELLO
12 valueFrom:
13 configMapKeyRef:
14 name: env-config
15 key: HELLO
16 - name: WORLD
17 valueFrom:
18 configMapKeyRef:
19 name: env-config
20 key: WORLD
21 restartPolicy: Never
Podを作成します。
1kubectl apply -f configmap-keyref-pod.yaml
ログを確認すると環境変数が設定されていることがわかります。
1❯ kubectl logs configmap-keyref-pod
2Hello World!!
一括で環境変数を設定
次にConfigMapの設定内容を一括で設定するPodを作成します。
configMapRef
でConfigMapの設定内容全体を環境変数として設定します。configmap-ref-pod.yaml
は下記の通りです。
1apiVersion: v1
2kind: Pod
3metadata:
4 name: configmap-ref-pod
5spec:
6 containers:
7 - name: env-container
8 image: k8s.gcr.io/busybox
9 command: [ "/bin/sh", "-c", "echo $HELLO $WORLD" ]
10 envFrom:
11 - configMapRef:
12 name: env-config
13 restartPolicy: Never
Podを作成します。
1kubectl apply -f configmap-ref-pod.yaml
ログを確認すると一括でも環境変数が設定されていることがわかります。
1❯ kubectl logs configmap-ref-pod
2Hello World!!
Secretで環境変数
次はSecretを使って環境変数を設定します。
Secret
まずはSecretを作成します。
環境変数の値を格納するSecretのマニフェストsecret.yaml
は下記の通りです。
1apiVersion: v1
2kind: Secret
3metadata:
4 name: password-secret
5stringData:
6 USER: Masa
7 PASSWORD: HOGEHOGE
Secretを作成します。
1kubectl apply -f secret.yaml
作成したSecretを確認してみるとデータがそのまま表示されていないことがわかります。
1❯ kubectl describe secret password-secret
2Name: password-secret
3Namespace: default
4Labels: <none>
5Annotations: <none>
6
7Type: Opaque
8
9Data
10====
11PASSWORD: 8 bytes
12USER: 4 bytes
下記のようにyaml形式で出力するとデータがエンコードされた文字列が確認できます。
1❯ k get secret/password-secret -o yaml
2apiVersion: v1
3data:
4 PASSWORD: SE9HRUhPR0U= # エンコードされた文字列
5 USER: TWFzYQ== # エンコードされた文字列
6kind: Secret
7metadata:
8 :
9 :
10type: Opaque
これをbase64でデコードすることで元の文字列に戻すことが可能です。
1❯ echo "SE9HRUhPR0U=" | base64 --decode
2HOGEHOGE
3
4❯ echo "TWFzYQ==" | base64 --decode
5Masa
個別に環境変数を設定
作成したSecretから個別に環境変数を設定するPodを作成します。
secretMapKeyRef
を使って環境変数の値を設定しています。secret-keyref-pod.yaml
は下記の通りです。
1apiVersion: v1
2kind: Pod
3metadata:
4 name: secret-keyref-pod
5spec:
6 containers:
7 - name: password-container
8 image: k8s.gcr.io/busybox
9 command: [ "/bin/sh", "-c", "echo $USER $PASSWORD" ]
10 env:
11 - name: USER
12 valueFrom:
13 secretKeyRef:
14 name: password-secret
15 key: USER
16 - name: PASSWORD
17 valueFrom:
18 secretKeyRef:
19 name: password-secret
20 key: PASSWORD
21 restartPolicy: Never
Podを作成します。
1kubectl apply -f secret-keyref-pod.yaml
ログを確認すると環境変数が設定されていることがわかります。
1❯ kubectl logs secret-keyref-pod
2Masa HOGEHOGE
一括で環境変数を設定
次にSecretの設定内容を一括で設定するPodを作成します。
secretRef
でSecretの設定内容全体を環境変数として設定します。secret-ref-pod.yaml
は下記の通りです。
1apiVersion: v1
2kind: Pod
3metadata:
4 name: secret-ref-pod
5spec:
6 containers:
7 - name: password-container
8 image: k8s.gcr.io/busybox
9 command: [ "/bin/sh", "-c", "echo $USER $PASSWORD" ]
10 envFrom:
11 - secretRef:
12 name: password-secret
13 restartPolicy: Never
Podを作成します。
1kubectl apply -f secret-ref-pod.yaml
ログを確認すると一括でも環境変数が設定されていることがわかります。
1❯ kubectl logs secret-ref-pod
2Masa HOGEHOGE