|
|
@@ -0,0 +1,76 @@
|
|
|
+# ExternalSecret Selectable Fields
|
|
|
+
|
|
|
+As of Kubernetes 1.30, External Secrets Operator supports selectable fields for querying ExternalSecret resources based on spec field values. This feature enables efficient server-side filtering of ExternalSecret resources.
|
|
|
+
|
|
|
+## Overview
|
|
|
+
|
|
|
+Selectable fields allow you to use `kubectl` field selectors and Kubernetes API field selectors to filter ExternalSecret resources based on specific spec field values rather than just metadata fields like `metadata.name` and `metadata.namespace`.
|
|
|
+
|
|
|
+## Supported Selectable Fields
|
|
|
+
|
|
|
+The following spec fields are available for field selectors in ExternalSecret resources:
|
|
|
+
|
|
|
+- `spec.secretStoreRef.name` - Name of the SecretStore or ClusterSecretStore
|
|
|
+- `spec.secretStoreRef.kind` - Type of store (SecretStore or ClusterSecretStore)
|
|
|
+- `spec.target.name` - Name of the target Kubernetes Secret
|
|
|
+- `spec.refreshInterval` - Refresh interval for the external secret
|
|
|
+
|
|
|
+## Usage Examples
|
|
|
+
|
|
|
+### Using kubectl with field selectors
|
|
|
+
|
|
|
+Query all ExternalSecrets that use a specific SecretStore:
|
|
|
+```bash
|
|
|
+kubectl get externalsecrets --field-selector spec.secretStoreRef.name=my-vault-store
|
|
|
+```
|
|
|
+
|
|
|
+Find all ExternalSecrets that use ClusterSecretStores:
|
|
|
+```bash
|
|
|
+kubectl get externalsecrets --field-selector spec.secretStoreRef.kind=ClusterSecretStore
|
|
|
+```
|
|
|
+
|
|
|
+Find ExternalSecrets with a specific refresh interval:
|
|
|
+```bash
|
|
|
+kubectl get externalsecrets --field-selector spec.refreshInterval=15m
|
|
|
+```
|
|
|
+
|
|
|
+Find ExternalSecrets that create a specific target secret:
|
|
|
+```bash
|
|
|
+kubectl get externalsecrets --field-selector spec.target.name=database-credentials
|
|
|
+```
|
|
|
+
|
|
|
+You can also combine multiple field selectors:
|
|
|
+```bash
|
|
|
+kubectl get externalsecrets --field-selector spec.secretStoreRef.kind=SecretStore,spec.refreshInterval=1h
|
|
|
+```
|
|
|
+
|
|
|
+### Using the Kubernetes API
|
|
|
+
|
|
|
+When using the Kubernetes client libraries, you can use field selectors programmatically:
|
|
|
+
|
|
|
+```go
|
|
|
+import (
|
|
|
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
|
+ "sigs.k8s.io/controller-runtime/pkg/client"
|
|
|
+)
|
|
|
+
|
|
|
+// List ExternalSecrets using a specific SecretStore
|
|
|
+fieldSelector := fields.OneTermEqualSelector("spec.secretStoreRef.name", "my-vault-store")
|
|
|
+listOptions := &client.ListOptions{
|
|
|
+ FieldSelector: fieldSelector,
|
|
|
+}
|
|
|
+
|
|
|
+var externalSecrets esv1.ExternalSecretList
|
|
|
+err := kubeClient.List(ctx, &externalSecrets, listOptions)
|
|
|
+```
|
|
|
+
|
|
|
+### Advanced Filtering
|
|
|
+
|
|
|
+You can combine field selectors with label selectors for more complex queries:
|
|
|
+
|
|
|
+```bash
|
|
|
+# Find ExternalSecrets with specific store AND specific label
|
|
|
+kubectl get externalsecrets \
|
|
|
+ --field-selector spec.secretStoreRef.kind=ClusterSecretStore \
|
|
|
+ --selector environment=production
|
|
|
+```
|