Skip to main content
Every credential lives in Secret Manager in your project. External Secrets, running as its own Google service account, copies each one into a Kubernetes Secret, and nothing holds a credential in a values file. A person handles exactly two objects, the application configuration and the realtime credentials; OpenTofu and the setup scripts generate the rest.

Secret Manager objects

Never regenerate <prefix>-zitadel-masterkey. Zitadel can’t tell a new masterkey against its existing database from corruption, and every encrypted value becomes unreadable.

Application configuration

Every key in this object becomes an environment variable, with the same name, in every application component. Nothing checks the names when you install, so spell them exactly. The platform chart adds four more keys to the application’s Kubernetes Secret itself. Don’t put them in your object; if you do, the chart’s value wins:

Keys not to set

Realtime credentials

Three things hold these values: sockudo, the application, and the web app, which takes app_key when its pods start and hands it to every browser. All three read the one object, so they can’t disagree, but the web app picks up a new key only when it restarts. See Rotate a secret.

Kubernetes Secrets

Rotate a secret

1

Add a new version in Secret Manager

Change one key and keep the others. For example, for COMPONENT_AUTH_TOKEN:
Secret Manager keeps earlier versions, so you can return to one.
2

Sync it into the cluster

External Secrets reads Secret Manager again every hour. To apply the change now:
Reloader then restarts every application component and the proxy, because they read their environment only when they start.
3

Restart what Reloader doesn't

After a change to the realtime credentials, restart sockudo and the web app, which read their values only when their pods start. Until the web app restarts, browsers get the old key and realtime stays down, with nothing saying so.
4

Verify

Expected: every ExternalSecret shows SecretSynced, and the application’s pods were restarted a moment ago.