...
1
16
17 package proxy
18
19 import (
20 "reflect"
21 "sync"
22
23 v1 "k8s.io/api/core/v1"
24 "k8s.io/klog/v2"
25 "k8s.io/kubernetes/pkg/proxy/config"
26 "k8s.io/kubernetes/pkg/proxy/healthcheck"
27 )
28
29
30
31
32 type NodePodCIDRHandler struct {
33 mu sync.Mutex
34 podCIDRs []string
35 }
36
37 func NewNodePodCIDRHandler(podCIDRs []string) *NodePodCIDRHandler {
38 return &NodePodCIDRHandler{
39 podCIDRs: podCIDRs,
40 }
41 }
42
43 var _ config.NodeHandler = &NodePodCIDRHandler{}
44
45
46 func (n *NodePodCIDRHandler) OnNodeAdd(node *v1.Node) {
47 n.mu.Lock()
48 defer n.mu.Unlock()
49
50 podCIDRs := node.Spec.PodCIDRs
51
52 if len(n.podCIDRs) == 0 && len(podCIDRs) > 0 {
53 klog.InfoS("Setting current PodCIDRs", "podCIDRs", podCIDRs)
54 n.podCIDRs = podCIDRs
55 return
56 }
57 if !reflect.DeepEqual(n.podCIDRs, podCIDRs) {
58 klog.ErrorS(nil, "Using NodeCIDR LocalDetector mode, current PodCIDRs are different than previous PodCIDRs, restarting",
59 "node", klog.KObj(node), "newPodCIDRs", podCIDRs, "oldPodCIDRs", n.podCIDRs)
60 klog.FlushAndExit(klog.ExitFlushTimeout, 1)
61 }
62 }
63
64
65 func (n *NodePodCIDRHandler) OnNodeUpdate(_, node *v1.Node) {
66 n.mu.Lock()
67 defer n.mu.Unlock()
68 podCIDRs := node.Spec.PodCIDRs
69
70 if len(n.podCIDRs) == 0 && len(podCIDRs) > 0 {
71 klog.InfoS("Setting current PodCIDRs", "podCIDRs", podCIDRs)
72 n.podCIDRs = podCIDRs
73 return
74 }
75 if !reflect.DeepEqual(n.podCIDRs, podCIDRs) {
76 klog.ErrorS(nil, "Using NodeCIDR LocalDetector mode, current PodCIDRs are different than previous PodCIDRs, restarting",
77 "node", klog.KObj(node), "newPodCIDRs", podCIDRs, "oldPODCIDRs", n.podCIDRs)
78 klog.FlushAndExit(klog.ExitFlushTimeout, 1)
79 }
80 }
81
82
83 func (n *NodePodCIDRHandler) OnNodeDelete(node *v1.Node) {
84 klog.ErrorS(nil, "Current Node is being deleted", "node", klog.KObj(node))
85 }
86
87
88 func (n *NodePodCIDRHandler) OnNodeSynced() {}
89
90
91
92 type NodeEligibleHandler struct {
93 HealthServer *healthcheck.ProxierHealthServer
94 }
95
96 var _ config.NodeHandler = &NodeEligibleHandler{}
97
98
99 func (n *NodeEligibleHandler) OnNodeAdd(node *v1.Node) { n.HealthServer.SyncNode(node) }
100
101
102 func (n *NodeEligibleHandler) OnNodeUpdate(_, node *v1.Node) { n.HealthServer.SyncNode(node) }
103
104
105 func (n *NodeEligibleHandler) OnNodeDelete(node *v1.Node) { n.HealthServer.SyncNode(node) }
106
107
108 func (n *NodeEligibleHandler) OnNodeSynced() {}
109
View as plain text