Secret 能夠用來保存密碼、密鑰等敏感信息,避免密鑰直接放在 Pod 的YAML定義文件或容器鏡像中致使的泄露問題。html
密鑰使用 Base64 編碼形式存儲於 Secret 對象中,Pod 掛載後自動解碼爲明文。linux
建立用戶名/密碼文件redis
echo -n 'username' > ./username.txt echo -n 'password' > ./password.txt
寫入 Secret 對象中api
# kubectl create secret generic db-info --from-file=./username.txt --from-file=./password.txt secret/db-info created
檢查 Secret安全
# kubectl get secret NAME TYPE DATA AGE db-info Opaque 2 106s
查看剛寫入的 db-info 的詳細信息服務器
# kubectl describe secret db-info Name: db-info Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== username.txt: 8 bytes password.txt: 8 bytes
查看密鑰的值微信
# kubectl get secret db-info -o yaml
先將要保存的值進行 Base64 編碼app
# echo -n 'username' | base64 dXNlcm5hbWU= # echo -n 'password' | base64 cGFzc3dvcmQ=
apiVersion: v1 kind: Secret metadata: name: mysecret type: Opaque data: username: base64編碼 password: base64編碼
建立 secret編碼
# kubectl apply -f secret.yaml secret/mysecret created
查看加密
# kubectl get secret NAME TYPE DATA AGE mysecret Opaque 2 2m5s
查看密鑰的值
# kubectl get secret mysecret -o yaml
編輯 secret
kubectl edit secrets mysecret
apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mypod image: redis volumeMounts: - name: foo mountPath: "/etc/foo" readOnly: true volumes: - name: foo secret: secretName: mysecret
以上示例中,
將名爲 mysecret 的 secret 對象映射爲卷,卷名爲 foo,
將名爲 foo 的卷掛載到 Pod 中的路徑 /etc/foo 下面,
mysecret 中username/password兩個key,分別映射爲文件。
多個 Pod 能夠共享一個卷。
能夠進入 Pod 中查看這兩個文件內容
# kubectl exec -it mypod -- ls /etc/foo/ password username # kubectl exec -it mypod -- cat /etc/foo/username admin # kubectl exec -it mypod -- cat /etc/foo/password password
Secret 對象將重要性高的祕鑰和 Pod 進行了解耦處理。
它有以下特色:
官方安全建議:
微信公衆號:zuolinux_com