‣
概要
Secret 用來設定 k8s 中的敏感資訊,來避免創建 Pod 暴露資訊在歷史進程。
Secret 有區分 namespace
通常用在以下場景
- Pod 內 Container 的環境變量
- Pod 內 SSH 密鑰或密碼等敏感資訊
- 允許 kubelet 在私有 image registry 拉取鏡像
Secret 默認情況下是非加密的儲存在 etcd 中,任何可以訪問 etcd 的都有權限可以修改
所以如果要安全使用 Secret ,請使用以下步驟
- Secret 啟用靜態加密
- Secret 使用最小權限來訪問
- 限制 Secret 對特定容器的存取
- 考慮使用外部 Secret
如果沒有設定不可更改 (immutable: true),修改 Secret 後,引用的 Pod 不必重啟就會重新新設定
類型
Secret 居分以下類型
Opaque | 用戶定義的任意數據 (預設) |
kubernetes.io/service-account-token | 服務帳號 token |
kubernetes.io/dockercfg | ~/.dockercfg 文件 |
kubernetes.io/dockerconfigjson | ~/.docker/config.json 文件 |
kubernetes.io/basic-auth | 基本身份驗證 |
kubernetes.io/ssh-auth | SSH 身份驗證 |
kubernetes.io/tls | TLS 相關配置 |
bootstrap.kubernetes.io/token | 啟動引導令牌数据 |
配置
定義
範例
在 Pod 中使用 Secret 設置 Volume
在 Pod 中使用 Secret 宣告環境變量
替代方案
- 如果雲服務要訪問在同一 k8s 叢集中的應用,身分驗設可以使用 ServiceAccount
- 身分驗證 可以使用 CertificateSigningRequest 來為 Pod 簽發證書
- 使用 設備 Plugin 將 node 加密硬件暴露給特定 Pod
- 第三方工具