使用 Kustomize 管理 Secret
kubectl
支援使用 Kustomize 物件管理工具 管理 Secret 和 ConfigMap。你可以使用 Kustomize 建立一個 資源生成器,該生成器會生成一個 Secret,然後你可以使用 kubectl
將其應用到 API 伺服器。
準備工作
你需要有一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在至少有兩個不充當控制平面主機的節點的叢集上執行本教程。如果你還沒有叢集,你可以使用 minikube 建立一個,或者你可以使用以下 Kubernetes 演練場之一
建立 Secret
你可以透過在 kustomization.yaml
檔案中定義一個 secretGenerator
來生成 Secret,該生成器引用其他現有檔案、.env
檔案或字面值。例如,以下說明為使用者名稱 admin
和密碼 1f2d1e2e67df
建立一個 kustomization 檔案。
注意
Secret 的 `stringData` 欄位與伺服器端應用不相容。建立 kustomization 檔案
secretGenerator:
- name: database-creds
literals:
- username=admin
- password=1f2d1e2e67df
將憑據儲存在檔案中。檔名是 Secret 的鍵
echo -n 'admin' > ./username.txt echo -n '1f2d1e2e67df' > ./password.txt
-n
標誌確保檔案末尾沒有換行符。建立
kustomization.yaml
檔案secretGenerator: - name: database-creds files: - username.txt - password.txt
你還可以透過提供 .env
檔案在 kustomization.yaml
檔案中定義 secretGenerator。例如,以下 kustomization.yaml
檔案從 .env.secret
檔案中提取資料
secretGenerator:
- name: db-user-pass
envs:
- .env.secret
在所有情況下,你都不需要對值進行 base64 編碼。YAML 檔案的名稱必須是 kustomization.yaml
或 kustomization.yml
。
應用 kustomization 檔案
要建立 Secret,請應用包含 kustomization 檔案的目錄
kubectl apply -k <directory-path>
輸出類似於:
secret/database-creds-5hdh7hhgfk created
生成 Secret 時,Secret 名稱是透過對 Secret 資料進行雜湊處理並將雜湊值附加到名稱而建立的。這確保了每次修改資料時都會生成新的 Secret。
要驗證 Secret 是否已建立並解碼 Secret 資料,
kubectl get -k <directory-path> -o jsonpath='{.data}'
輸出類似於:
{ "password": "MWYyZDFlMmU2N2Rm", "username": "YWRtaW4=" }
echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
輸出類似於:
1f2d1e2e67df
有關更多資訊,請參閱使用 kubectl 管理 Secret 和使用 Kustomize 對 Kubernetes 物件進行宣告式管理。
編輯 Secret
在
kustomization.yaml
檔案中,修改資料,例如password
。應用包含 kustomization 檔案的目錄
kubectl apply -k <directory-path>
輸出類似於:
secret/db-user-pass-6f24b56cc8 created
編輯後的 Secret 作為新的 Secret
物件建立,而不是更新現有的 Secret
物件。你可能需要更新 Pod 中對 Secret 的引用。
清理
要刪除 Secret,請使用 kubectl
kubectl delete secret db-user-pass
下一步
- 閱讀更多關於Secret 概念的資訊
- 瞭解如何使用 kubectl 管理 Secret
- 瞭解如何使用配置檔案管理 Secret