From bbe3072ec524a52dd1760e47398f587b8d0bd79e Mon Sep 17 00:00:00 2001 From: Prince Pereira Date: Wed, 5 Nov 2025 16:23:43 +0000 Subject: [PATCH] kube-proxy/winkernel: fix stale RemoteEndpoints due to premature clearing of terminatedEndpoints map. --- pkg/proxy/winkernel/proxier.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkg/proxy/winkernel/proxier.go b/pkg/proxy/winkernel/proxier.go index bed8b8d5440..41dfbf09580 100644 --- a/pkg/proxy/winkernel/proxier.go +++ b/pkg/proxy/winkernel/proxier.go @@ -363,7 +363,7 @@ func (proxier *Proxier) updateTerminatedEndpoints(eps []proxy.Endpoint, isOldEnd func (proxier *Proxier) endpointsMapChange(oldEndpointsMap, newEndpointsMap proxy.EndpointsMap) { // This will optimize remote endpoint and loadbalancer deletion based on the annotation var svcPortMap = make(map[proxy.ServicePortName]bool) - clear(proxier.terminatedEndpoints) + var logLevel klog.Level = 5 for svcPortName, eps := range oldEndpointsMap { logFormattedEndpoints("endpointsMapChange oldEndpointsMap", logLevel, svcPortName, eps) @@ -1168,6 +1168,9 @@ func (proxier *Proxier) syncProxyRules() { return } + // Clear terminated endpoints map + clear(proxier.terminatedEndpoints) + // We assume that if this was called, we really want to sync them, // even if nothing changed in the meantime. In other words, callers are // responsible for detecting no-op changes and not calling this function. @@ -1717,10 +1720,11 @@ func (proxier *Proxier) syncProxyRules() { klog.V(5).InfoS("Terminated endpoints ready for deletion", "epIP", epIP) if epToDelete := queriedEndpoints[epIP]; epToDelete != nil && epToDelete.hnsID != "" && !epToDelete.IsLocal() { if refCount := proxier.endPointsRefCount.getRefCount(epToDelete.hnsID); refCount == nil || *refCount == 0 { - klog.V(3).InfoS("Deleting unreferenced remote endpoint", "hnsID", epToDelete.hnsID, "IP", epToDelete.ip) err := proxier.hns.deleteEndpoint(epToDelete.hnsID) if err != nil { klog.ErrorS(err, "Deleting unreferenced remote endpoint failed", "hnsID", epToDelete.hnsID) + } else { + klog.V(3).InfoS("Deleting unreferenced remote endpoint succeeded", "hnsID", epToDelete.hnsID, "IP", epToDelete.ip) } } }