Sealed Secrets allow for Secrets to be stored along with other Manifests, even in public repositories. Sealed Secrets are encrypted & can only be decrypted by the Sealed Secrets Controller.
Architecture
A regular secret can be encrypted with a public key held by the Sealed Secrets Controller. This returns a Sealed Secret, which can then be applied to the cluster again, where it is converted back into a regular secret.
flowchart LR secret([Secret]) --> ssc sealsecret([Sealed Secret]) subgraph cluster[Kubernetes Cluster] ssc(Sealed Secrets Controller) subgraph Namespace direction TB sealsecret2([Sealed Secret]) -.->|Syncs| secret2([Secret]) end end ssc -->|Seals| sealsecret ssc -.->|Unseals| sealsecret2 sealsecret -->|Apply| sealsecret2
Usage
Install the kubeseal cli, either using brew install kubeseal
or downloading it from the releases.
Take a regular secret such as
& run kubeseal against it kubeseal < secret.yaml -o yaml > sealed.yaml
This results in a SealedSecret
, which can be stored anywhere & is turned back into the original secret once applied to the cluster.