公司專屬應用程式部署時需管理資料庫密碼、API 金鑰等敏感資訊。若直接寫入程式碼在代碼中,將導致嚴重的安全風險和泄露隱患。保密字典(Secret)提供加密儲存機制,實現敏感性資料與應用代碼的完全分離,避免因代碼泄露引發安全事故。
選型參考
使用方式 | 特性 | 適用情境 |
資料卷掛載(推薦) | 通過檔案許可權隔離,避免進程間暴露。檔案內容自動同步。 | 推薦用於生產環境,尤其適合資料庫密碼、API 金鑰等高敏感資訊,需要細粒度檔案許可權控制的情境。 |
環境變數注入 | 環境變數易被所有進程訪問,存在日誌泄露風險。配置更新需要重啟Pod才會生效。 | 簡單快速的配置注入,適用於記錄層級、服務地址的配置,或已適配環境變數的舊應用。 |
建立保密字典(Secret)
控制台
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在保密字典頁面,選擇所屬命名空間(default)後,單擊右上方的建立,在彈出面板中配置新的保密字典。
名稱:nginx-secret
類型:Opaque
Opaque:base64編碼格式的Secret,用來儲存密碼、認證等敏感資訊。
私人鏡像倉庫登入密鑰,用於儲存私人鏡像倉庫認證資訊。
TLS認證,用於儲存 TLS/SSL 憑證與私密金鑰。
添加/刪除密鑰資料:
username:admin
password:'MySecurePassword!'
api-key:'ak-1234567890abcdef'
若輸入保密字典的明文資料,請選中對資料值進行base64編碼。
kubectl
建立Secret。
kubectl create secret generic nginx-secret \ --from-literal=username=admin \ --from-literal=password='MySecurePassword!' \ --from-literal=api-key='ak-1234567890abcdef' \ -n default查看 Secret 相關資訊。
kubectl get secret nginx-secret預期輸出:
NAME TYPE DATA AGE nginx-secret Opaque 3 23h
使用保密字典(Secret)
使用保密字典時,Deployment 應用和保密字典必須位於同一命名空間內。
方式一:資料卷掛載
Secret通過檔案掛載安全訪問敏感性資料(認證、私密金鑰、設定檔),應用像訪問本地檔案一樣讀取。
控制台配置
建立Deployment應用。
若已有Deployment應用,選擇,按照以下樣本編輯應用修改容器配置的資料卷。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
建立無狀態工作負載Deployment。
在無狀態頁面,單擊使用鏡像建立。
在應用基本資料設定精靈頁面,設定應用的基本資料。然後單擊下一步,進入容器配置嚮導頁面。
應用程式名稱:nginx-volume-demo
命名空間:default
副本數量:2
類型:無狀態(Deployment)
容器配置。
在容器配置頁簽,配置鏡像名稱和連接埠。
鏡像名:
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6容器連接埠:80,協議為TCP。
重要拉取此鏡像前,叢集需具備公網訪問能力。若在建立叢集時已勾選為專用網路配置 SNAT(預設開啟),則無需額外配置。否則,請參見為叢集開啟訪問公網的能力進行設定。
在容器配置頁簽,在資料卷地區,單擊增加本機存放區。
儲存卷類型:保密字典
名稱:secret-volume
掛載源:已建立的保密字典,如nginx-secret。
容器路徑:指定掛載到容器內的這個路徑,如/etc/nginx/secrets。
配置好相應資訊後,單擊下一步。
在進階配置頁面,按需設定訪問、伸縮、調度和標籤註解後,單擊最下方的建立。
在建立完成頁面,查看應用任務。
在建立應用任務已提交面板,單擊查看應用詳情,查看容器狀態是否為
Running。
驗證Secret檔案是否掛載成功。
選擇需要登入的容器(例如nginx-volume-demo-7xxxxxx****),單擊操作列的終端,選擇nginx登入容器。
驗證Secret檔案是否掛載成功。
ls -la /etc/nginx/secrets預期輸出:
total 4 drwxrwxrwt 3 root root 140 Sep 15 02:31 . drwxr-xr-x 1 root root 4096 Sep 15 02:31 .. drwxr-xr-x 2 root root 100 Sep 15 02:31 ..2025_09_15_02_31_13.2599431463 lrwxrwxrwx 1 root root 32 Sep 15 02:31 ..data -> ..2025_09_15_02_31_13.2599431463 lrwxrwxrwx 1 root root 18 Sep 15 02:31 api-key.txt -> ..data/api-key.txt lrwxrwxrwx 1 root root 22 Sep 15 02:31 db-password.txt -> ..data/db-password.txt lrwxrwxrwx 1 root root 22 Sep 15 02:31 db-username.txt -> ..data/db-username.txt驗證檔案內容是否正確。
cat /etc/nginx/secrets/db-username.txt cat /etc/nginx/secrets/api-key.txt預期輸出:
admin ak-1234567890abcdef
輸出內容與保密字典配置一致,表明資料卷掛載方式已成功使應用訪問到 Secret 資料。
kubectl配置
建立nginx-volume-demo.yaml。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-volume-demo namespace: default labels: app: nginx-volume spec: replicas: 2 selector: matchLabels: app: nginx-volume template: metadata: labels: app: nginx-volume spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 protocol: TCP # 掛載Secret卷 volumeMounts: - name: secret-volume mountPath: /etc/nginx/secrets readOnly: true volumes: - name: secret-volume secret: secretName: nginx-secret # 設定檔案許可權 defaultMode: 0644 # 可選:自訂檔案名稱映射 items: - key: username path: db-username.txt - key: password path: db-password.txt - key: api-key path: api-key.txt建立Deployment應用,使用保密字典。
kubectl apply -f nginx-volume-demo.yaml查看Pod狀態。
kubectl get pods -l app=nginx-volume -n default預期輸出:
NAME READY STATUS RESTARTS AGE nginx-volume-demo-7db46895bc-c98b5 1/1 Running 0 4h20m nginx-volume-demo-7db46895bc-pc6qg 1/1 Running 0 4h20m驗證Secret檔案是否掛載成功。
kubectl exec deployment/nginx-volume-demo -n default -- ls -la /etc/nginx/secrets預期輸出:
total 4 drwxrwxrwt 3 root root 140 Sep 15 02:31 . drwxr-xr-x 1 root root 4096 Sep 15 02:31 .. drwxr-xr-x 2 root root 100 Sep 15 02:31 ..2025_09_15_02_31_13.2599431463 lrwxrwxrwx 1 root root 32 Sep 15 02:31 ..data -> ..2025_09_15_02_31_13.2599431463 lrwxrwxrwx 1 root root 18 Sep 15 02:31 api-key.txt -> ..data/api-key.txt lrwxrwxrwx 1 root root 22 Sep 15 02:31 db-password.txt -> ..data/db-password.txt lrwxrwxrwx 1 root root 22 Sep 15 02:31 db-username.txt -> ..data/db-username.txt驗證檔案內容是否正確。
kubectl exec deployment/nginx-volume-demo -n default -- cat /etc/nginx/secrets/db-username.txt kubectl exec deployment/nginx-volume-demo -n default -- cat /etc/nginx/secrets/api-key.txt預期輸出:
admin ak-1234567890abcdef輸出內容與保密字典配置一致,表明資料卷掛載方式已成功使應用訪問到 Secret 資料。
方式二:環境變數注入
Secret通過環境變數安全注入敏感性資料(密碼、API密鑰、Token),實現配置與代碼分離,提高應用安全性和可移植性。
控制台配置
建立Deployment應用。
若已有Deployment應用,選擇,按照以下樣本編輯應用修改容器配置的環境變數。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
建立無狀態工作負載Deployment。
在無狀態頁面,單擊使用鏡像建立。
在應用基本資料設定精靈頁面,設定應用的基本資料。然後單擊下一步,進入容器配置嚮導頁面。
應用程式名稱:nginx-env-demo
命名空間:default
副本數量:2
類型:無狀態(Deployment)
容器配置。
在容器配置頁簽,配置鏡像名稱和連接埠。
設定鏡像名:
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6設定容器連接埠:80,協議為TCP
重要拉取此鏡像前,叢集需具備公網訪問能力。若在建立叢集時已勾選為專用網路配置 SNAT(預設開啟),則無需額外配置。否則,請參見為叢集開啟訪問公網的能力進行設定。
在容器配置頁簽,在環境變數地區,單擊新增。
類型:保密字典
名稱:
USERNAME。變數/變數引用:選擇來源,已建立的保密字典(如nginx-secret),然後為其每個 key 指定對應的環境變數名。
配置好相應資訊後,單擊下一步。
在進階配置頁面,按需設定訪問、伸縮、調度和標籤註解後,單擊最下方的建立。
在建立完成頁面,查看應用任務。
在建立應用任務已提交面板,單擊查看應用詳情,查看容器狀態是否為
Running。
驗證環境變數是否注入成功。
選擇需要登入的容器(例如nginx-env-demo-7xxxxxx****),單擊操作列的終端,選擇nginx登入容器。
env | grep -E 'DB_|API_|NGINX_'預期輸出:
API_KEY=ak-1234567890abcdef NGINX_api-key=ak-1234567890abcdef NGINX_password=MySecurePassword! NGINX_username=admin DB_USERNAME=admin DB_PASSWORD=MySecurePassword!輸出內容與保密字典配置一致,表明環境變數注入方式已成功使應用訪問到 Secret 資料。
kubectl配置
建立nginx-env-demo.yaml。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-env-demo namespace: default labels: app: nginx-env spec: replicas: 2 selector: matchLabels: app: nginx-env template: metadata: labels: app: nginx-env spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 protocol: TCP # 單個Secret索引值注入 env: - name: DB_USERNAME valueFrom: secretKeyRef: name: nginx-secret key: username - name: DB_PASSWORD valueFrom: secretKeyRef: name: nginx-secret key: password - name: API_KEY valueFrom: secretKeyRef: name: nginx-secret key: api-key # 批量注入所有Secret索引值(可選) envFrom: - prefix: NGINX_ secretRef: name: nginx-secret建立Deployment應用,使用保密字典。
kubectl apply -f nginx-env-demo.yaml查看Pod狀態.
kubectl get pods -l app=nginx-env -n default預期輸出:
NAME READY STATUS RESTARTS AGE nginx-env-demo-6dc7556d9-6pjhj 1/1 Running 0 3h33m nginx-env-demo-6dc7556d9-rcqsh 1/1 Running 0 3h33m驗證環境變數是否注入成功。
kubectl exec deployment/nginx-env-demo -n default -- env | grep -E 'DB_|API_|NGINX_'預期輸出:
API_KEY=ak-1234567890abcdef NGINX_api-key=ak-1234567890abcdef NGINX_password=MySecurePassword! NGINX_username=admin DB_USERNAME=admin DB_PASSWORD=MySecurePassword!輸出內容與保密字典配置一致,表明環境變數注入方式已成功使應用訪問到 Secret 資料。
管理保密字典(Secret)
保密字典建立完成後,可以在保密字典頁面進行以下操作:
操作 | 說明 |
查看保密字典 | 單擊目標保密字典名稱,可查看該保密字典的基本資料和詳細資料。 |
編輯保密字典 | 單擊操作列的編輯,可修改該保密字典的資訊。 重要 修改使用中的保密字典,可能導致應用服務中斷。請謹慎操作。 |
刪除保密字典 | 單擊操作列的刪除,可刪除不需要的保密字典。 重要 叢集建立時,在 |
相關文檔
Pod異常問題排查,查看Pod異常的診斷流程、排查方法、常見問題及對應的解決方案。
建立無狀態工作負載Deployment,查看如何在ACK叢集中通過控制台及kubectl建立無狀態應用。
Kubernetes 官方文檔保密字典,查看更多關於保密字典的資訊。