Secrets核心概念
有時我們不能直接將密碼資訊直接寫在程式碼內,像是資料庫帳號與密碼資訊,一但這寫敏感資訊一同被打包進Docker Images內,
其資訊就容易被公開出來 (上Docker Hub公有雲或是進版空)等等。
所以都會透過額外的方式,在專案啟動時,在輸入敏感資訊給專案這樣,於是K8S就提供了ConfigMaps
使用Secret要注意:
- 在cluster data中啟用encryption機制
- 限制etcd的權限存取,只允許administrator可以存取,因為secrets都儲存在k8s的etcd內
- 使用SSL/TLS作為etcd與其他請求者的傳輸協定,保障secret安全
- 儲存在secret (yaml/json檔案)只能是base64/encode的值!!!
創建Secret
1 | kubectl create secret generic [secret name] --from-literal=pwd=[password] |
也可以用檔案來創建
1 | kubectl create secret generic [secret name] --from-file=ssh-privatekey=~/.ssh/id_rsa --from-file=ssh-publickey=~/.ssh/id_rsa.pub |
以TLS方式
1 | kubectl create secret tls tls-secret --cert=[path to tls.cert] --key=[path to tls.key] |
也可以用yaml方式創建,但secret的值得用base64的值,比較不直觀...
(圖片來源: Pluralsight: Kubernetes for Developers: Core Concepts - ConfigMaps and Secrets)
取得secret
列出所有secrets
1 | kubectl get secrets |
以yaml方式取得指定的secret
1 | kubectl get secrets [db password] -o yaml |
以environment方式取得
以secretKeRef
參照secret的key/value
(圖片來源: Pluralsight: Kubernetes for Developers: Core Concepts - ConfigMaps and Secrets)
以Volume方式取得
也可以像configMaps那樣,將secrets以volumes方式儲存起來(每個key/value都會轉到file內)並供Pods使用
(圖片來源: Pluralsight: Kubernetes for Developers: Core Concepts - ConfigMaps and Secrets)
參考
- Kubernetes for Developers: Core Concepts - ConfigMaps and Secrets
- Kubernetes Secrets Best Practices