如何使用secret傳參數給kubernetes的pod
王俊城 Anderson Wang
- 精誠資訊/恆逸教育訓練中心-資深講師
- 技術分類:虛擬化應用
kubernetes的最小單位是pod,預設情況下,一個pod內只有一個container。

Run-time的時候,pod的參數有幾種方式取得
- Container image的預設值
- Run-time透過 --env 參數傳入
- Run-time使用 configMAP 傳入
- Run-time使用 secret 傳入
只有secret可以將參數,透過base64 encode/decode方式,增加傳遞參數的安全性。
先將要傳遞給pod的帳號及密碼,使用base64 encode編碼
[root@master ~]# echo -n "root" | base64 cm9vdA== [root@master ~]# echo -n "pass1234" | base64 cGFzczEyMzQ=
將base64 encode編碼之後的內容,寫到YAML檔案
[root@master ~]# vi my-secret.yaml [root@master ~]# cat my-secret.yaml apiVersion: v1 kind: Secret metadata: name: demo-secret-from-yaml type: Opaque data: username: cm9vdA== password: cGFzczEyMzQ=
建立secret
[root@master ~]# kubectl apply -f my-secret.yaml secret/demo-secret-from-yaml created [root@master ~]# kubectl get secrets demo-secret-from-yaml NAME TYPE DATA AGE demo-secret-from-yaml Opaque 2 83s [root@master ~]# kubectl describe secrets demo-secret-from-yaml Name: demo-secret-from-yaml Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== password: 8 bytes username: 4 bytes
pod透過environment,接收secret傳遞的參數
[root@master ~]# vi my-pod.yaml [root@master ~]# cat my-pod.yaml apiVersion: v1 kind: Pod metadata: name: my-pod labels: app: webserver spec: containers: - name: nginx image: nginx ports: - containerPort: 3000 env: - name: SECRET_USERNAME valueFrom: secretKeyRef: name: demo-secret-from-yaml key: username - name: SECRET_PASSWORD valueFrom: secretKeyRef: name: demo-secret-from-yaml key: password
建立pod,並檢查是否收到environment?
[root@master ~]# kubectl apply -f my-pod.yaml pod/my-pod created [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE my-pod 1/1 Running 0 47s [root@master ~]# kubectl exec -it my-pod -- /bin/bash root@my-pod:/app# root@my-pod:/app# env | grepSECRET SECRET_USERNAME=root SECRET_PASSWORD=pass1234 root@my-pod:/app# exit exit