Overview
vCluster supports syncing custom resources through two mechanisms:- Built-in integrations for popular operators (cert-manager, ExternalSecrets, Istio, KubeVirt)
- Generic custom resource syncing via plugins or experimental proxy feature
Built-in Integrations
vCluster includes native support for several popular CRD ecosystems.External Secrets Operator
Reuses a host cluster’s External Secrets Operator installation:ExternalSecrets→ Virtual to Host (with label selector)SecretStores→ Virtual to Host, then bidirectional (optional)ClusterSecretStores→ Host to Virtual (optional)
Cert-Manager
Reuses a host cluster’s cert-manager installation:Certificates→ Virtual to HostIssuers→ Virtual to HostClusterIssuers→ Host to Virtual (read-only)
Istio
Syncs Istio resources from virtual to host:DestinationRules→ Virtual to HostGateways→ Virtual to HostVirtualServices→ Virtual to Host
KubeVirt
Reuses a host cluster’s KubeVirt installation:Generic Custom Resource Syncing
For custom resources not covered by built-in integrations, you have two options:Option 1: Experimental Proxy Feature
The experimental proxy feature allows syncing arbitrary custom resources:Option 2: vCluster Plugins
vCluster plugins provide the most flexible way to sync custom resources. Plugins are external binaries that extend vCluster’s syncing capabilities. Plugin configuration:Syncing Architecture
Generic Syncer Pattern
Custom resource syncing follows the same pattern as native resources. Each syncer implements theSyncer interface (pkg/syncer/types/syncer.go:20):
Name Translation
Custom resources synced to the host cluster use the same name translation as native resources:Configuration Examples
Complete Cert-Manager Setup
Complete ExternalSecrets Setup
Istio Service Mesh Setup
Requirements
CRDs Must Exist in Host Cluster
For custom resource syncing to work, the CRDs must be installed in the host cluster. vCluster does not install CRDs automatically. Example: Installing cert-manager CRDs in host cluster:RBAC Permissions
vCluster needs appropriate RBAC permissions to read and write custom resources. These permissions are typically added automatically when using built-in integrations. Manual RBAC configuration (if needed):Troubleshooting
Custom Resources Not Syncing
-
Verify integration is enabled:
-
Check CRDs exist in host cluster:
-
Verify RBAC permissions:
-
Check vCluster logs:
Webhooks Not Working
If using custom resource webhooks:-
Enable webhook integration:
-
Verify webhook service exists:
-
Check ValidatingWebhookConfiguration:
Label Selectors Not Matching
When using label selectors, ensure resources have the required labels:Advanced Configuration
Selective Syncing with Labels
Use label selectors to control which resources sync:Bidirectional Syncing
Some resources support bidirectional syncing (e.g., SecretStores):Best Practices
- Install CRDs first: Ensure CRDs exist in the host cluster before enabling syncing
- Use label selectors: Control which resources sync to avoid conflicts
- Start with read-only: Import ClusterIssuers/ClusterStores before syncing user resources
- Monitor RBAC: Ensure vCluster has necessary permissions
- Test thoroughly: Validate custom resource syncing in development before production
- Document dependencies: Keep track of which operators are required in the host cluster
Limitations
- CRDs must pre-exist: vCluster doesn’t install CRDs in the host cluster
- No CRD syncing: The CRD definitions themselves are not synced
- Webhook complexity: Some webhooks may require additional configuration
- Version compatibility: Ensure CRD versions match between virtual and host clusters
- Cluster-scoped resources: Limited support for cluster-scoped custom resources
Next Steps
- Review syncing overview
- Learn about to-host syncing
- Learn about from-host syncing
- Explore integrations