Sealed Secrets — sellar secretos¶
Cómo cifrar secretos para commitearlos en Git y que el controlador los
des-selle en Secret de Kubernetes.
Sellar un secreto¶
- Instalar
kubeseal(brew install kubeseal). - Generar el
Secrety sellarlo de una vez (sin escribir el valor en disco):
kubectl create secret generic <nombre> \
--namespace <ns> \
--from-literal=<key>="$VALOR" \
--dry-run=client -o yaml \
| kubeseal \
--controller-name sealed-secrets \
--controller-namespace kube-system \
--format yaml \
> clusters/luka/config/cert-manager/<nombre>-sealed.yaml
- Commitear el
SealedSecretresultante (es seguro: va cifrado). - El controlador lo des-sella en un
Secreten<ns>.
Rotar la clave maestra¶
Rotar invalida todos los SealedSecret existentes: hay que re-sellarlos con la
clave nueva. Procedimiento seguro:
- Hacer backup de la clave actual (ver sección siguiente).
- Borrar la clave y reiniciar (el controlador regenera una nueva):
kubectl -n kube-system delete secret -l sealedsecrets.bitnami.com/sealed-secrets-key
kubectl -n kube-system rollout restart deploy/sealed-secrets
- Re-sellar todos los
SealedSecretdel repo con la clave nueva (sección anterior) y commitearlos.
Backup / restore de la clave maestra¶
La clave privada está en el Secret con etiqueta
sealedsecrets.bitnami.com/sealed-secrets-key en kube-system. Sin ella no se
pueden descifrar los SealedSecret (imprescindible para DR).
Backup (fuera del repo, con permisos restrictivos):
mkdir -p ~/.sealed-secrets && chmod 700 ~/.sealed-secrets
kubectl -n kube-system get secret -l sealedsecrets.bitnami.com/sealed-secrets-key -o yaml > ~/.sealed-secrets/keys.yaml
chmod 600 ~/.sealed-secrets/keys.yaml
Restore:
kubectl apply -f ~/.sealed-secrets/keys.yaml
kubectl -n kube-system rollout restart deploy/sealed-secrets