了解 Kubernetes 祕密

已完成

使用分散式應用程式時,最大的考量之一是如何管理敏感性資訊,例如密碼、連線和類似資料。 Kube 讓您使用稱為「祕密」的資源來保護此資料。

了解祕密

在 Kube 中,秘密可讓您用比在 Pod 和部署中的純文字格式更安全的方式儲存機密資訊。 祕密的設計目的為儲存密碼和其他敏感性資料。

Kube 祕密會以 Base64 格式編碼其資料。 雖然 Base64 不是加密演算法,但 Kube 可以看到資訊已編碼,而且可以從命令輸出隱藏此資訊,例如 kubectl describe。 此程序不會發生在純文字設定。 祕密會一律限定為單一命名空間,以避免增加敏感性資料暴露在叢集中的其他工作負載。

祕密的類型

有不同類型的祕密。 最常見且為預設的類型是 Opaque,其可保存使用者定義的任意資料。 其他常見類型包括:

  • kubernetes.io/service-account-token:定義服務帳戶權杖,且於建立新的服務帳戶時自動建立。
  • kubernetes.io/basic-auth:用於基本驗證的認證。
  • kubernetes.io/tls:TLS 用戶端或伺服器資料,例如用於從輸入資源內提供 HTTPS 連線。

提示

如需詳細資訊,請參閱 KEDA 祕密官方文件

建立與使用祕密

根據官方 Kube 祕密文件,您可以三種不同的方式使用祕密:

  • 裝載為 Pod 或部署內部容器中的磁碟區檔案。
  • 參考為 Pod 或部署規格中的環境變數。
  • 透過 Pod 規格中的 imagePullSecret 金鑰從私人登錄提取映像時,由 Kubelet 使用。

如同任何其他 Kube 資源,您可使用 YAML 資訊清單檔或 kubectl 命令建立祕密。 祕密規格如下:

apiVersion: v1
kind: Secret
metadata:
  name: secret-name
  namespace: secret-namespace
type: Opaque
data:
  key_name: "key value in base64 format"

針對具有此規格的祕密,您必須先編碼值,然後才能建立祕密。 如果想要使用純文字值建立祕密並讓 Kube 自動將其編碼,請使用 stringData 而非 data

apiVersion: v1
kind: Secret
metadata:
  name: secret-name
  namespace: secret-namespace
type: Opaque
stringData:
  key_name: "key value in plain format"

應用程式會接收解碼秘密字串作為傳遞給它的值,而不是已編碼的值。

祕密更新

所有在 Pod 內裝載為磁碟區的祕密都會在其值變更後自動更新。 由於 Kubelet 設定,此變更可能不會立即發生,但會自動發生,因此不需要重新啟動 Pod。

在祕密繫結至環境變數的情況下,它們不會自動更新,因此必須重新啟動 Pod,變更才會生效。

檢定您的知識

1.

為什麼 Kubernetes 祕密比純文字值更安全?

2.

您要如何在應用程式中使用祕密?

3.

如何在祕密中使用 Base64?