@@ -33,6 +33,8 @@ import (
3333 k8ssync "github.com/haproxytech/kubernetes-ingress/pkg/k8s/sync"
3434 "github.com/haproxytech/kubernetes-ingress/pkg/utils"
3535 crdclientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset"
36+ "k8s.io/apimachinery/pkg/fields"
37+
3638 errGw "k8s.io/apimachinery/pkg/api/errors"
3739 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3840 "sigs.k8s.io/controller-runtime/pkg/client"
@@ -155,7 +157,7 @@ func (k k8s) MonitorChanges(eventChan chan k8ssync.SyncDataEvent, stop chan stru
155157 informersSynced := & []cache.InformerSynced {}
156158 k .runPodInformer (eventChan , stop , informersSynced )
157159 for _ , namespace := range k .whiteListedNS {
158- k .runInformers (eventChan , stop , namespace , informersSynced )
160+ k .runInformers (eventChan , stop , namespace , informersSynced , osArgs )
159161 k .runCRInformers (eventChan , stop , namespace , informersSynced , k .crs )
160162 if gatewayAPIInstalled {
161163 k .runInformersGwAPI (eventChan , stop , namespace , informersSynced )
@@ -206,7 +208,21 @@ func (k k8s) runCRInformers(eventChan chan k8ssync.SyncDataEvent, stop chan stru
206208 }
207209}
208210
209- func (k k8s ) runInformers (eventChan chan k8ssync.SyncDataEvent , stop chan struct {}, namespace string , informersSynced * []cache.InformerSynced ) {
211+ func (k k8s ) runConfigMapInformers (eventChan chan k8ssync.SyncDataEvent , stop chan struct {}, informersSynced * []cache.InformerSynced , configMap utils.NamespaceValue ) {
212+ if configMap .Name != "" {
213+ fieldSelector := fields .OneTermEqualSelector ("metadata.name" , configMap .Name ).String ()
214+ factory := k8sinformers .NewSharedInformerFactoryWithOptions (k .builtInClient , k .cacheResyncPeriod , k8sinformers .WithNamespace (configMap .Namespace ),
215+ k8sinformers .WithTweakListOptions (func (opts * metav1.ListOptions ) {
216+ opts .FieldSelector = fieldSelector
217+ }))
218+
219+ cmi := k .getConfigMapInformer (eventChan , factory )
220+ go cmi .Run (stop )
221+ * informersSynced = append (* informersSynced , cmi .HasSynced )
222+ }
223+ }
224+
225+ func (k k8s ) runInformers (eventChan chan k8ssync.SyncDataEvent , stop chan struct {}, namespace string , informersSynced * []cache.InformerSynced , osArgs utils.OSArgs ) {
210226 factory := k8sinformers .NewSharedInformerFactoryWithOptions (k .builtInClient , k .cacheResyncPeriod , k8sinformers .WithNamespace (namespace ))
211227 // Core.V1 Resources
212228 nsi := k .getNamespaceInfomer (eventChan , factory )
@@ -215,10 +231,12 @@ func (k k8s) runInformers(eventChan chan k8ssync.SyncDataEvent, stop chan struct
215231 go svci .Run (stop )
216232 seci := k .getSecretInformer (eventChan , factory )
217233 go seci .Run (stop )
218- cmi := k .getConfigMapInformer (eventChan , factory )
219- go cmi .Run (stop )
234+ * informersSynced = append (* informersSynced , svci .HasSynced , nsi .HasSynced , seci .HasSynced )
220235
221- * informersSynced = append (* informersSynced , svci .HasSynced , nsi .HasSynced , seci .HasSynced , cmi .HasSynced )
236+ k .runConfigMapInformers (eventChan , stop , informersSynced , osArgs .ConfigMap )
237+ k .runConfigMapInformers (eventChan , stop , informersSynced , osArgs .ConfigMapTCPServices )
238+ k .runConfigMapInformers (eventChan , stop , informersSynced , osArgs .ConfigMapErrorFiles )
239+ k .runConfigMapInformers (eventChan , stop , informersSynced , osArgs .ConfigMapPatternFiles )
222240
223241 // Ingress and IngressClass Resources
224242 ii , ici := k .getIngressInformers (eventChan , factory )
0 commit comments