需要把 Kubernetes Secret 安全地提交到 Git,又不想在仓库里保存明文。Sealed Secrets 用集群内的控制器私钥解密,只有目标集群能解开。
kubectl。kubeseal CLI,版本与控制器兼容。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
kubectl -n kube-system get pods -l app.kubernetes.io/name=sealed-secrets
kubeseal --fetch-cert > pub-cert.pem
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
db-sealed.yaml 到 Git,不要提交明文 Secret:kubectl apply -f db-sealed.yaml
kubectl -n demo get secret db-secret
严格模式默认绑定 namespace 和 name。需要跨命名空间复用时,使用 --scope cluster-wide 或 namespace-wide,但要评估权限风险。
备份控制器私钥:
kubectl -n kube-system get secret \
-l sealedsecrets.bitnami.com/sealed-secrets-key \
-o yaml > sealed-secrets-keys.yaml
把备份放在安全的位置,不要提交到 Git。
Synced。kubeseal 使用的证书来自另一个集群,目标集群无法解密。--scope cluster-wide 加密后,任何命名空间都能读取,权限过大。kubeseal — 加密 Secret 和获取证书kubectl — 查看 SealedSecret 和 Secrethelm — 安装和升级控制器openssl — 检查证书