sealed-secrets
- bitnami-labs/sealed-secrets
- Apache-2.0, Go
- one-way encrypted Secrets
- 加密 Secret 对象为 SealedSecret,用于安全提交到 git 仓库
- 集群内的 controller 会将 SealedSecret 解密为 Secret
- 模式
- strict - 默认 - 名字和 namespace 匹配
- namespace-wide - 相同 namespace 内可修改 name
- cluster-wide - 可修改 namespace 和 name
caution
- SealdSecret 是绑定 namespace,kubeseal 的时候指定或原 secret 包含,不可修改
- 或者指定
sealedsecrets.bitnami.com/cluster-wide": "true"
集群内可用
- 或者指定
- 如果一个 yaml 包含多个 secret 只有第一个会 seal - #114
- 删除 secret 不会重建 - bitnami-labs/sealed-secrets#224
# 集群安装
# 查看版本 https://github.com/bitnami-labs/sealed-secrets/releases
kubectl apply -f https://github.com/bitnami-labs/sealed-secrets/releases/download/v0.13.1/controller.yaml
brew install kubeseal
# 正常 secret
echo -n bar | kubectl create secret generic mysecret --dry-run=client --from-file=foo=/dev/stdin -o json > mysecret.json
# seal
kubeseal < mysecret.json > mysealedsecret.json
# 创建 seal
kubectl create -f mysealedsecret.json
# 生成 secret
kubectl get secret mysecret
# 限定范围
kubeseal --scope cluster-wide < secret.yaml > sealed-secret.json
# 备份 master.key - 恢复则可以使得之前的加密数据生效
kubectl get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o yaml > master.key
# 恢复 master.key
kubectl apply -f master.key
# 生效
kubectl delete pod -n kube-system -l name=sealed-secrets-controller
# 离线解密
kubeseal --recovery-unseal --recovery-private-key file1.key
annotations:
# 集群内可解密 - 不绑定 namespace
sealedsecrets.bitnami.com/cluster-wide": 'true'
# 不绑定 name
sealedsecrets.bitnami.com/namespace-wide: 'true'
FAQ
already exists and is not managed by SealedSecret
存在于将 secret 迁移为 sealed-secrets 的情况
annotations:
# 识别方式
sealedsecrets.bitnami.com/managed: 'true'
删除 secret 重建
- 目前不支持
- 重启 controller 可以 - 但是 sealedsecrets 多的时候非常慢
- 单个一般 0.7 - 1.2s
- bitnami-labs/sealed-secrets#224