Kubernates 中 Secrets 可用來儲存敏感資料如密碼,Token。這些資料可能被儲存在 Pod 或者 Docker Image中,把這些資料保存在 Secrets 元件中,可以在這些信息被使用時加以控制,並可以降低信息洩露的風險。
下面我們以 blog-service 為例,實現把 db 信息保存在 Kubernates Secrets 元件中,並在 blog-service 中讀取 Secrets 對像中的 db 信息。
假設有些 Pod 需要存取資料庫。這些 Pod 需要使用的帳號與密碼在本機的 ./username.txt
和 ./password.txt
文件裡。
# Create files needed for rest of example.
$ echo -n "admin" > ./username.txt
$ echo -n "1f2d1e2e67df" > ./password.txt
kubectl create secret 命令將這些文件 包到一個 Secret 中並在 API server 中建立了一個元件。
$ kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt
secret "db-user-pass" created
檢查上述的指令已經建立好 Secret
$ kubectl get secrets
NAME TYPE DATA AGE
db-user-pass Opaque 2 51s
$ kubectl describe secrets/db-user-pass
Name: db-user-pass
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password.txt: 12 bytes
username.txt: 5 bytes
可以使用 kubectl get secret 獲取 secret。例如,獲取在上一節中創建的 secret:
$ kubectl get secret db-user-pass -o yaml
apiVersion: v1
data:
password.txt: MWYyZDFlMmU2N2Rm
username.txt: YWRtaW4=
kind: Secret
metadata:
creationTimestamp: 2018-10-29T14:30:38Z
name: db-user-pass
namespace: default
resourceVersion: "227048"
selfLink: /api/v1/namespaces/default/secrets/db-user-pass
uid: 34cfe277-db87-11e8-844b-080027cb9b15
type: Opaque
解碼密碼部分
$ echo "MWYyZDFlMmU2N2Rm" | base64 --decode
Hellow,大哥你好,我想問一下,K8S,有辦法像Docker Hub 那樣,用帳戶去控管image的上傳及節點部署的方式嗎?