diff --git a/cmd/kube-proxy/app/server.go b/cmd/kube-proxy/app/server.go index f1a5a821e358..9a20108659e8 100644 --- a/cmd/kube-proxy/app/server.go +++ b/cmd/kube-proxy/app/server.go @@ -554,6 +554,7 @@ type ProxyServer struct { ConfigSyncPeriod time.Duration HealthzServer healthcheck.ProxierHealthUpdater localDetectorMode kubeproxyconfig.LocalMode + podCIDRs []string // only used for LocalModeNodeCIDR } // createClients creates a kube client and an event client from the given config and masterOverride. @@ -779,7 +780,7 @@ func (s *ProxyServer) Run() error { nodeConfig := config.NewNodeConfig(currentNodeInformerFactory.Core().V1().Nodes(), s.ConfigSyncPeriod) // https://issues.k8s.io/111321 if s.localDetectorMode == kubeproxyconfig.LocalModeNodeCIDR { - nodeConfig.RegisterEventHandler(&proxy.NodePodCIDRHandler{}) + nodeConfig.RegisterEventHandler(proxy.NewNodePodCIDRHandler(s.podCIDRs)) } nodeConfig.RegisterEventHandler(s.Proxier) diff --git a/cmd/kube-proxy/app/server_others.go b/cmd/kube-proxy/app/server_others.go index 8a1a441ee71a..c2b1d2bbefe2 100644 --- a/cmd/kube-proxy/app/server_others.go +++ b/cmd/kube-proxy/app/server_others.go @@ -163,12 +163,14 @@ func newProxyServer( } var nodeInfo *v1.Node + podCIDRs := []string{} if detectLocalMode == proxyconfigapi.LocalModeNodeCIDR { klog.InfoS("Watching for node, awaiting podCIDR allocation", "hostname", hostname) nodeInfo, err = waitForPodCIDR(client, hostname) if err != nil { return nil, err } + podCIDRs = nodeInfo.Spec.PodCIDRs klog.InfoS("NodeInfo", "PodCIDR", nodeInfo.Spec.PodCIDR, "PodCIDRs", nodeInfo.Spec.PodCIDRs) } @@ -388,6 +390,7 @@ func newProxyServer( HealthzServer: healthzServer, UseEndpointSlices: useEndpointSlices, localDetectorMode: detectLocalMode, + podCIDRs: podCIDRs, }, nil } diff --git a/pkg/proxy/node.go b/pkg/proxy/node.go index 007699a3f7bb..a9d3cec6caa7 100644 --- a/pkg/proxy/node.go +++ b/pkg/proxy/node.go @@ -33,6 +33,12 @@ type NodePodCIDRHandler struct { podCIDRs []string } +func NewNodePodCIDRHandler(podCIDRs []string) *NodePodCIDRHandler { + return &NodePodCIDRHandler{ + podCIDRs: podCIDRs, + } +} + var _ config.NodeHandler = &NodePodCIDRHandler{} // OnNodeAdd is a handler for Node creates. diff --git a/pkg/proxy/node_test.go b/pkg/proxy/node_test.go index ab20130b0336..2f6d7b54ad7b 100644 --- a/pkg/proxy/node_test.go +++ b/pkg/proxy/node_test.go @@ -37,6 +37,11 @@ func TestNodePodCIDRHandlerAdd(t *testing.T) { name: "initialized correctly", newNodePodCIDRs: []string{"192.168.1.0/24", "fd00:1:2:3::/64"}, }, + { + name: "already initialized and same node", + oldNodePodCIDRs: []string{"10.0.0.0/24", "fd00:3:2:1::/64"}, + newNodePodCIDRs: []string{"10.0.0.0/24", "fd00:3:2:1::/64"}, + }, { name: "already initialized and different node", oldNodePodCIDRs: []string{"192.168.1.0/24", "fd00:1:2:3::/64"},