@@ -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"
@@ -158,7 +160,7 @@ func (k k8s) MonitorChanges(eventChan chan k8ssync.SyncDataEvent, stop chan stru
158160 informersSynced := & []cache.InformerSynced {}
159161 k .runPodInformer (eventChan , stop , informersSynced )
160162 for _ , namespace := range k .whiteListedNS {
161- k .runInformers (eventChan , stop , namespace , informersSynced )
163+ k .runInformers (eventChan , stop , namespace , informersSynced , osArgs )
162164 k .runCRInformers (eventChan , stop , namespace , informersSynced , k .crs )
163165 if gatewayAPIInstalled {
164166 k .runInformersGwAPI (eventChan , stop , namespace , informersSynced )
@@ -213,7 +215,21 @@ func (k k8s) runCRInformers(eventChan chan k8ssync.SyncDataEvent, stop chan stru
213215 }
214216}
215217
216- func (k k8s ) runInformers (eventChan chan k8ssync.SyncDataEvent , stop chan struct {}, namespace string , informersSynced * []cache.InformerSynced ) {
218+ func (k k8s ) runConfigMapInformers (eventChan chan k8ssync.SyncDataEvent , stop chan struct {}, informersSynced * []cache.InformerSynced , configMap utils.NamespaceValue ) {
219+ if configMap .Name != "" {
220+ fieldSelector := fields .OneTermEqualSelector ("metadata.name" , configMap .Name ).String ()
221+ factory := k8sinformers .NewSharedInformerFactoryWithOptions (k .builtInClient , k .cacheResyncPeriod , k8sinformers .WithNamespace (configMap .Namespace ),
222+ k8sinformers .WithTweakListOptions (func (opts * metav1.ListOptions ) {
223+ opts .FieldSelector = fieldSelector
224+ }))
225+
226+ cmi := k .getConfigMapInformer (eventChan , factory )
227+ go cmi .Run (stop )
228+ * informersSynced = append (* informersSynced , cmi .HasSynced )
229+ }
230+ }
231+
232+ func (k k8s ) runInformers (eventChan chan k8ssync.SyncDataEvent , stop chan struct {}, namespace string , informersSynced * []cache.InformerSynced , osArgs utils.OSArgs ) {
217233 factory := k8sinformers .NewSharedInformerFactoryWithOptions (k .builtInClient , k .cacheResyncPeriod , k8sinformers .WithNamespace (namespace ))
218234 // Core.V1 Resources
219235 nsi := k .getNamespaceInfomer (eventChan , factory )
@@ -222,10 +238,12 @@ func (k k8s) runInformers(eventChan chan k8ssync.SyncDataEvent, stop chan struct
222238 go svci .Run (stop )
223239 seci := k .getSecretInformer (eventChan , factory )
224240 go seci .Run (stop )
225- cmi := k .getConfigMapInformer (eventChan , factory )
226- go cmi .Run (stop )
241+ * informersSynced = append (* informersSynced , svci .HasSynced , nsi .HasSynced , seci .HasSynced )
227242
228- * informersSynced = append (* informersSynced , svci .HasSynced , nsi .HasSynced , seci .HasSynced , cmi .HasSynced )
243+ k .runConfigMapInformers (eventChan , stop , informersSynced , osArgs .ConfigMap )
244+ k .runConfigMapInformers (eventChan , stop , informersSynced , osArgs .ConfigMapTCPServices )
245+ k .runConfigMapInformers (eventChan , stop , informersSynced , osArgs .ConfigMapErrorFiles )
246+ k .runConfigMapInformers (eventChan , stop , informersSynced , osArgs .ConfigMapPatternFiles )
229247
230248 // Ingress and IngressClass Resources
231249 ii , ici := k .getIngressInformers (eventChan , factory )
0 commit comments