1. Secret
1.1 Secret配置管理
Secret 對象類型用來保存敏感信息,例如密碼、OAuth 令牌和 ssh key
敏感信息放在 secret 中比放在 Pod 的定義或者容器鏡像中來說更加安全和靈活
Pod 可以用兩種方式使用 secret:
- 作爲 volume 中的文件被掛載到 pod 中的一個或者多個容器裏
- 當 kubelet 爲 pod 拉取鏡像時使用
secret的類型: - Service Account:Kubernetes 自動創建包含訪問 API 憑據的 secret,並自動修改pod 以使用此類型的 secret
- Opaque:使用base64編碼存儲信息,可以通過base64 --decode解碼獲得原始數據,因此安全性弱
- kubernetes.io/dockerconfigjson:用於存儲docker registry的認證信息
serviceaccout 創建時 Kubernetes 會默認創建對應的 secret。對應的 secret 會自動掛載到Pod 的 /run/secrets/kubernetes.io/serviceaccount 目錄中
kubectl exec nginx -- ls /var/run/secrets/kubernetes.io/serviceaccount
每個namespace下有一個名爲default的默認的ServiceAccount對象
kubectl get Secret
ServiceAccount裏有一個名爲Tokens的可以作爲Volume一樣被Mount到Pod裏的Secret,當Pod啓動時這個Secret會被自動Mount到Pod的指定目錄下,用來協助完成Pod中的進程訪問API Server時的身份鑑權過程
kubectl get pods -o yaml
Opaque Secret 其value爲base64編碼後的值
從文件中創建Secret
如果密碼具有特殊字符,則需要使用 \ 字符對其進行轉義
默認情況下 kubectl get和kubectl describe 爲了安全是不會顯示密碼的內容,可以通過以下方式查看
1.2 練習
編寫一個 secret 對象
vim mysecret.yaml
kubectl create -f mysecret.yaml
將Secret掛載到Volume中
vim secret1.yaml
kubectl create -f secret1.yaml
kubectl exec mysecret -- cat /secret/password
向指定路徑映射 secret 密鑰
vim secret2.yaml
將Secret設置爲環境變量
vim secret-env.yaml
kubectl create -f secret-env.yaml
kubectl exec secret-env env