Kubernetes secrets 就像你的浏览器历史记录一样秘密。它们以明文形式存储,任何有集群访问权限的人都可以查看,更不用说版本控制的噩梦了。引入 Sealed Secrets,这个加密向导将使你的敏感数据真正变得敏感。
为什么这很重要?
- 在进入版本控制之前加密你的秘密
- 在你的集群中自动解密它们
- 安心入睡,知道你的 API 密钥不会在互联网上漂浮
读完这篇文章后,你将像专业人士一样密封秘密,给同事留下深刻印象,甚至可能获得晋升。(好吧,我不能保证晋升,但你的秘密肯定会更安全。)
Sealed Secrets:超级英雄的起源故事
Kubernetes secrets,但带着斗篷和面具。这就是 Sealed Secrets 的本质。它们是由 Sealed Secrets 控制器管理的加密 Kubernetes secrets。可以把它想象成你敏感数据的私人保镖。
为什么 Sealed Secrets 是 Kubernetes 的蝙蝠侠:
- 它们可以安全地待在你的 Git 仓库中而不暴露自己
- 只有你的 Kubernetes 集群可以看到里面的内容
- 它们就像普通的 Kubernetes secrets,但拥有超能力
安装 Sealed Secrets 控制器:你的新好朋友
在我们开始密封秘密之前,我们需要安装 Sealed Secrets 控制器。
先决条件:
- 一个 Kubernetes 集群(如果你没有,那你在这里做什么?)
- kubectl 已配置并准备就绪
让我们用 Helm 开始吧:
# 添加 Sealed Secrets 仓库
helm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets
# 更新你的仓库
helm repo update
# 安装 Sealed Secrets
helm install sealed-secrets sealed-secrets/sealed-secrets
砰!你的集群现在具备了密封秘密的超能力。让我们确保它正在运行:
kubectl get pods -n kube-system | grep sealed-secrets
如果你看到一个 pod 正在运行,给自己一个赞。你正式进入了密封秘密的业务。
创建和加密 Sealed Secret:间谍学 101
现在我们已经设置好了秘密基地,是时候开始创建一些机密文件了。但首先,我们需要合适的工具。
步骤 1:安装 kubeseal
kubeseal 是你的加密助手。这样安装它:
wget https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.18.1/kubeseal-linux-amd64 -O kubeseal
sudo install -m 755 kubeseal /usr/local/bin/kubeseal
步骤 2:创建一个 Secret
让我们创建一个超级秘密的数据库密码:
apiVersion: v1
kind: Secret
metadata:
name: my-database-secret
type: Opaque
stringData:
DB_PASSWORD: "supersecretpassword123"
将此保存为 secret.yaml
。但请记住,这个文件的安全性就像纸糊的保险箱。
步骤 3:密封那个 Secret!
是时候把那个秘密放进保险箱了:
kubeseal --format yaml < secret.yaml > sealed-secret.yaml
瞧!你现在有一个 sealed-secret.yaml
,可以放心地提交到 Git。就像你的秘密有了自己的钢铁侠战衣。
部署 Sealed Secrets:不可能的任务
现在我们已经把秘密密封好,让我们将其部署到我们的集群中。这就像通过敌方领土发送机密文件。
kubectl apply -f sealed-secret.yaml
Sealed Secrets 控制器开始行动,解密你的秘密,并创建一个常规的 Kubernetes Secret。魔法!
要验证,请运行:
kubectl get secrets
你应该看到你的解密秘密已准备好供你的应用程序使用。任务完成!
跨环境管理 Sealed Secrets:多元宇宙的秘密
不同的环境,不同的秘密。这就像为工作和超级英雄生活准备不同的秘密身份。
疯狂的多元宇宙(或只是你的不同环境)
- 开发:错误发生的地方,但没关系
- 预发布:秘密的彩排
- 生产:魔法发生的地方(错误绝对不可以)
为此,你需要为每个环境准备不同的加密密钥。方法如下:
# 开发环境
kubeseal --fetch-cert --controller-name=sealed-secrets-controller --controller-namespace=kube-system > dev-pub-cert.pem
# 预发布环境
kubeseal --fetch-cert --controller-name=sealed-secrets-controller --controller-namespace=kube-system > staging-pub-cert.pem
# 生产环境
kubeseal --fetch-cert --controller-name=sealed-secrets-controller --controller-namespace=kube-system > prod-pub-cert.pem
现在,为不同环境密封秘密时:
# 开发环境
kubeseal --format yaml --cert dev-pub-cert.pem < secret.yaml > dev-sealed-secret.yaml
# 预发布环境
kubeseal --format yaml --cert staging-pub-cert.pem < secret.yaml > staging-sealed-secret.yaml
# 生产环境
kubeseal --format yaml --cert prod-pub-cert.pem < secret.yaml > prod-sealed-secret.yaml
每个环境都有自己独特加密的秘密。这就像为每个超级英雄团队准备不同的秘密握手。
轮换秘密和密钥:秘密生活的循环
即使是超级英雄有时也需要更换服装。你的秘密和加密密钥也是如此。
何时轮换:
- 定期,作为你的安全最佳实践的一部分
- 当你怀疑有泄露时
- 当运维的 Dave 不小心在 Slack 上发布了密钥时(经典的 Dave)
如何轮换一个秘密:
- 更新你的原始 Secret YAML
- 用 kubeseal 重新密封它
- 将新的 Sealed Secret 应用到你的集群
示例:轮换数据库密码
apiVersion: v1
kind: Secret
metadata:
name: my-database-secret
type: Opaque
stringData:
DB_PASSWORD: "evenmoresecretpassword456"
kubeseal --format yaml < updated-secret.yaml > updated-sealed-secret.yaml
kubectl apply -f updated-sealed-secret.yaml
你的应用程序现在将使用新密码而不会有任何停机时间。顺利操作!
最佳实践:超级英雄守则
这是你的 Sealed Secrets 守则:
- 绝不要将明文秘密提交到版本控制(我在看着你,实习生)
- 定期轮换你的加密密钥,就像你轮换轮胎一样(但更频繁)
- 使用 RBAC 控制谁可以加密/解密秘密(不是每个人都需要成为 Nick Fury)
- 使用 Kubernetes 审计日志监控秘密使用情况(信任,但要验证)
工具和替代方案:选择你的超能力
Sealed Secrets 不是唯一的英雄。让我们看看其他一些竞争者:
- HashiCorp Vault:秘密管理的瑞士军刀
- AWS Secrets Manager:当你全力投入 AWS 时
- Azure Key Vault:微软对“我该把秘密放在哪里?”的回答
Sealed Secrets 在其简单性和 Kubernetes 原生方法中闪耀。但就像在钢铁侠和美国队长之间做出选择,最好的工具取决于你的具体需求。
故障排除:当你的超能力失效时
即使是超级英雄也有失误的时候。以下是如何处理常见的 Sealed Secrets 问题:
秘密未解密?
kubectl get sealedsecrets
kubectl get events --field-selector involvedObject.kind=SealedSecret
控制器出问题?
kubectl logs deployment/sealed-secrets-controller -n kube-system
密钥不匹配?
确保你使用的是正确集群的正确公钥。这就像在尝试举起雷神之锤之前确保你在正确的宇宙中。
结论:能力越大,加密越强
Sealed Secrets 将 Kubernetes secret 管理的噩梦变成了梦想。它安全、可扩展,并让你在夜晚安心入睡,知道你的秘密确实是秘密。
记住:
- 在秘密接触版本控制之前密封它们
- 为不同环境使用不同的密钥
- 定期轮换
- 监控和审计
现在去密封那些秘密吧!你的集群(和你的血压)会感谢你。
欲了解更多信息,请查看 官方 Sealed Secrets 文档。记住,拥有伟大的秘密意味着肩负伟大的责任!