Sealed Secrets 入门教程:Kubernetes 密钥安全管理实践
2025-07-07 01:44:48作者:卓艾滢Kingsley
前言
在现代云原生应用中,密钥管理一直是个棘手的问题。Sealed Secrets 项目提供了一种创新的解决方案,它允许开发者将 Kubernetes Secret 加密后安全地存储在代码仓库中,实现真正的 GitOps 工作流。
核心概念
Sealed Secrets 由两个关键组件组成:
- 集群端控制器:运行在 Kubernetes 集群中,负责解密 SealedSecret 对象
- 客户端工具 kubeseal:用于本地加密 Secret 并生成 SealedSecret
这种设计实现了"一次加密,集群解密"的安全模型,确保敏感信息不会在版本控制系统中暴露。
环境准备
在开始前,请确保满足以下条件:
- 运行中的 Kubernetes 集群(v1.16+)
- 已安装配置好 kubectl 命令行工具
- 可选:Helm(v3.1.0+)用于控制器安装
安装部署
1. 安装控制器
使用 Helm 安装(推荐)
helm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets
helm install sealed-secrets-controller sealed-secrets/sealed-secrets \
--set namespace=kube-system
使用原生 YAML 安装
kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.21.0/controller.yaml
验证安装
kubectl get pods -n kube-system -l name=sealed-secrets-controller
2. 安装 kubeseal 客户端
macOS 用户
brew install kubeseal
Linux 用户
wget https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.21.0/kubeseal-0.21.0-linux-amd64.tar.gz
tar -xvzf kubeseal-0.21.0-linux-amd64.tar.gz kubeseal
sudo install -m 755 kubeseal /usr/local/bin/kubeseal
使用实践
基础加密流程
- 创建原始 Secret
echo -n "my-secret-value" | kubectl create secret generic my-secret \
--dry-run=client --from-file=secret.txt=/dev/stdin -o json > secret.json
- 加密为 SealedSecret
kubeseal -f secret.json -w sealed-secret.json
- 部署到集群
kubectl apply -f sealed-secret.json
高级功能
命名空间约束
kubeseal --scope namespace-wide -f secret.json -w sealed-secret.json
集群范围约束
kubeseal --scope cluster-wide -f secret.json -w sealed-secret.json
最佳实践
- 密钥轮换:定期轮换加密证书(控制器启动时自动生成)
- 审计日志:启用控制器审计日志记录所有解密操作
- RBAC 控制:严格控制对 SealedSecret 资源的访问权限
- 密钥备份:备份控制器私钥以防数据丢失
常见问题
Q:SealedSecret 可以在不同集群间共享吗? A:不可以,每个集群的控制器使用唯一的加密密钥。
Q:如何更新已部署的 Secret? A:修改原始 Secret 文件后重新执行加密流程即可。
Q:控制器私钥丢失怎么办? A:所有 SealedSecret 将无法解密,必须重新创建。
总结
Sealed Secrets 为 Kubernetes 密钥管理提供了优雅的解决方案,通过将敏感信息加密后安全存储在版本控制系统中,完美支持了 GitOps 工作流。本文介绍了从安装到使用的完整流程,帮助开发者快速上手这一实用工具。