全部產品
Search
文件中心

Container Service for Kubernetes:使用Secret分發憑據

更新時間:Dec 24, 2025

公司專屬應用程式部署時需管理資料庫密碼、API 金鑰等敏感資訊。若直接寫入程式碼在代碼中,將導致嚴重的安全風險和泄露隱患。保密字典(Secret)提供加密儲存機制,實現敏感性資料與應用代碼的完全分離,避免因代碼泄露引發安全事故。

選型參考

使用方式

特性

適用情境

資料卷掛載(推薦)

通過檔案許可權隔離,避免進程間暴露。檔案內容自動同步。

推薦用於生產環境,尤其適合資料庫密碼、API 金鑰等高敏感資訊,需要細粒度檔案許可權控制的情境。

環境變數注入

環境變數易被所有進程訪問,存在日誌泄露風險。配置更新需要重啟Pod才會生效。

簡單快速的配置注入,適用於記錄層級、服務地址的配置,或已適配環境變數的舊應用。

建立保密字典(Secret)

控制台

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇組態管理 > 保密字典

  3. 保密字典頁面,選擇所屬命名空間(default)後,單擊右上方的建立,在彈出面板中配置新的保密字典。

    • 名稱:nginx-secret

    • 類型:Opaque

      • Opaque:base64編碼格式的Secret,用來儲存密碼、認證等敏感資訊。

      • 私人鏡像倉庫登入密鑰,用於儲存私人鏡像倉庫認證資訊。

      • TLS認證,用於儲存 TLS/SSL 憑證與私密金鑰。

    • 添加/刪除密鑰資料:

      • username:admin

      • password:'MySecurePassword!'

      • api-key:'ak-1234567890abcdef'

      若輸入保密字典的明文資料,請選中對資料值進行base64編碼

kubectl

  1. 通過kubectl工具串連叢集

  2. 建立Secret。

    kubectl create secret generic nginx-secret \
      --from-literal=username=admin \
      --from-literal=password='MySecurePassword!' \
      --from-literal=api-key='ak-1234567890abcdef' \
      -n default
  3. 查看 Secret 相關資訊。

    kubectl get secret nginx-secret

    預期輸出:

    NAME           TYPE     DATA   AGE
    nginx-secret   Opaque   3      23h

使用保密字典(Secret)

使用保密字典時,Deployment 應用和保密字典必須位於同一命名空間內。

方式一:資料卷掛載

Secret通過檔案掛載安全訪問敏感性資料(認證、私密金鑰、設定檔),應用像訪問本地檔案一樣讀取。

控制台配置

  1. 建立Deployment應用。

    若已有Deployment應用,選擇工作負載 > 無狀態,按照以下樣本編輯應用修改容器配置的資料卷。
    1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

    2. 建立無狀態工作負載Deployment。

      1. 無狀態頁面,單擊使用鏡像建立

      2. 應用基本資料設定精靈頁面,設定應用的基本資料。然後單擊下一步,進入容器配置嚮導頁面。

        • 應用程式名稱:nginx-volume-demo

        • 命名空間:default

        • 副本數量:2

        • 類型:無狀態(Deployment)

      3. 容器配置。

        1. 容器配置頁簽,配置鏡像名稱連接埠

          • 鏡像名:anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

          • 容器連接埠:80,協議為TCP。

          重要

          拉取此鏡像前,叢集需具備公網訪問能力。若在建立叢集時已勾選為專用網路配置 SNAT(預設開啟),則無需額外配置。否則,請參見為叢集開啟訪問公網的能力進行設定。

        2. 容器配置頁簽,在資料卷地區,單擊增加本機存放區

          • 儲存卷類型保密字典

          • 名稱secret-volume

          • 掛載源已建立的保密字典,如nginx-secret

          • 容器路徑:指定掛載到容器內的這個路徑,如/etc/nginx/secrets。

          配置好相應資訊後,單擊下一步

      4. 進階配置頁面,按需設定訪問、伸縮、調度和標籤註解後,單擊最下方的建立

      5. 建立完成頁面,查看應用任務。

        建立應用任務已提交面板,單擊查看應用詳情查看容器狀態是否為Running

  2. 驗證Secret檔案是否掛載成功。

    選擇需要登入的容器(例如nginx-volume-demo-7xxxxxx****),單擊操作列的終端,選擇nginx登入容器。

    1. 驗證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
    2. 驗證檔案內容是否正確。

      cat /etc/nginx/secrets/db-username.txt
      cat /etc/nginx/secrets/api-key.txt

      預期輸出:

      admin
      ak-1234567890abcdef

    輸出內容與保密字典配置一致,表明資料卷掛載方式已成功使應用訪問到 Secret 資料。

kubectl配置

  1. 建立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
    
  2. 建立Deployment應用,使用保密字典。

    kubectl apply -f nginx-volume-demo.yaml
  3. 查看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
  4. 驗證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
  5. 驗證檔案內容是否正確。

    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),實現配置與代碼分離,提高應用安全性和可移植性。

控制台配置

  1. 建立Deployment應用。

    若已有Deployment應用,選擇工作負載 > 無狀態,按照以下樣本編輯應用修改容器配置的環境變數。
    1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

    2. 建立無狀態工作負載Deployment。

      1. 無狀態頁面,單擊使用鏡像建立

      2. 應用基本資料設定精靈頁面,設定應用的基本資料。然後單擊下一步,進入容器配置嚮導頁面。

        • 應用程式名稱:nginx-env-demo

        • 命名空間:default

        • 副本數量:2

        • 類型:無狀態(Deployment)

      3. 容器配置。

        1. 容器配置頁簽,配置鏡像名稱連接埠

          • 設定鏡像名:anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

          • 設定容器連接埠:80,協議為TCP

          重要

          拉取此鏡像前,叢集需具備公網訪問能力。若在建立叢集時已勾選為專用網路配置 SNAT(預設開啟),則無需額外配置。否則,請參見為叢集開啟訪問公網的能力進行設定。

        2. 容器配置頁簽,在環境變數地區,單擊新增

          • 類型保密字典

          • 名稱USERNAME

          • 變數/變數引用選擇來源,已建立的保密字典(如nginx-secret),然後為其每個 key 指定對應的環境變數名。

          配置好相應資訊後,單擊下一步

      4. 進階配置頁面,按需設定訪問、伸縮、調度和標籤註解後,單擊最下方的建立

      5. 建立完成頁面,查看應用任務。

        建立應用任務已提交面板,單擊查看應用詳情查看容器狀態是否為Running

  2. 驗證環境變數是否注入成功。

    選擇需要登入的容器(例如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配置

  1. 建立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
    
  2. 建立Deployment應用,使用保密字典。

    kubectl apply -f nginx-env-demo.yaml
  3. 查看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
  4. 驗證環境變數是否注入成功。

    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)

保密字典建立完成後,可以在保密字典頁面進行以下操作:

操作

說明

查看保密字典

單擊目標保密字典名稱,可查看該保密字典的基本資料和詳細資料。

編輯保密字典

單擊操作列的編輯,可修改該保密字典的資訊。

重要

修改使用中的保密字典,可能導致應用服務中斷。請謹慎操作。

刪除保密字典

單擊操作列的刪除,可刪除不需要的保密字典。

重要

叢集建立時,在kube-system 和 kube-public 命名空間下自動產生的保密字典,請勿刪除,如Service Account等。

相關文檔