密鑰

本頁面說明 Kubernetes 的 Secret (密鑰) 物件及其在 Google Kubernetes Engine 中的用途。

什麼是密鑰?

密鑰是安全性物件,會在您的叢集裡儲存機密資料,例如密碼、OAuth 憑證和 SSH 金鑰等。將機密資料儲存在密鑰裡,比儲存在明文 ConfigMaps 或 Pod 規格中更為安全。使用密鑰可讓您控管機密資料的使用方式,並降低未授權使用者看到資料的風險。

您也可以使用您在 Cloud KMS 中管理的密鑰,在應用程式層加密密鑰。詳情請參閱應用程式層密鑰加密

建立密鑰

請使用下列指令建立密鑰:

kubectl create secret [TYPE] [NAME] [DATA]

[TYPE] 可以是下列其中一項:

  • generic:從本機檔案、目錄或文字值建立密鑰。
  • docker-registry:建立搭配 Docker Registry 使用的 dockercfg 密鑰,用於驗證 Docker Registry。
  • tls:從特定的公開/私密金鑰組建立 TLS 密鑰。該公開/私密金鑰組必須事先存在。公開金鑰憑證必須是 .PEM 編碼並符合指定的私密金鑰。

大多數的密鑰使用 generic 類型。

[DATA] 可以是下列其中一項:

  • 一個或多個設定檔所在目錄的路徑,以 --from-file--from-env-file 標記表示
  • 鍵/值組合,使用 --from-literal 標記指定每個組合

如要進一步瞭解 kubectl create,請參閱參考說明文件

或者,您也可以在 YAML 資訊清單檔案中定義密鑰物件,並使用 kubectl create -f [FILE] 來部署該物件,藉此建立密鑰。如需範例,請參閱使用密鑰安全地發佈憑證

依據檔案

要從一個或多個檔案建立機密,請使用 --from-file--from-env-file。該檔案必須是明文,但檔案的附檔名則不重要。

--from-file

使用 --from-file 建立密鑰時,密鑰的值是檔案的全部內容。如果您的密鑰值包含多個鍵/值組合,請改用 --from-env-file

您可以傳入一個或多個檔案:

kubectl create secret [TYPE] [NAME] --from-file [/PATH/TO/FILE] --from-file [/PATH/TO/FILE2]

您也可以傳入含有多個檔案的目錄:

kubectl create secret [TYPE] [NAME] --from-file [/PATH/TO/DIRECTORY]

例如,下面的指令從兩個檔案 (username.txtpassword.txt) 建立了一個名為 credentials 的密鑰,並將金鑰分別設為 username.txtpassword.txt

kubectl create secret generic credentials --from-file ./username.txt --from-file ./password.txt

密鑰值在 Kubernetes 中為 Base 64 編碼。

執行 kubectl get secret credentials -o yaml 會傳回下列輸出結果:

apiVersion: v1
data:
  password.txt: MTIzNAo=
  username.txt: YWRtaW4K
kind: Secret
metadata:
  creationTimestamp: ...
  name: credentials
  namespace: default
  resourceVersion: "2011810"
  selfLink: /api/v1/namespaces/default/secrets/credentials
  uid: ...
type: Opaque

預設情況下,金鑰為檔案名稱。您可以使用 --from-file 延伸語法來覆寫密鑰:

kubectl create secret [TYPE] [NAME] --from-file=KEY=[/PATH/TO/DIRECTORY]

以下範例與前一個範例相同,但其金鑰則設為 usernamepassword,而非使用檔案名稱。

kubectl create secret generic credentials --from-file=username=./username.txt --from-file=password=./password.txt

--from-env-file

若要將多個鍵/值組合載入到單一密鑰中,請將鍵/值組合儲存在一個或多個明文檔案中,並使用 --from-env-file 進行載入 (不要使用 --from-file)。您可以透過多次指定標記來載入多個檔案。--from-file 也適用同樣的限制

例如,以下指令會從單一檔案 credentials.txt 建立一個名為 credentials 的密鑰,其中包含多個鍵/值組合:

# Each of these key-value pairs is loaded into the Secret
username=jane
password=d7xnNss7EGCFZusG

在 Kubernetes 中的密鑰值為 base64 編碼。

kubectl create secret generic credentials --from-env-file ./credentials.txt

執行 kubectl get secret credentials -o yaml 會傳回下列輸出結果:

apiVersion: v1
data:
  credentials.txt:
    username: YWRtaW4K
    password: MTIzNA==
kind: Secret
metadata:
  creationTimestamp: ...
  name: credentials
  namespace: default
  resourceVersion: "2011810"
  selfLink: /api/v1/namespaces/default/secrets/credentials
  uid: ...
type: Opaque

限制

kubectl 會忽略符號連結、裝置和管道等非標準檔案,也會忽略子目錄;kubectl create secret 不會遞迴到子目錄。

依據文字值

如要透過文字值建立密鑰,請使用 --from-literal

例如,下列指令會使用兩個鍵/值組合,建立名為 literal-token 的一般密鑰:

kubectl create secret generic literal-token --from-literal user=admin --from-literal password=1234

您要為每一個鍵/值組合指定 --from-literal。這些值是自動 base64 編碼。

執行 kubectl get secret literal-token -o yaml 會傳回下列輸出結果:

apiVersion: v1
data:
  password: MTIzNA==
  user: YWRtaW4=
kind: Secret
metadata:
  creationTimestamp: ...
  name: literal-token
  namespace: default
  resourceVersion: "2012831"
  selfLink: /api/v1/namespaces/default/secrets/literal-token
  uid: ...
type: Opaque

在上述的輸出結果中,您會發現 passworduser 是 base64 編碼。base64 編碼可讓無法處理某些字元的應用程式和服務處理資訊。base64 編碼不提供安全防護。

使用密鑰

如要在您的工作負載使用密鑰,您可以指定參照密鑰值的環境變數,或掛接含有密鑰的磁碟區。

如要瞭解如何使用密鑰,請參閱使用密鑰

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件