Secret解決了密碼、token、密鑰等敏感數據的配置問題,使用Secret可以避免把這些敏感數據以明文的形式暴露到鏡像或者Pod Spec中。
Secret可以以Volume或者環境變量的方式使用。
使用如下命令行創建一個secret:
kubectl create secret generic admin-access --from-file=./username.txt --from-file=./password.txt
輸入文件username.txt和password.txt需要手動創建,里面分別維護用于測試的用戶名和密碼。
創建成功后,發現secret的類型為Opaque:
實際上,Kubernetes的secret有三種類型:
1. Service Account:用來訪問Kubernetes API,由Kubernetes自動創建,并且會自動掛載到Pod的 /run/secrets/kubernetes.io/serviceaccount 目錄中;
2. Opaque:base64編碼格式的Secret,用來存儲密碼、密鑰等;
3. kubernetes.io/dockerconfigjson :用來存儲私有docker registry的認證信息。
而我們剛剛創建的secret的類型為Opaque,因此在kubectl get secrets的返回結果里,能看到password和username的值均為base64編碼:
要在pod里消費這個secret也很容易,看一個例子:
apiVersion: v1kind: Podmetadata:name: secret-podspec:restartPolicy: Nevervolumes:- name: credentialssecret:secretName: admin-accessdefaultMode: 0440containers:- name: secret-containerimage: alpine:3.8command: [ "/bin/sh", "-c", "cat /etc/foo/username.txt /etc/foo/password.txt" ]volumeMounts:- name: credentialsmountPath: "/etc/foo"readOnly: true
創建pod,自動執行,通過log命令查看pod的日志:
發現/bin/sh命令被執行了,pod mount的目錄/etc/foo下的username.txt和password.txt通過cat命令顯示了輸出:
要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。