Skip to content

Commit 80c6524

Browse files
committed
kube-proxy: sync rules when current node labels change detected
1 parent c9cf3f5 commit 80c6524

File tree

2 files changed

+28
-4
lines changed

2 files changed

+28
-4
lines changed

pkg/proxy/iptables/proxier.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"encoding/base32"
2727
"fmt"
2828
"net"
29+
"reflect"
2930
"strconv"
3031
"strings"
3132
"sync"
@@ -599,9 +600,14 @@ func (proxier *Proxier) OnNodeAdd(node *v1.Node) {
599600
klog.Errorf("Received a watch event for a node %s that doesn't match the current node %v", node.Name, proxier.hostname)
600601
return
601602
}
603+
oldLabels := proxier.nodeLabels
604+
newLabels := node.Labels
602605
proxier.mu.Lock()
603-
proxier.nodeLabels = node.Labels
606+
proxier.nodeLabels = newLabels
604607
proxier.mu.Unlock()
608+
if !reflect.DeepEqual(oldLabels, newLabels) {
609+
proxier.syncProxyRules()
610+
}
605611
}
606612

607613
// OnNodeUpdate is called whenever modification of an existing
@@ -611,9 +617,14 @@ func (proxier *Proxier) OnNodeUpdate(oldNode, node *v1.Node) {
611617
klog.Errorf("Received a watch event for a node %s that doesn't match the current node %v", node.Name, proxier.hostname)
612618
return
613619
}
620+
oldLabels := proxier.nodeLabels
621+
newLabels := node.Labels
614622
proxier.mu.Lock()
615-
proxier.nodeLabels = node.Labels
623+
proxier.nodeLabels = newLabels
616624
proxier.mu.Unlock()
625+
if !reflect.DeepEqual(oldLabels, newLabels) {
626+
proxier.syncProxyRules()
627+
}
617628
}
618629

619630
// OnNodeDelete is called whever deletion of an existing node
@@ -626,6 +637,7 @@ func (proxier *Proxier) OnNodeDelete(node *v1.Node) {
626637
proxier.mu.Lock()
627638
proxier.nodeLabels = nil
628639
proxier.mu.Unlock()
640+
proxier.syncProxyRules()
629641
}
630642

631643
// OnNodeSynced is called once all the initial event handlers were

pkg/proxy/ipvs/proxier.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"io/ioutil"
2424
"net"
2525
"os"
26+
"reflect"
2627
"regexp"
2728
"strconv"
2829
"strings"
@@ -905,9 +906,14 @@ func (proxier *Proxier) OnNodeAdd(node *v1.Node) {
905906
klog.Errorf("Received a watch event for a node %s that doesn't match the current node %v", node.Name, proxier.hostname)
906907
return
907908
}
909+
oldLabels := proxier.nodeLabels
910+
newLabels := node.Labels
908911
proxier.mu.Lock()
909-
proxier.nodeLabels = node.Labels
912+
proxier.nodeLabels = newLabels
910913
proxier.mu.Unlock()
914+
if !reflect.DeepEqual(oldLabels, newLabels) {
915+
proxier.syncProxyRules()
916+
}
911917
}
912918

913919
// OnNodeUpdate is called whenever modification of an existing
@@ -917,9 +923,14 @@ func (proxier *Proxier) OnNodeUpdate(oldNode, node *v1.Node) {
917923
klog.Errorf("Received a watch event for a node %s that doesn't match the current node %v", node.Name, proxier.hostname)
918924
return
919925
}
926+
oldLabels := proxier.nodeLabels
927+
newLabels := node.Labels
920928
proxier.mu.Lock()
921-
proxier.nodeLabels = node.Labels
929+
proxier.nodeLabels = newLabels
922930
proxier.mu.Unlock()
931+
if !reflect.DeepEqual(oldLabels, newLabels) {
932+
proxier.syncProxyRules()
933+
}
923934
}
924935

925936
// OnNodeDelete is called whever deletion of an existing node
@@ -932,6 +943,7 @@ func (proxier *Proxier) OnNodeDelete(node *v1.Node) {
932943
proxier.mu.Lock()
933944
proxier.nodeLabels = nil
934945
proxier.mu.Unlock()
946+
proxier.syncProxyRules()
935947
}
936948

937949
// OnNodeSynced is called once all the initial event handlers were

0 commit comments

Comments
 (0)