01 · Which Secrets have no source?
Every Secret without an ExternalSecret behind it.
The assistant lists Secrets in application namespaces and looks for
an ExternalSecret that produces each one. It reads names, types and
key names only: its cluster access is read-only and it never sees a
secret value.
Here: payments/stripe-webhook, two keys, created by hand,
and a committed smtp-relay Secret in the repo.
02 · Not every Secret should move
Some belong to a chart, some aren't secret at all.
Secrets written by a chart's own bootstrap Job, or named after a Helm
release in the same namespace, are left alone: re-shipping them
would fight the chart.
TLS and CA material goes to review, because a key-value store path
that turns out empty would overwrite a working certificate. A committed
Secret whose values are plainly not credentials is proposed as a
ConfigMap instead.
03 · Write the ExternalSecret
Same name, same keys, backed by your store.
The ExternalSecret mirrors the Secret's keys, one
remoteRef per key. When the cluster has exactly one
ClusterSecretStore it is used; with several, your configured default
wins, otherwise the MR asks you to choose.
For a committed Secret, the same MR deletes the static manifest, so
git and the ExternalSecret never both own it.
04 · Seed Vault on merge
No manual vault kv put.
An ExternalSecret pointed at an empty path would replace a working
Secret with an empty one. So the MR pairs it with a
PushSecret that copies the live value into Vault once, on
merge, and never overwrites or deletes it afterwards.
The value travels from the cluster to Vault inside your cluster. It
never passes through the assistant, the model, or the MR.
05 · Secrets hiding in Helm values
Credential-shaped values become references.
When a HelmRelease is migrated or adopted, its values are scanned for
credential-shaped leaves: a password key, a token pasted into a
startup script. Each is rewritten to a reference, and one
ExternalSecret supplies them all through valuesFrom.
Anything ambiguous is declined, not guessed: the MR then carries a
scaffold and a note instead.
06 · Scan every diff
Before any MR opens, not after.
Every diff from every agent is checked for literal-looking
credentials: API keys, tokens, passwords, client secrets. A hit
withholds the MR.
ExternalSecret edits get their own checks: a renamed
remoteRef key, a template reverted to the old engine,
a rewrite that matches everything, deletionPolicy
flipped to Delete.
07 · Before a restart bites
A missing Secret only fails when the pod restarts.
A diff that makes a workload reference a Secret that exists nowhere,
in git or in the cluster, is held: the next pod start would fail
with CreateContainerConfigError.
When an ExternalSecret stops syncing, the issue names the workloads
that consume its Secret, so the stale credential is fixed before the
next rollout picks it up.
08 · Keeping ExternalSecrets current In development
Operator upgrades that remove old API and template versions.
When the External Secrets Operator stops serving an old API version,
every Helm release that still renders it fails at its next upgrade.
Those failures are reported today, one issue per release; grouping
them into one issue per cause is built and not yet switched on.
Roadmap Before an operator upgrade,
sweep live ExternalSecrets for defaults the new version removes (such
as a stored template engine version) and propose declaring them.