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)

如何轮换一个秘密:

  1. 更新你的原始 Secret YAML
  2. 用 kubeseal 重新密封它
  3. 将新的 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 文档。记住,拥有伟大的秘密意味着肩负伟大的责任!