使用secret的基本流程:
- 1.創建k8s集群
- 2.創建管理的文件
- 3.驗證
- 4.解碼
- 5.清理
集群創建忽略,從第2步開始,一起來熟悉下secret的管理流程。
一個 Secret 可以包含 Pod 訪問數據庫所需的用戶憑證。
1.創建管理的文件
# 以文件形式,
# 在這些命令中,-n 標志確保生成的文件在文本末尾不包含額外的換行符。 這一點很重要,因為當 kubectl 讀取文件並將內容編碼為 base64 字符串時,多余的換行符也會被編碼。
echo -n "testName" > user.txt
echi -n "password" > pwd.txt
# 使用kubectlcreate secret命令打包文件成secret,並在API服務器上創建對象
kubectl create secret generic my-auth \
--from-file=user.txt
--from-file=pwd.txt
---輸出
secret/my-auth created
---
默認密鑰名稱是文件名。 你可以選擇使用 --from-file=[key=]source 來設置密鑰名稱。例如:
kubectl create secret generic my-auth \
--from-file=username=username.txt \
--from-file=password=password.txt
你還可以使用 --from-literal=<key>=<value> 標簽提供 Secret 數據。 可以多次使用此標簽,提供多個鍵值對。 請注意,特殊字符(例如:$,\,*,= 和 !)由你的 shell 解釋執行,而且需要轉義。
kubectl create secret generic my-auth \
--from-literal=username=devuser \
--from-literal=password='S!B\*d$zDsb='
2.驗證secret
檢查 secret 是否已創建:
kubectl get secret [-n mynamespace]
輸出:
kubectl get secret -n elk
NAME TYPE DATA AGE
default-token-jxc92 kubernetes.io/service-account-token 3 2d23h
elastic-certificate-pem Opaque 1 2d23h
elastic-certificates Opaque 1 2d23h
elastic-credentials Opaque 2 2d23h
sh.helm.release.v1.es-c.v1 helm.sh/release.v1 1 47h
sh.helm.release.v1.es-d.v1 helm.sh/release.v1 1 42h
sh.helm.release.v1.es-m.v1 helm.sh/release.v1 1 42h
查看secret的描述
kubectl describe secret secret-name [-n mynamespace]
輸出:
kubectl describe secret elastic-credentials -n elk
Name: elastic-credentials
Namespace: elk
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 13 bytes
username: 7 bytes
kubectl get 和 kubectl describe 命令默認不顯示 Secret 的內容。 這是為了防止 Secret 被意外暴露或存儲在終端日志中。
3.解碼secret
要查看創建的 Secret 的內容,運行以下命令:
kubectl get secret db-user-pass -o jsonpath='{.data}'
輸出類似於:
{"password":"MWYyZDFlMmU2N2Rm","username":"YWRtaW4="}
現在你可以解碼 password 的數據:
echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
輸出類似於:
1f2d1e2e67df
4.清理
刪除創建的 Secret:
kubectl delete secret db-user-pass