How should ExternalSecret and PushSecret resources reference out-of-process providers?
How would the equivalent of ClusterSecretStore look like?
Out-of-process providers run in separate pods and communicate with ESO Core via gRPC. We need an API design that enables:
ExternalSecret references a Provider or ClusterProvider resource, which then references a provider-specific custom resource.
Architecture:
ExternalSecret
├─> secretStoreRef.kind: Provider
└─> secretStoreRef.name: my-provider
└─> Provider
├─> spec.address: grpc://provider-service:8080
└─> spec.providerRef
├─> kind: SecretsManager
└─> name: team-blue-eu-west-2
Example:
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: database-credentials
namespace: external-secrets-system
spec:
refreshInterval: 1h
secretStoreRef:
kind: Provider
name: aws-provider
Pros:
Provider/ClusterProviderspec.addressProvider handles connectivity, provider-specific CR handles configurationCons:
ExternalSecret directly references provider-specific custom resources.
Architecture:
ExternalSecret
├─> secretStoreRef.apiVersion: aws.provider.external-secrets.io/v2alpha1
├─> secretStoreRef.kind: SecretsManager
└─> secretStoreRef.name: team-blue-eu-west-2
Example:
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: database-credentials
namespace: external-secrets-system
spec:
refreshInterval: 1h
secretStoreRef:
apiVersion: aws.provider.external-secrets.io/v2alpha1
kind: SecretsManager
name: team-blue-eu-west-2
Pros:
Cons:
ClusterSecretsManager, ClusterParameterStore)The Provider resource contains spec.address pointing to the gRPC endpoint.
ESO Core discovers services by:
<provider-kind>-<name>)| Aspect | Option 1: Indirection | Option 2: Direct Reference |
|---|---|---|
| User Experience | More complex | Simpler |
| Implementation | Less boilerplate | More boilerplate |
| Extensibility | Centralized common fields | Duplicated fields |
| Service Discovery | Explicit | Convention-based |
| Maintenance | Single controller pattern | Multiple cluster-scoped controllers |
[To be filled in after discussion]