用 Sealed Secrets 管理 Git 中的密钥

适用场景

需要把 Kubernetes Secret 安全地提交到 Git,又不想在仓库里保存明文。Sealed Secrets 用集群内的控制器私钥解密,只有目标集群能解开。

前置条件

步骤

  1. 安装控制器:
helm repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets
helm install sealed-secrets sealed-secrets/sealed-secrets \
  --namespace kube-system \
  --set fullnameOverride=sealed-secrets-controller
  1. 确认控制器就绪并获取公钥:
kubectl -n kube-system get pods -l app.kubernetes.io/name=sealed-secrets
kubeseal --fetch-cert > pub-cert.pem
  1. 创建普通 Secret 并加密:
kubectl create secret generic db-secret \
  --namespace demo \
  --from-literal=password='***' \
  --dry-run=client -o yaml > db-secret.yaml

kubeseal --format yaml --cert pub-cert.pem \
  < db-secret.yaml > db-sealed.yaml
  1. 提交 db-sealed.yaml 到 Git,不要提交明文 Secret:
kubectl apply -f db-sealed.yaml
kubectl -n demo get secret db-secret
  1. 严格模式默认绑定 namespace 和 name。需要跨命名空间复用时,使用 --scope cluster-wide 或 namespace-wide,但要评估权限风险。

  2. 备份控制器私钥:

kubectl -n kube-system get secret \
  -l sealedsecrets.bitnami.com/sealed-secrets-key \
  -o yaml > sealed-secrets-keys.yaml

把备份放在安全的位置,不要提交到 Git。

验证

回滚

常见坑

相关命令