What Is Changing
Before
Secret references (tfy-secret://...) in deployment specs were resolved to their actual values on the control plane, and those resolved values were embedded directly in the Kubernetes Secret objects within the ArgoCD Application manifests applied to your cluster. This meant the actual secret value ended up materialized in the Application YAML on the cluster — not ideal from a security standpoint. Updating a secret also required redeploying or re-syncing the application.
After
Starting with v0.151.5, TrueFoundry no longer puts secret values in the ArgoCD manifests. Instead, it adds anExternalSecret custom resource to the deployment manifest. The External Secrets Operator (ESO) running on your cluster reads this resource, fetches the actual secret value from the control plane, and creates the Kubernetes Secret object locally.
Here’s a simplified example of what the ExternalSecret resource looks like:
Automatic secret refresh does not restart running pods. Pods will pick up the new secret values on their next restart. Automated pod restarts on secret rotation will be supported in a future release.
How External Secrets Operator (ESO) works
How External Secrets Operator (ESO) works
ESO is a Kubernetes operator that reads
The The webhook authenticates using the cluster token stored in the tfy-agent token K8s secret object (
ExternalSecret custom resources and materializes them as standard K8s secret objects. TrueFoundry installs and configures ESO on your compute plane cluster through the tfy-agent Helm chart (version 0.2.95+).| Component | Scope | Namespace | Role |
|---|---|---|---|
| External Secrets Operator controller | Cluster | tfy-agent | Watches ExternalSecret resources and creates or updates K8s secret objects |
ClusterSecretStore (tfy-secret-store) | Cluster | — | Tells ESO how to reach the TrueFoundry control plane to resolve secret references |
| ExternalSecret | Per application | Workload namespace | Declares which TrueFoundry secret reference maps to which K8s secret object |
| K8s secret object | Per application | Workload namespace | The in-cluster secret your Pods mount as env vars, volumes, or image pull credentials |
ClusterSecretStore uses a webhook provider that calls the TrueFoundry control plane:CLUSTER_TOKEN key).Affected workloads and secret types synced by ESO
| Workload type | What is auto-synced |
|---|---|
| Service / Async Service | Environment secrets, volume mounts, image pull credentials, and SQS autoscaling auth secrets |
| Job / Cron Job | Environment and mount secrets, plus image pull credentials |
| Spark Job | Environment and mount secrets, plus image pull credentials |
| Workflow | Task-level secrets and mounts |
| Volume | Secrets attached to volume operations |
| Workbench (Notebook, SSH Server) | Environment and mount secrets |
| Alert Manager | Notification channel credentials (email, Slack, PagerDuty, and similar provider integrations) |
Why This Change
- Image pull secrets refresh automatically — Private registry credentials are also managed by ESO and refresh on the same interval, so updated registry tokens propagate without a full redeploy.
- Single source of truth — Secret values are always resolved from the TrueFoundry control plane at runtime, matching the
tfy-secret://...references in your deployment specs. - Standard Kubernetes pattern — ESO is the widely adopted operator for syncing external secrets into K8s. TrueFoundry manages its installation and configuration for you through tfy-agent.
What You Need to Do
Upgrade tfy-agent on every compute plane cluster
Update the tfy-agent Helm chart to version 0.2.95 or later on each compute plane cluster. This version includes the External Secrets Operator subchart and the The
ClusterSecretStore configuration. See the values reference for all available options.Verify ESO is running after the upgrade:ClusterSecretStore should report a Ready status once the cluster token K8s secret object is configured correctly.Add the webhook label if you use an external cluster token secret
If you pass the cluster token inline via The K8s secret object must contain a key named Replace
config.clusterToken in the tfy-agent values file, the chart creates the token K8s secret object and adds the required label automatically when ESO is enabled. No action needed.If you store the cluster token in an existing K8s secret object referenced by config.clusterTokenSecret, you must add this label so ESO can use it as a webhook authentication source:CLUSTER_TOKEN. Find the secret name in your tfy-agent values file under config.clusterTokenSecret.Example using kubectl:<your-cluster-token-secret-name> with the value of config.clusterTokenSecret from your tfy-agent Helm values.Confirm ESO is enabled in tfy-agent values
ESO is enabled by default. Confirm these settings in your tfy-agent values file (or rely on the defaults):See the full tfy-agent values reference for all available options.
If you already run External Secrets Operator in your cluster, set Your existing ESO installation must be a compatible version that supports the
external-secrets-operator.enabled: false to avoid installing a second ESO instance (running two operators can cause them to fight over the same resources). With the subchart disabled, tfy-agent still creates the ClusterSecretStore (tfy-secret-store) that TrueFoundry’s ExternalSecret resources reference, and your existing operator reconciles them.external-secrets.io/v1 API and the webhook provider.Redeploy or sync affected applications
After tfy-agent is upgraded and the cluster token K8s secret object is labeled (if applicable), redeploy or sync applications that use secrets. New manifest generation produces
ExternalSecret resources that ESO uses to manage K8s secret objects.You can verify on a running application:Configuration reference
For the complete list of ESO-related settings and their defaults, see the external-secrets-operator section of the tfy-agent values file.If you have questions or run into issues during the migration, reach out to support@truefoundry.com — we’re happy to help.