Lion Cipher Lab

Safely store Kubernetes secrets in Git with Sealed Secrets

Why it matters

The moment a team adopts GitOps — where a tool like Argo CD or Flux continuously applies whatever Kubernetes YAML lives in a Git repository — someone asks the obvious question: what about the passwords? A Kubernetes Secret looks encrypted because its values are base64 blobs, but base64 is just an encoding anyone can reverse in one command, so committing a plain Secret to Git is identical to committing the password in cleartext. Sealed Secrets solves this cleanly: a controller running in the cluster holds a private key, the `kubeseal` tool encrypts your Secret with the matching public key into…

What you'll learn

Steps in this lab

  1. The problem, in one breath: base64 is not encryption
  2. Build a throwaway cluster with kind
  3. Create a normal Secret — then decode it and watch the password fall out
  4. Install the sealed-secrets controller (into kube-system)
  5. Install the kubeseal CLI
  6. Seal the Secret — encrypt it into a SealedSecret you can commit
  7. Apply the SealedSecret and watch the controller materialize a real Secret
  8. Prove the scope rule: a SealedSecret is bound to its name AND namespace
  9. The key IS the crown jewel: back it up and understand rotation
  10. The judgment: when to reach for this, when NOT to, and how a pro does it

Open the full interactive lab →