@@ -151,6 +151,28 @@ func (c *ConfigDynamic) newDataGathererWithClient(ctx context.Context, cl dynami
151151 }
152152 // init shared informer for selected namespaces
153153 fieldSelector := generateFieldSelector (c .ExcludeNamespaces )
154+ // Reduce the memory usage and reduce the load on the Kubernetes API server
155+ // by omitting various common Secret types when listing Secrets.
156+ // * https://kubernetes.io/docs/concepts/configuration/secret/#secret-types
157+ //
158+ // It would be better to include only TLS and Opaque Secrets rather than excluding the other types,
159+ // because we can never know all the possible Secret types that a cluster may have,
160+ // but field selectors do not yet support set based operators:
161+ // * https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/#supported-operators
162+ // * https://github.com/kubernetes/kubernetes/issues/32946
163+ if c .GroupVersionResource .Group == "" && c .GroupVersionResource .Version == "v1" && c .GroupVersionResource .Resource == "secrets" {
164+ fieldSelector = fields .AndSelectors (
165+ fieldSelector ,
166+ fields .OneTermNotEqualSelector ("type" , "kubernetes.io/service-account-token" ),
167+ fields .OneTermNotEqualSelector ("type" , "kubernetes.io/dockercfg" ),
168+ fields .OneTermNotEqualSelector ("type" , "kubernetes.io/dockerconfigjson" ),
169+ fields .OneTermNotEqualSelector ("type" , "kubernetes.io/basic-auth" ),
170+ fields .OneTermNotEqualSelector ("type" , "kubernetes.io/ssh-auth" ),
171+ fields .OneTermNotEqualSelector ("type" , "bootstrap.kubernetes.io/token" ),
172+ fields .OneTermNotEqualSelector ("type" , "helm.sh/release.v1" ),
173+ )
174+ }
175+
154176 // init cache to store gathered resources
155177 dgCache := cache .New (5 * time .Minute , 30 * time .Second )
156178
@@ -159,7 +181,7 @@ func (c *ConfigDynamic) newDataGathererWithClient(ctx context.Context, cl dynami
159181 cl : cl ,
160182 k8sClientSet : clientset ,
161183 groupVersionResource : c .GroupVersionResource ,
162- fieldSelector : fieldSelector ,
184+ fieldSelector : fieldSelector . String () ,
163185 namespaces : c .IncludeNamespaces ,
164186 cache : dgCache ,
165187 }
@@ -177,7 +199,7 @@ func (c *ConfigDynamic) newDataGathererWithClient(ctx context.Context, cl dynami
177199 60 * time .Second ,
178200 informers .WithNamespace (metav1 .NamespaceAll ),
179201 informers .WithTweakListOptions (func (options * metav1.ListOptions ) {
180- options .FieldSelector = fieldSelector
202+ options .FieldSelector = fieldSelector . String ()
181203 }))
182204 newDataGatherer .nativeSharedInformer = factory
183205 informer := informerFunc (factory )
@@ -200,7 +222,7 @@ func (c *ConfigDynamic) newDataGathererWithClient(ctx context.Context, cl dynami
200222 cl ,
201223 60 * time .Second ,
202224 metav1 .NamespaceAll ,
203- func (options * metav1.ListOptions ) { options .FieldSelector = fieldSelector },
225+ func (options * metav1.ListOptions ) { options .FieldSelector = fieldSelector . String () },
204226 )
205227 resourceInformer := factory .ForResource (c .GroupVersionResource )
206228 informer := resourceInformer .Informer ()
@@ -422,15 +444,15 @@ func namespaceResourceInterface(iface dynamic.NamespaceableResourceInterface, na
422444
423445// generateFieldSelector creates a field selector string from a list of
424446// namespaces to exclude.
425- func generateFieldSelector (excludeNamespaces []string ) string {
447+ func generateFieldSelector (excludeNamespaces []string ) fields. Selector {
426448 fieldSelector := fields .Nothing ()
427449 for _ , excludeNamespace := range excludeNamespaces {
428450 if excludeNamespace == "" {
429451 continue
430452 }
431453 fieldSelector = fields .AndSelectors (fields .OneTermNotEqualSelector ("metadata.namespace" , excludeNamespace ), fieldSelector )
432454 }
433- return fieldSelector . String ()
455+ return fieldSelector
434456}
435457
436458func isIncludedNamespace (namespace string , namespaces []string ) bool {
0 commit comments