The ExternalSecret describes what data should be fetched, how the data should
be transformed and saved as a Kind=Secret:
spec.data to
explicitly sync individual keys or use spec.dataFrom to get all values
from the external API.spec.target.templateWhen the controller reconciles the ExternalSecret it will use the spec.template as a blueprint to construct a new Kind=Secret. You can use golang templates to define the blueprint and use template functions to transform secret values. You can also pull in ConfigMaps that contain golang-template data using templateFrom. See advanced templating for details.
You can control how and when the ExternalSecret is refreshed by setting the spec.refreshPolicy field. If not specified, the default behavior is Periodic.
With refreshPolicy: CreatedOnce, the controller will:
Kind=Secret only if it does not exist yetKind=Secret afterwards if the source data changesKind=Secret if it gets changed/DeletedExample:
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: example
spec:
refreshPolicy: CreatedOnce
# other fields...
With refreshPolicy: Periodic (the default behavior), the controller will:
Kind=Secret if it doesn't existKind=Secret regularly based on the spec.refreshInterval durationspec.refreshInterval is set to zero, it will only create the secret once and not update it afterwardspec.refreshInterval is set to a value greater than zero, the controller will update the Kind=Secret at the specified interval or when the ExternalSecret specification changesExample:
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: example
spec:
refreshPolicy: Periodic
refreshInterval: 1h0m0s # Update every hour
# other fields...
With refreshPolicy: OnChange, the controller will:
Kind=Secret if it doesn't existKind=Secret only when the ExternalSecret's metadata or specification changesrefreshInterval valueExternalSecret resourceExample:
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: example
spec:
refreshPolicy: OnChange
# other fields...
If supported by the configured refreshPolicy, you can manually trigger a refresh of the Kind=Secret by updating the annotations of the ExternalSecret:
kubectl annotate es my-es force-sync=$(date +%s) --overwrite
Individual features are described in the Guides section:
Take a look at an annotated example to understand the design behind the
ExternalSecret.
{% include 'full-external-secret.yaml' %}