作为技术支持工程师,Kubernetes Secrets 的敏感数据存储方案通常遵循以下步骤:
-
创建 Secret
- 使用
kubectl create secret generic
命令或 YAML 文件定义 Secret。例如:kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=123456
- 或通过 base64 编码手动生成 YAML:
apiVersion: v1 kind: Secret metadata: name: my-secret type: Opaque data: username: YWRtaW4= # base64 编码值 password: MTIzNDU2
- 使用
-
挂载 Secret 到 Pod
- 在 Pod 配置中通过 Volume 或环境变量引用 Secret:
volumes: - name: secret-volume secret: secretName: my-secret containers: - env: - name: DB_PASSWORD valueFrom: secretKeyRef: name: my-secret key: password
- 在 Pod 配置中通过 Volume 或环境变量引用 Secret:
-
启用静态加密(可选)
- 在 API Server 配置中启用
EncryptionConfiguration
,使用 AES-CBC 或 KMS 提供商加密 etcd 中的 Secret 数据。
- 在 API Server 配置中启用
-
限制访问权限
- 通过 RBAC 限制 ServiceAccount 对 Secret 的访问:
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: secret-reader rules: - resources: ["secrets"] verbs: ["get"] resourceNames: ["my-secret"]
- 通过 RBAC 限制 ServiceAccount 对 Secret 的访问:
-
定期轮换与监控
- 使用
kubectl rollout restart
更新 Secret 后重启相关 Pod,并集成监控工具(如 Prometheus)检测异常访问。
- 使用
注意:避免在日志/代码中明文暴露 Secret,优先使用 Volume 挂载而非环境变量。