2.0 KiB
2.0 KiB
sealed-secrets
GitOps source-of-truth repository for the cluster Sealed Secrets controller.
This repo follows the same dormant-bootstrap pattern as the other application
repositories, but the runtime payload is a pinned upstream Helm chart instead of
raw kustomize manifests. The controller is installed in kube-system with the
name sealed-secrets-controller so kubeseal works with its default controller
name assumptions.
Layout
.
├── .gitea/
│ └── workflows/validate.yaml
├── .gitignore
├── bootstrap/
│ ├── applicationset.yaml
│ └── config.yaml
├── manifest/
│ └── overlays/
│ └── production/
│ └── helm-values/
│ └── values.yaml
└── README.md
Bootstrap activation model
- Prepare the repo on
init. - Keep
bootstrap/config.yamlset toenabled: falsewhile validating. - Promote the repo to
main. - Change
bootstrap/config.yamltoenabled: trueonmain. - Let the bootstrap workflow apply
bootstrap/applicationset.yaml.
Controller decisions
- Namespace:
kube-system - Helm chart:
bitnami-labs/sealed-secrets - Chart version pin:
2.18.5 - Controller name override:
sealed-secrets-controller
The name override matters because the chart defaults to sealed-secrets, while
kubeseal expects sealed-secrets-controller unless you pass explicit flags.
Secret migration workflow
- Install
kubeseallocally. - Fetch the controller cert:
kubeseal --fetch-cert --controller-namespace kube-system > sealed-secrets.pem - Convert an existing Secret manifest:
kubeseal --format yaml --cert sealed-secrets.pem < secret.yaml > sealed-secret.yaml - Commit the resulting
SealedSecretmanifest in the owning app repo. - Remove the old SOPS-backed secret generator entry only after the app is
syncing from the new
SealedSecretpath.
Use the default strict scope unless a secret must survive renames inside the
same namespace. Avoid cluster-wide scope unless there is a concrete need.