【Kubernetes】ConfigMap/SecretでPodの環境変数設定

2022.01.08
2024.03.24
Kubernetes
ConfigMapSecret

本ページはAmazonアフィリエイトのリンクを含みます。

はじめに

ConfigMapとSecretそれぞれを利用して、環境変数を簡単な例で実際に設定してみたいと思います。

ConfigMapとSecret

ConfigMapとは、機密性のない設定データを保存するオブジェクトです。

unknown link

Secretとは、機密データを保存するためのオブジェクトです。

unknown link

どちらもPodから設定データにアクセスすることができ、Podから設定データを分離することができます。

Secretの詳しいセキュリティ特性については下記のドキュメントを確認してください。

unknown link

ConfigMapで環境変数

まずは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でデコードすることで元の文字列に戻すことが可能です。

1echo "SE9HRUhPR0U=" | base64 --decode
2HOGEHOGE
3
4echo "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

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee