How secrets are delivered

gcpsm backend, make seed-secrets writes the internal random values via gcloud.
For any other backend it has no assumed CLI, so it prints the key list plus the
ESO provider docs link and you create the values
yourself (scripts/seed-secrets.sh). Every ExternalSecret references one store named secret-store,
so ESO materialises them as native Kubernetes Secrets at runtime. The backend is the single source of
truth, which is why secrets survive a cluster rebuild.
The secrets
After
make seed-secrets, a typical fork has zero to three secrets left to create by hand. A
minimal run (local models, no public DNS) needs none.
Backend access
How the cluster authenticates to the backend itself:No hosted secret store
You do not need a cloud secret manager. If you have none (bare metal, or you already manage secrets with Sealed Secrets orkubectl), point the store at the ESO Kubernetes provider,
which reads Secrets from an in-cluster source namespace. ESO stays the single mechanism; only the store’s
provider block changes.
secret-source however you like, including committing them as
Sealed Secrets (encrypted, safe in git) that the sealed-secrets controller decrypts in place. Use the
secret contract for the exact names and keys.
One adaptation to know: a Kubernetes Secret is a key/value map, not a single string, so the Kubernetes
provider needs remoteRef.property to name the data key (a hosted string backend like GSM does not).
The platform’s ExternalSecrets are single-value, so under this provider add property: to each,
matching the data key of your source Secret.
Secret contract
What eachExternalSecret produces. A non-GSM source (Kubernetes provider, Vault, etc.) must supply
these keys; the consuming workloads mount the Kubernetes Secret by name regardless of backend.
The static Dex admin password is never committed.
make seed-secrets stores the retrievable operator
copy in the backend as dex-admin-password, stores the bcrypt hash in dex-admin-hash, and mirrors
the password into gitignored secrets/dex-admin-password. Dex reads only the hash from env via
staticPasswords[].hashFromEnv. Existing hash-only forks cannot recover the password; run
make reset-dex-admin once to rotate and persist both backend keys. See
Configure for backend, DNS, and SSO setup.