Secret解決了密碼、token、密鑰等敏感數據的配置問題,使用Secret能夠避免把這些敏感數據以明文的形式暴露到鏡像或者Pod Spec中。docker
Secret能夠以Volume或者環境變量的方式使用。json
使用以下命令行建立一個secret:api
kubectl create secret generic admin-access --from-file=./username.txt --from-file=./password.txt測試
輸入文件username.txt和password.txt須要手動建立,裏面分別維護用於測試的用戶名和密碼。編碼
建立成功後,發現secret的類型爲Opaque:命令行
實際上,Kubernetes的secret有三種類型:rest
1. Service Account:用來訪問Kubernetes API,由Kubernetes自動建立,而且會自動掛載到Pod的 /run/secrets/kubernetes.io/serviceaccount 目錄中;日誌
2. Opaque:base64編碼格式的Secret,用來存儲密碼、密鑰等;code
3. kubernetes.io/dockerconfigjson :用來存儲私有docker registry的認證信息。blog
而咱們剛剛建立的secret的類型爲Opaque,所以在kubectl get secrets的返回結果裏,能看到password和username的值均爲base64編碼:
要在pod裏消費這個secret也很容易,看一個例子:
apiVersion: v1 kind: Pod metadata: name: secret-pod spec: restartPolicy: Never volumes: - name: credentials secret: secretName: admin-access defaultMode: 0440 containers: - name: secret-container image: alpine:3.8 command: [ "/bin/sh", "-c", "cat /etc/foo/username.txt /etc/foo/password.txt" ] volumeMounts: - name: credentials mountPath: "/etc/foo" readOnly: true
建立pod,自動執行,經過log命令查看pod的日誌:
發現/bin/sh命令被執行了,pod mount的目錄/etc/foo下的username.txt和password.txt經過cat命令顯示了輸出:
要獲取更多Jerry的原創文章,請關注公衆號"汪子熙":