使用配置檔案管理 Secret

使用資源配置檔案建立 Secret 物件。

準備工作

你必須擁有一個 Kubernetes 叢集,並且 kubectl 命令列工具必須配置為與你的叢集通訊。建議在至少有兩個不作為控制平面主機的節點組成的叢集上執行本教程。如果你還沒有叢集,你可以使用 minikube 建立一個,或者你可以使用這些 Kubernetes 試驗場之一。

建立 Secret

你可以先以 JSON 或 YAML 格式在清單中定義 Secret 物件,然後建立該物件。 Secret 資源包含兩個對映:datastringDatadata 欄位用於儲存使用 base64 編碼的任意資料。stringData 欄位是為了方便起見而提供的,它允許你提供未編碼的字串形式的相同資料。 datastringData 的鍵必須由字母數字字元、-_. 組成。

以下示例使用 data 欄位在 Secret 中儲存兩個字串。

  1. 將字串轉換為 base64

    echo -n 'admin' | base64
    echo -n '1f2d1e2e67df' | base64
    

    輸出類似於:

    YWRtaW4=
    MWYyZDFlMmU2N2Rm
    
  2. 建立清單

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque
    data:
      username: YWRtaW4=
      password: MWYyZDFlMmU2N2Rm
    

    請注意,Secret 物件的名稱必須是有效的 DNS 子域名

  3. 使用 kubectl apply 建立 Secret

    kubectl apply -f ./secret.yaml
    

    輸出類似於:

    secret/mysecret created
    

要驗證 Secret 是否已建立並解碼 Secret 資料,請參閱使用 kubectl 管理 Secret

建立 Secret 時指定未編碼的資料

在某些場景下,你可能希望使用 stringData 欄位。該欄位允許你將非 base64 編碼的字串直接放入 Secret 中,當 Secret 建立或更新時,該字串將為你編碼。

一個實際的例子是,當你部署一個使用 Secret 儲存配置檔案的應用程式時,你希望在部署過程中填充該配置檔案的一部分。

例如,如果你的應用程式使用以下配置檔案:

apiUrl: "https://my.api.com/api/v1"
username: "<user>"
password: "<password>"

你可以使用以下定義將其儲存在 Secret 中:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
stringData:
  config.yaml: |
    apiUrl: "https://my.api.com/api/v1"
    username: <user>
    password: <password>    

當你檢索 Secret 資料時,該命令返回編碼後的值,而不是你在 stringData 中提供的明文值。

例如,如果你執行以下命令:

kubectl get secret mysecret -o yaml

輸出類似於:

apiVersion: v1
data:
  config.yaml: YXBpVXJsOiAiaHR0cHM6Ly9teS5hcGkuY29tL2FwaS92MSIKdXNlcm5hbWU6IHt7dXNlcm5hbWV9fQpwYXNzd29yZDoge3twYXNzd29yZH19
kind: Secret
metadata:
  creationTimestamp: 2018-11-15T20:40:59Z
  name: mysecret
  namespace: default
  resourceVersion: "7225"
  uid: c280ad2e-e916-11e8-98f2-025000000001
type: Opaque

同時指定 datastringData

如果你在 datastringData 中都指定了一個欄位,則使用 stringData 中的值。

例如,如果你定義以下 Secret:

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
data:
  username: YWRtaW4=
stringData:
  username: administrator

Secret 物件建立如下:

apiVersion: v1
data:
  username: YWRtaW5pc3RyYXRvcg==
kind: Secret
metadata:
  creationTimestamp: 2018-11-15T20:46:46Z
  name: mysecret
  namespace: default
  resourceVersion: "7579"
  uid: 91460ecb-e917-11e8-98f2-025000000001
type: Opaque

YWRtaW5pc3RyYXRvcg== 解碼為 administrator

編輯 Secret

要編輯使用清單建立的 Secret 中的資料,請修改清單中的 datastringData 欄位,然後將檔案應用到叢集。你可以編輯現有的 Secret 物件,除非它不可變

例如,如果你想將前面示例中的密碼更改為 birdsarentreal,請執行以下操作:

  1. 編碼新密碼字串

    echo -n 'birdsarentreal' | base64
    

    輸出類似於:

    YmlyZHNhcmVudHJlYWw=
    
  2. 使用新密碼字串更新 data 欄位

    apiVersion: v1
    kind: Secret
    metadata:
      name: mysecret
    type: Opaque
    data:
      username: YWRtaW4=
      password: YmlyZHNhcmVudHJlYWw=
    
  3. 將清單應用到你的叢集

    kubectl apply -f ./secret.yaml
    

    輸出類似於:

    secret/mysecret configured
    

Kubernetes 會更新現有的 Secret 物件。具體而言,kubectl 工具會注意到存在同名的 Secret 物件。kubectl 會獲取現有物件,規劃對其的更改,並將更改後的 Secret 物件提交給你的叢集控制平面。

如果你指定了 kubectl apply --server-sidekubectl 會改為使用伺服器端應用

清理

要刪除你建立的 Secret

kubectl delete secret mysecret

下一步

最後修改於 2023 年 10 月 9 日太平洋標準時間晚上 9:53:更新 managing-secret-using-config-file.md (cf83760309)