From 20a89480f0ca0f8fbe1ce7fc3888b4e6344003c0 Mon Sep 17 00:00:00 2001 From: Manuel Alejandro de Brito Fontes Date: Mon, 11 Mar 2019 12:57:28 -0300 Subject: [PATCH] Use full election leader ID --- internal/ingress/controller/nginx.go | 14 +++++++++++--- internal/ingress/controller/status.go | 12 +----------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/internal/ingress/controller/nginx.go b/internal/ingress/controller/nginx.go index 72b0da1b58..3da8336353 100644 --- a/internal/ingress/controller/nginx.go +++ b/internal/ingress/controller/nginx.go @@ -49,6 +49,7 @@ import ( "k8s.io/ingress-nginx/internal/file" "k8s.io/ingress-nginx/internal/ingress" + "k8s.io/ingress-nginx/internal/ingress/annotations/class" ngx_config "k8s.io/ingress-nginx/internal/ingress/controller/config" "k8s.io/ingress-nginx/internal/ingress/controller/process" "k8s.io/ingress-nginx/internal/ingress/controller/store" @@ -262,18 +263,25 @@ func (n *NGINXController) Start() { n.store.Run(n.stopCh) + // we need to use the defined ingress class to allow multiple leaders + // in order to update information about ingress status + electionID := fmt.Sprintf("%v-%v", n.cfg.ElectionID, class.DefaultClass) + if class.IngressClass != "" { + electionID = fmt.Sprintf("%v-%v", n.cfg.ElectionID, class.IngressClass) + } + setupLeaderElection(&leaderElectionConfig{ Client: n.cfg.Client, - ElectionID: n.cfg.ElectionID, + ElectionID: electionID, OnStartedLeading: func(stopCh chan struct{}) { if n.syncStatus != nil { go n.syncStatus.Run(stopCh) } - n.metricCollector.OnStartedLeading(n.cfg.ElectionID) + n.metricCollector.OnStartedLeading(electionID) }, OnStoppedLeading: func() { - n.metricCollector.OnStoppedLeading(n.cfg.ElectionID) + n.metricCollector.OnStoppedLeading(electionID) // Remove prometheus metrics related to SSL certificates srvs := sets.NewString() diff --git a/internal/ingress/controller/status.go b/internal/ingress/controller/status.go index 187de3e4e5..f6f562b919 100644 --- a/internal/ingress/controller/status.go +++ b/internal/ingress/controller/status.go @@ -18,7 +18,6 @@ package controller import ( "context" - "fmt" "os" "time" @@ -31,8 +30,6 @@ import ( "k8s.io/client-go/tools/leaderelection" "k8s.io/client-go/tools/leaderelection/resourcelock" "k8s.io/client-go/tools/record" - - "k8s.io/ingress-nginx/internal/ingress/annotations/class" ) type leaderElectionConfig struct { @@ -48,13 +45,6 @@ type leaderElectionConfig struct { } func setupLeaderElection(config *leaderElectionConfig) { - // we need to use the defined ingress class to allow multiple leaders - // in order to update information about ingress status - electionID := fmt.Sprintf("%v-%v", config.ElectionID, class.DefaultClass) - if class.IngressClass != "" { - electionID = fmt.Sprintf("%v-%v", config.ElectionID, class.IngressClass) - } - var elector *leaderelection.LeaderElector // start a new context @@ -106,7 +96,7 @@ func setupLeaderElection(config *leaderElectionConfig) { }) lock := resourcelock.ConfigMapLock{ - ConfigMapMeta: metav1.ObjectMeta{Namespace: config.PodNamespace, Name: electionID}, + ConfigMapMeta: metav1.ObjectMeta{Namespace: config.PodNamespace, Name: config.ElectionID}, Client: config.Client.CoreV1(), LockConfig: resourcelock.ResourceLockConfig{ Identity: config.PodName,