diff --git a/pkg/providers/ingress/ingress.go b/pkg/providers/ingress/ingress.go index 8091c2cba9..5dedaef06a 100644 --- a/pkg/providers/ingress/ingress.go +++ b/pkg/providers/ingress/ingress.go @@ -53,6 +53,10 @@ type ingressController struct { ingressLister kube.IngressLister ingressInformer cache.SharedIndexInformer + secretInformer cache.SharedIndexInformer + endpointInformer cache.SharedIndexInformer + serviceInformer cache.SharedIndexInformer + // secretSSLMap stores reference from K8s secret to Ingress // type: Map> // SecretKey -> IngressVersionKey -> []string @@ -61,7 +65,7 @@ type ingressController struct { secretSSLMap *sync.Map } -func newIngressController(common *ingressCommon, ingressLister kube.IngressLister, ingressInformer cache.SharedIndexInformer) *ingressController { +func newIngressController(common *ingressCommon, ingressLister kube.IngressLister, ingressInformer, secretInformer, endpointInformer, serviceInformer cache.SharedIndexInformer) *ingressController { c := &ingressController{ ingressCommon: common, @@ -71,6 +75,10 @@ func newIngressController(common *ingressCommon, ingressLister kube.IngressListe ingressLister: ingressLister, ingressInformer: ingressInformer, + secretInformer: secretInformer, + endpointInformer: endpointInformer, + serviceInformer: serviceInformer, + secretSSLMap: new(sync.Map), } @@ -87,7 +95,11 @@ func (c *ingressController) run(ctx context.Context) { defer log.Infof("ingress controller exited") defer c.workqueue.ShutDown() - if !cache.WaitForCacheSync(ctx.Done(), c.ingressInformer.HasSynced) { + if !cache.WaitForCacheSync(ctx.Done(), + c.ingressInformer.HasSynced, + c.secretInformer.HasSynced, + c.serviceInformer.HasSynced, + c.endpointInformer.HasSynced) { log.Errorf("cache sync failed") return } diff --git a/pkg/providers/ingress/provider.go b/pkg/providers/ingress/provider.go index 0fefd72739..c5e75b5641 100644 --- a/pkg/providers/ingress/provider.go +++ b/pkg/providers/ingress/provider.go @@ -59,7 +59,10 @@ type ingressProvider struct { ingressController *ingressController - ingressInformer cache.SharedIndexInformer + ingressInformer cache.SharedIndexInformer + serviceInformer cache.SharedIndexInformer + endpointInformer cache.SharedIndexInformer + secretInformer cache.SharedIndexInformer } func NewProvider(common *providertypes.Common, namespaceProvider namespace.WatchingNamespaceProvider, @@ -77,6 +80,11 @@ func NewProvider(common *providertypes.Common, namespaceProvider namespace.Watch default: p.ingressInformer = kubeFactory.Extensions().V1beta1().Ingresses().Informer() } + + p.endpointInformer = common.EpInformer + p.serviceInformer = common.SvcInformer + p.secretInformer = common.SecretInformer + ingressLister := kube.NewIngressLister( kubeFactory.Networking().V1().Ingresses().Lister(), kubeFactory.Networking().V1beta1().Ingresses().Lister(), @@ -93,7 +101,7 @@ func NewProvider(common *providertypes.Common, namespaceProvider namespace.Watch }, translator, apisixTranslator), } - p.ingressController = newIngressController(c, ingressLister, p.ingressInformer) + p.ingressController = newIngressController(c, ingressLister, p.ingressInformer, p.secretInformer, p.endpointInformer, p.serviceInformer) return p, nil }