這次我們建立一個只含假密碼的 Secret,再把它掛載成 Pod 裡的檔案。整個練習都放在 lab,因為 Secret 和使用它的 Pod 必須位於同一個命名空間。
下面的密碼是公開教學假資料,可以放心使用。真實密碼不要直接打在命令列裡,因為它可能被終端機歷史紀錄保存。
kubectl create secret generic demo-secret --from-literal=password=demo-only-not-real -n lab
kubectl get secret demo-secret -n lab
看到 DATA 是 1,代表裡面有一個資料鍵。這裡不直接印出內容,避免把密碼留在畫面或操作紀錄中。
把以下內容存成 secret-reader.yaml。password 這個資料鍵會變成 /etc/demo-secret/password 檔案,並以唯讀方式掛載,避免容器改寫它。
apiVersion: v1
kind: Pod
metadata:
name: secret-reader
namespace: lab
spec:
containers:
- name: reader
image: busybox:1.37
command: ["sleep", "3600"]
volumeMounts:
- name: credentials
mountPath: /etc/demo-secret
readOnly: true
volumes:
- name: credentials
secret:
secretName: demo-secret
套用 YAML 後,等 Pod 真的進入 Ready 再往下做:
kubectl apply -f secret-reader.yaml
kubectl wait --for=condition=Ready pod/secret-reader -n lab --timeout=120s
如果啟動失敗,可以執行 kubectl describe pod secret-reader -n lab 查看 Events,優先確認 Secret 名稱和命名空間是否一致。
我們只檢查檔案存在而且不是空的,不用 cat 把密碼顯示出來。看到 mounted 就代表掛載成功:
kubectl exec secret-reader -n lab -- sh -c 'test -s /etc/demo-secret/password && echo mounted'
看到 mounted 只證明 Pod 能讀到指定檔案,不代表密碼已自動加密或整套權限都安全。正式環境還要限制誰能讀取 Secret,並安排密碼輪替與更新流程。
確認完成後移除 Pod,再刪除 Secret:
kubectl delete pod secret-reader -n lab
kubectl delete secret demo-secret -n lab