目的
- PodからSecretを参照する方法を理解する
手段
killercodaで手を動かす
環境
killercoda
PodからSecretを参照するとは
PodからSecret(パスワードやAPIキーなどの機密情報)を参照するには、主に環境変数として読み込む方法と、**ファイル(ボリューム)**としてマウントする方法の2つがあります。
どちらの方法を使う場合でも、まずは参照したいSecretリソースをKubernetesクラスター内に作成しておく必要があります。
つまり、先に Secret を作成して、作成した Secret を Pod から参照する形ですね。
設定例は以下の通りです
- Pod 内の環境変数として Secret を設定する
- Pod 内のファイル(volume)としてマウントする
それぞれサンプル設定を確認します。
- Pod 内の環境変数として Secret を設定する
- Pod 内のファイル(volume)としてマウントする
まずは Secret を作成します。
controlplane:~$ k create secret generic holy --from-literal=creditcard=1111222233334444
secret/holy created
controlplane:~$ k get secrets holy -o yaml
apiVersion: v1
data:
creditcard: MTExMTIyMjIzMzMzNDQ0NA==
kind: Secret
metadata:
creationTimestamp: "2025-10-16T09:42:39Z"
name: holy
namespace: default
resourceVersion: "2990"
uid: dc2167a9-5fde-4427-9f13-ae6c6a6c93af
type: Opaque
# secret 作成
controlplane:~$ echo MTExMTIyMjIzMzMzNDQ0NA== |base64 --decode
1111222233334444
続いて yaml ファイルから secret を作成します。
controlplane:~$ k apply -f /opt/ks/secret-diver.yaml
secret/diver created
作成する pod に対して環境変数とvolumeで secret をマウントします。
controlplane:~$ cat pod1.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: pod1
name: pod1
spec:
volumes:
- name: diver
secret:
secretName: diver
# 作成済み secret をマウント
containers:
- image: nginx
name: pod1
resources: {}
volumeMounts:
- name: diver
readOnly: true
mountPath: "/etc/diver"
# 作成済み secret をマウント
env:
- name: HOLY
valueFrom:
secretKeyRef:
name: holy
key: creditcard
# 作成済み secret を環境変数として設定
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
controlplane:~$ k apply -f pod1.yaml
pod/pod1 created
マウントしたボリュームを確認します。
controlplane:~$ k exec pod1 -- cat /etc/diver/hosts
127.0.0.1 localhost
127.0.1.1 host01
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
controlplane:~$ k describe pod pod1
--- snip ---
Environment:
HOLY: <set to the key 'creditcard' in secret 'holy'> Optional: false
Mounts:
/etc/diver from diver (ro)
--- snip ---
続いて環境変数を確認します。
controlplane:~$ k exec pod1 -- env |grep HOLY
HOLY=1111222233334444
# 環境変数として creditcard(key)が HOLY として渡されています
あとがき
Kubernetes は奥が深い...