@@ -16,6 +16,7 @@ import (
16
16
"k8s.io/client-go/kubernetes"
17
17
"k8s.io/client-go/rest"
18
18
"k8s.io/client-go/tools/cache"
19
+ "time"
19
20
)
20
21
21
22
const NginxIngressNamespace = "nginx-ingress"
@@ -63,13 +64,6 @@ func (w *Watcher) Watch() error {
63
64
defer utilruntime .HandleCrash ()
64
65
defer w .handler .ShutDown ()
65
66
66
- nodeIps , err := w .retrieveNodeIps ()
67
- if err != nil {
68
- return fmt .Errorf (`error occurred retrieving node ips: %w` , err )
69
- }
70
-
71
- logrus .Infof ("Watcher::Watch::nodeIps: %v" , nodeIps )
72
-
73
67
go w .informer .Run (w .ctx .Done ())
74
68
75
69
if ! cache .WaitForNamedCacheSync (WatcherQueueName , w .ctx .Done (), w .informer .HasSynced ) {
@@ -83,29 +77,44 @@ func (w *Watcher) Watch() error {
83
77
func (w * Watcher ) buildEventHandlerForAdd () func (interface {}) {
84
78
logrus .Info ("Watcher::buildEventHandlerForAdd" )
85
79
return func (obj interface {}) {
80
+ nodeIps , err := w .retrieveNodeIps ()
81
+ if err != nil {
82
+ logrus .Errorf (`error occurred retrieving node ips: %v` , err )
83
+ return
84
+ }
86
85
service := obj .(* v1.Service )
87
86
var previousService * v1.Service
88
- e := core .NewEvent (core .Created , service , previousService )
87
+ e := core .NewEvent (core .Created , service , previousService , nodeIps )
89
88
w .handler .AddRateLimitedEvent (& e )
90
89
}
91
90
}
92
91
93
92
func (w * Watcher ) buildEventHandlerForDelete () func (interface {}) {
94
93
logrus .Info ("Watcher::buildEventHandlerForDelete" )
95
94
return func (obj interface {}) {
95
+ nodeIps , err := w .retrieveNodeIps ()
96
+ if err != nil {
97
+ logrus .Errorf (`error occurred retrieving node ips: %v` , err )
98
+ return
99
+ }
96
100
service := obj .(* v1.Service )
97
101
var previousService * v1.Service
98
- e := core .NewEvent (core .Deleted , service , previousService )
102
+ e := core .NewEvent (core .Deleted , service , previousService , nodeIps )
99
103
w .handler .AddRateLimitedEvent (& e )
100
104
}
101
105
}
102
106
103
107
func (w * Watcher ) buildEventHandlerForUpdate () func (interface {}, interface {}) {
104
108
logrus .Info ("Watcher::buildEventHandlerForUpdate" )
105
109
return func (previous , updated interface {}) {
110
+ nodeIps , err := w .retrieveNodeIps ()
111
+ if err != nil {
112
+ logrus .Errorf (`error occurred retrieving node ips: %v` , err )
113
+ return
114
+ }
106
115
service := updated .(* v1.Service )
107
116
previousService := previous .(* v1.Service )
108
- e := core .NewEvent (core .Updated , service , previousService )
117
+ e := core .NewEvent (core .Updated , service , previousService , nodeIps )
109
118
w .handler .AddRateLimitedEvent (& e )
110
119
}
111
120
}
@@ -156,6 +165,7 @@ func (w *Watcher) initializeEventListeners() error {
156
165
}
157
166
158
167
func (w * Watcher ) retrieveNodeIps () ([]string , error ) {
168
+ started := time .Now ()
159
169
logrus .Debug ("Watcher::retrieveNodeIps" )
160
170
161
171
var nodeIps []string
@@ -167,12 +177,23 @@ func (w *Watcher) retrieveNodeIps() ([]string, error) {
167
177
}
168
178
169
179
for _ , node := range nodes .Items {
170
- for _ , address := range node .Status .Addresses {
171
- if address .Type == v1 .NodeInternalIP {
172
- nodeIps = append (nodeIps , address .Address )
180
+ if w .notMasterNode (node ) {
181
+ for _ , address := range node .Status .Addresses {
182
+ if address .Type == v1 .NodeInternalIP {
183
+ nodeIps = append (nodeIps , address .Address )
184
+ }
173
185
}
174
186
}
175
187
}
176
188
189
+ logrus .Infof ("Watcher::retrieveNodeIps duration: %d" , time .Since (started ).Nanoseconds ())
177
190
return nodeIps , nil
178
191
}
192
+
193
+ func (w * Watcher ) notMasterNode (node v1.Node ) bool {
194
+ logrus .Debug ("Watcher::notMasterNode" )
195
+
196
+ _ , found := node .Labels ["node-role.kubernetes.io/master" ]
197
+
198
+ return ! found
199
+ }
0 commit comments