Skip to content
返回部署

Kubernetes Secrets

存敏感数据(密码、token)base64 编码,挂载为环境或文件。

容器进阶

为什么

Secret 分离存储敏感数据与镜像和 ConfigMap。默认 base64 编码(非加密),可挂载为环境变量或文件。

Docker is used by 59% of professional developers per the Stack Overflow 2024 survey,Kubernetes 在生产中运行 60% 的容器化工作负载(CNCF 2024 调查)。容器编排通过声明式滚动发布将部署相关事故减少 35%。

何时使用

密码、API key、TLS 证书用 Secret。启用静态加密真正安全。

如何做

1. 创建 — kubectl create secret generic --from-literal 2. 从文件 — --from-file=tls.crt 3. 编码 — YAML 中 base64 值 4. 挂载 — env.valueFrom.secretKeyRef 或 volume 5. 加密 — 启用静态加密 6. 外部 — ExternalSecrets 或 Vault 7. 轮换 — 更新 secret,rollout restart

示例

# 创建 secret kubectl create secret generic db-secret --from-literal=password=supersecret --from-literal=user=admin # 或经 YAML(base64 编码) apiVersion: v1 kind: Secret metadata: { name: db-secret } type: Opaque data: password: c3VwZXJzZWNyZXQ= # "supersecret" 的 base64 user: YWRtaW4= # "admin" 的 base64 # deployment 中使用 spec: containers: - name: app env: - name: DB_PASSWORD valueFrom: { secretKeyRef: { name: db-secret, key: password } }

常见问题

  • ⚠Secret 未静态加密 — 仅 base64,etcd 启用加密
  • ⚠Secret 入 git — 永不提交 Secret YAML,用 sealed-secrets 或 ExternalSecrets
  • ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致

最佳实践

  • ✓启用静态加密 — etcd 中加密 secret,非仅 base64
  • ✓用 ExternalSecrets 或 Vault — secret 不入 git,外部管理
  • ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求

常见问题解答