1. 程式人生 > 其它 >【K8s任務】使用 kubectl 管理 Secret

【K8s任務】使用 kubectl 管理 Secret

參考:https://kubernetes.io/zh/docs/tasks/configmap-secret/managing-secret-using-kubectl/

建立 Secret

一個 Secret 可以包含 Pod 訪問資料庫所需的使用者憑證。 例如,由使用者名稱和密碼組成的資料庫連線字串。 你可以在本地計算機上,將使用者名稱儲存在檔案 ./username.txt 中,將密碼儲存在檔案 ./password.txt 中。

echo -n 'admin' > ./username.txt
echo -n '1f2d1e2e67df' > ./password.txt

在這些命令中,-n 標誌確保生成的檔案在文字末尾不包含額外的換行符。 這一點很重要,因為當 kubectl 讀取檔案並將內容編碼為 base64 字串時,多餘的換行符也會被編碼。

kubectl create secret 命令將這些檔案打包成一個 Secret 並在 API 伺服器上建立物件。

kubectl create secret generic db-user-pass \
  --from-file=./username.txt \
  --from-file=./password.txt

預設金鑰名稱是檔名。 你可以選擇使用 --from-file=[key=]source 來設定金鑰名稱。例如:

kubectl create secret generic db-user-pass \
  --from-file=username=./username.txt \
  --from-file=password=./password.txt

你不需要對檔案中包含的密碼字串中的特殊字元進行轉義。

你還可以使用 --from-literal== 標籤提供 Secret 資料。 可以多次使用此標籤,提供多個鍵值對。 請注意,特殊字元(例如:$,\,*,= 和 !)由你的 shell 解釋執行,而且需要轉義。

在大多數 shell 中,轉義密碼最簡便的方法是用單引號括起來。 比如,如果你的密碼是 S!B*d$zDsb=, 可以像下面一樣執行命令:

kubectl create secret generic db-user-pass \
  --from-literal=username=devuser \
  --from-literal=password='S!B\*d$zDsb='

驗證 Secret

檢查 secret 是否已建立:

kubectl get secrets

輸出類似於:

NAME                  TYPE                                  DATA      AGE
db-user-pass          Opaque                                2         51s

你可以檢視 Secret 的描述:

kubectl describe secrets/db-user-pass

輸出類似於:

Name:            db-user-pass
Namespace:       default
Labels:          <none>
Annotations:     <none>

Type:            Opaque

Data
====
password:    12 bytes
username:    5 bytes

kubectl get 和 kubectl describe 命令預設不顯示 Secret 的內容。 這是為了防止 Secret 被意外暴露或儲存在終端日誌中。

解碼 Secret

要檢視建立的 Secret 的內容,執行以下命令:

kubectl get secret db-user-pass -o jsonpath='{.data}'

輸出類似於:

{"password":"MWYyZDFlMmU2N2Rm","username":"YWRtaW4="}

現在你可以解碼 password 的資料:

echo 'MWYyZDFlMmU2N2Rm' | base64 --decode

輸出類似於:

1f2d1e2e67df
作者:Varden 出處:http://www.cnblogs.com/varden/ 本文內容如有雷同,請聯絡作者! 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。