Kubernetes - Secret 學習紀錄

Posted by Kubeguts on 2021-05-22

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的值,比較不直觀...

pic01

(圖片來源: 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

pic03

(圖片來源: Pluralsight: Kubernetes for Developers: Core Concepts - ConfigMaps and Secrets)

以Volume方式取得

也可以像configMaps那樣,將secrets以volumes方式儲存起來(每個key/value都會轉到file內)並供Pods使用
pic04

(圖片來源: Pluralsight: Kubernetes for Developers: Core Concepts - ConfigMaps and Secrets)

參考