使用 kubectl 管理 Secret

使用 kubectl 命令列建立 Secret 物件。

本頁面展示如何使用 kubectl 命令列工具建立、編輯、管理和刪除 Kubernetes Secret

準備工作

你需要一個 Kubernetes 叢集,並且 kubectl 命令列工具已配置為與你的叢集通訊。建議在至少有兩個不充當控制平面主機的節點的叢集上執行本教程。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用以下 Kubernetes 演練場之一

建立 Secret

Secret 物件儲存敏感資料,例如 Pod 用於訪問服務的憑據。例如,你可能需要一個 Secret 來儲存訪問資料庫所需的使用者名稱和密碼。

你可以透過在命令中傳遞原始資料,或者透過將憑據儲存在檔案中並透過命令傳遞檔案來建立 Secret。以下命令建立一個 Secret,其中儲存使用者名稱 admin 和密碼 S!B\*d$zDsb=

使用原始資料

執行以下命令:

kubectl create secret generic db-user-pass \
    --from-literal=username=admin \
    --from-literal=password='S!B\*d$zDsb='

你必須使用單引號 '' 來跳脫字元串中的特殊字元,例如 $\*=!。否則,你的 shell 將解釋這些字元。

使用原始檔

  1. 將憑據儲存在檔案中

    echo -n 'admin' > ./username.txt
    echo -n 'S!B\*d$zDsb=' > ./password.txt
    

    -n 標誌確保生成的檔案末尾沒有額外的換行符。這很重要,因為當 kubectl 讀取檔案並將內容編碼為 base64 字串時,額外的換行符也會被編碼。你不需要轉義包含在檔案中的字串中的特殊字元。

  2. kubectl 命令中傳遞檔案路徑

    kubectl create secret generic db-user-pass \
        --from-file=./username.txt \
        --from-file=./password.txt
    

    預設的鍵名是檔名。你可以選擇使用 --from-file=[key=]source 設定鍵名。例如:

    kubectl create secret generic db-user-pass \
        --from-file=username=./username.txt \
        --from-file=password=./password.txt
    

無論哪種方法,輸出都類似於:

secret/db-user-pass created

驗證 Secret

檢查 Secret 是否已建立

kubectl get secrets

輸出類似於:

NAME              TYPE       DATA      AGE
db-user-pass      Opaque     2         51s

檢視 Secret 的詳細資訊

kubectl describe secret db-user-pass

輸出類似於:

Name:            db-user-pass
Namespace:       default
Labels:          <none>
Annotations:     <none>

Type:            Opaque

Data
====
password:    12 bytes
username:    5 bytes

kubectl getkubectl describe 命令預設避免顯示 Secret 的內容。這是為了保護 Secret 免受意外暴露或儲存在終端日誌中。

解碼 Secret

  1. 檢視你建立的 Secret 的內容

    kubectl get secret db-user-pass -o jsonpath='{.data}'
    

    輸出類似於:

    { "password": "UyFCXCpkJHpEc2I9", "username": "YWRtaW4=" }
    
  2. 解碼 password 資料

    echo 'UyFCXCpkJHpEc2I9' | base64 --decode
    

    輸出類似於:

    S!B\*d$zDsb=
    
    kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
    

編輯 Secret

你可以編輯現有的 Secret 物件,除非它是不可變的。要編輯 Secret,請執行以下命令:

kubectl edit secrets <secret-name>

這將開啟你的預設編輯器,允許你更新 data 欄位中 base64 編碼的 Secret 值,例如以下示例:

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file, it will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
  password: UyFCXCpkJHpEc2I9
  username: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: "2022-06-28T17:44:13Z"
  name: db-user-pass
  namespace: default
  resourceVersion: "12708504"
  uid: 91becd59-78fa-4c85-823f-6d44436242ac
type: Opaque

清理

要刪除 Secret,請執行以下命令:

kubectl delete secret db-user-pass

下一步

上次修改時間:2023 年 10 月 24 日下午 2:54 PST:記錄使用 stringData 和伺服器端應用時遇到的問題 (920a68b536)