Skip to main content

External secrets

Enterprise
Available in these plansFreeDevProdScale
External Secrets Integration
Supported Configurations
Running the control plane as a container with:
Enterprise-Only Feature

This feature is an Enterprise feature. See our pricing plans or contact our sales team for more information.

Prerequisites

External secrets version

By default, vCluster uses the same CRD version as the External Secrets Operator installed on your host cluster. The version field allows you to explicitly set which CRD version to use (e.g., v1beta1 or v1). Ensure your chosen version is supported by the External Secrets Operator on your host cluster.

External secrets integration

To enable the external secret integration, set the following fields:

integrations:
externalSecrets:
enabled: true
version: v1 # Optional. If not specified, uses the same CRD version as your host cluster's External Secrets Operator
sync:
toHost:
stores:
enabled: true
fromHost:
clusterStores:
enabled: true

This enables the integration and the sync for all CRDs:

  • ExternalSecret: namespaced, synced from virtual cluster into host cluster and then bi-directionally
  • SecretStore: namespaced, synced from virtual cluster into host cluster
  • ClusterSecretStore: cluster scoped, synced from host cluster into virtual cluster

Once the virtual cluster is up and running, you can create a SecretStore inside the virtual cluster. For this guide, you use the fake store type, which prefills data instead of connecting to a distant secret store.

API Version Compatibility

External Secrets Operator v0.16.2 is the last supporting v1beta1 API version. For v0.17.0+ versions, it provides exclusively v1.

apiVersion: external-secrets.io/v1
kind: SecretStore
metadata:
name: fake
spec:
provider:
fake:
data:
- key: "/foo/bar"
value: "HELLO1"
version: "v1"
- key: "/foo/bar"
value: "HELLO2"
version: "v2"
- key: "/foo/baz"
value: '{"john": "doe"}'
version: "v1"

Inside the virtual cluster, create the store with kubectl apply -f fake.yaml. This creates a corresponding store in the host cluster. You can then create an ExternalSecret in the virtual cluster, which references the SecretStore.

apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: example
spec:
refreshInterval: 1h
secretStoreRef:
name: fake
kind: SecretStore
target:
name: secret-to-be-created
data:
- secretKey: foo_bar
remoteRef:
key: /foo/bar
version: v1
dataFrom:
- extract:
key: /foo/baz
version: v1

After the ExternalSecret is created in the virtual cluster, the integration creates a corresponding resource inside the host cluster. The external secret operator running in the host creates the corresponding Kubernetes secret which the integration imports into the virtual cluster. Running kubectl get secrets in the virtual cluster includes the secret-to-be-created in its output.

Config Reference

externalSecrets required object

ExternalSecrets reuses a host external secret operator and makes certain CRDs from it available inside the vCluster.

  • ExternalSecrets will be synced from the virtual cluster to the host cluster.
  • SecretStores will be synced from the virtual cluster to the host cluster and then bi-directionally.
  • ClusterSecretStores will be synced from the host cluster to the virtual cluster.

enabled required boolean false

Enabled defines whether the external secret integration is enabled or not

version required string

Version defines the version of the external secrets operator to use. If empty, the storage version will be used.

webhook required object

Webhook defines whether the host webhooks are reused or not

enabled required boolean false

Enabled defines if this option should be enabled.

sync required object

Sync defines the syncing behavior for the integration

toHost required object

ToHost defines what resources are synced from the virtual cluster to the host

externalSecrets required object

ExternalSecrets allows to configure if only a subset of ExternalSecrets matching a label selector should get synced from the virtual cluster to the host cluster.

selector required object
matchLabels required object {}
matchExpressions required object[]
key required string
operator required string
values required string[]
stores required object

Stores defines if secret stores should get synced from the virtual cluster to the host cluster and then bi-directionally.

selector required object
matchLabels required object {}
matchExpressions required object[]
key required string
operator required string
values required string[]
enabled required boolean false

Enabled defines if this option should be enabled.

fromHost required object

FromHost defines what resources are synced from the host cluster to the virtual cluster

clusterStores required object

ClusterStores defines if cluster secrets stores should get synced from the host cluster to the virtual cluster.

selector required object
matchLabels required object {}
matchExpressions required object[]
key required string
operator required string
values required string[]
enabled required boolean false

Enabled defines if this option should be enabled.