k8s通過secret管理敏感信息


 

應用啟動過程中可能需要一些敏感信息,比如訪問數據庫的用戶名密碼或者秘鑰。將這些信息直接保存在容器鏡像中顯然不妥,Kubernetes 提供的解決方案是 Secret。

Secret 會以密文的方式存儲數據,避免了直接在配置文件中保存敏感信息。Secret 會以 Volume 的形式被 mount 到 Pod,容器可通過文件的方式使用 Secret 中的敏感數據;此外,容器也可以環境變量的方式使用這些數據。

Secret 可通過命令行或 YAML 創建。比如希望 Secret 中包含如下信息:

  1. 用戶名 admin

  2. 密碼 123456

1.創建 Secret方式

有四種方法創建 Secret:

1.1 通過 --from-literal

kubectl create secret generic mysecret --from-literal=username=admin --from-literal=password=123456

每個 --from-literal 對應一個信息條目。

1.2 通過 --from-file

echo -n admin > ./username
echo -n 123456 > ./password
kubectl create secret generic mysecret --from-file=./username --from-file=./password

每個文件內容對應一個信息條目。

1.3通過 --from-env-file

cat << EOF > env.txt
username=admin
password=123456
EOF
kubectl create secret generic mysecret --from-env-file=env.txt

文件 env.txt 中每行 Key=Value 對應一個信息條目。

1.4通過 YAML 配置文件:

文件中的敏感數據必須是通過 base64 編碼后的結果。

 

執行 kubectl apply 創建 Secret:

2.查看secret

2.1通過 kubectl get secret 查看存在的 secret

顯示有兩個數據條目

 

2.2通過kubectl describe secret 查看條目的 Key

 

2.3通過kubectl edit secret mysecret 查看vlaue

2.4通過base64將value反解碼

3.vloume方式secret的使用

Pod 可以通過 Volume 或者環境變量的方式使用 Secret,先學習 Volume 方式。

Pod 的配置文件如下所示:

① 定義 volume foo,來源為 secret mysecret

② 將 foo mount 到容器路徑 /etc/foo,可指定讀寫權限為 readOnly

 創建 Pod 並在容器中讀取 Secret:

 

可以看到,Kubernetes 會在指定的路徑 /etc/foo 下為每條敏感數據創建一個文件,文件名就是數據條目的 Key,這里是 /etc/foo/username 和 /etc/foo/password,Value 則以明文存放在文件中。

 我們也可以自定義存放數據的文件名,比如將配置文件改為:

 

這時數據將分別存放在 /etc/foo/my-group/my-username 和 /etc/foo/my-group/my-password 中。

以 Volume 方式使用的 Secret 支持動態更新:Secret 更新后,容器中的數據也會更新。

 將 password 更新為 abcdef,base64 編碼為 YWJjZGVm

4.環境變量中使用secret

 通過 Volume 使用 Secret,容器必須從文件讀取數據,會稍顯麻煩,Kubernetes 還支持通過環境變量使用 Secre

 創建 Pod 並讀取 Secret。

通過環境變量 SECRET_USERNAME 和 SECRET_PASSWORD 成功讀取到 Secret 的數據。

需要注意的是,環境變量讀取 Secret 很方便,但無法支撐 Secret 動態更新。

Secret 可以為 Pod 提供密碼、Token、私鑰等敏感數據;對於一些非敏感數據,比如應用的配置信息,則可以用 ConfigMap

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM