了解 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,變更才會生效。