mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-10-31 18:28:13 +00:00 
			
		
		
		
	Don't delete affinity when endpoints are empty
This only affects the userspace kube-proxy.
This commit is contained in:
		| @@ -29,5 +29,6 @@ type LoadBalancer interface { | ||||
| 	// service-port and source address. | ||||
| 	NextEndpoint(service proxy.ServicePortName, srcAddr net.Addr) (string, error) | ||||
| 	NewService(service proxy.ServicePortName, sessionAffinityType api.ServiceAffinity, stickyMaxAgeMinutes int) error | ||||
| 	DeleteService(service proxy.ServicePortName) | ||||
| 	CleanupStaleStickySessions(service proxy.ServicePortName) | ||||
| } | ||||
|   | ||||
| @@ -447,6 +447,7 @@ func (proxier *Proxier) OnServiceUpdate(services []api.Service) { | ||||
| 			if err != nil { | ||||
| 				glog.Errorf("Failed to stop service %q: %v", name, err) | ||||
| 			} | ||||
| 			proxier.loadBalancer.DeleteService(name) | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -82,6 +82,7 @@ func NewLoadBalancerRR() *LoadBalancerRR { | ||||
| } | ||||
|  | ||||
| func (lb *LoadBalancerRR) NewService(svcPort proxy.ServicePortName, affinityType api.ServiceAffinity, ttlMinutes int) error { | ||||
| 	glog.V(4).Infof("LoadBalancerRR NewService %q", svcPort) | ||||
| 	lb.lock.Lock() | ||||
| 	defer lb.lock.Unlock() | ||||
| 	lb.newServiceInternal(svcPort, affinityType, ttlMinutes) | ||||
| @@ -103,6 +104,13 @@ func (lb *LoadBalancerRR) newServiceInternal(svcPort proxy.ServicePortName, affi | ||||
| 	return lb.services[svcPort] | ||||
| } | ||||
|  | ||||
| func (lb *LoadBalancerRR) DeleteService(svcPort proxy.ServicePortName) { | ||||
| 	glog.V(4).Infof("LoadBalancerRR DeleteService %q", svcPort) | ||||
| 	lb.lock.Lock() | ||||
| 	defer lb.lock.Unlock() | ||||
| 	delete(lb.services, svcPort) | ||||
| } | ||||
|  | ||||
| // return true if this service is using some form of session affinity. | ||||
| func isSessionAffinity(affinity *affinityPolicy) bool { | ||||
| 	// Should never be empty string, but checking for it to be safe. | ||||
| @@ -279,7 +287,11 @@ func (lb *LoadBalancerRR) OnEndpointsUpdate(allEndpoints []api.Endpoints) { | ||||
| 	for k := range lb.services { | ||||
| 		if _, exists := registeredEndpoints[k]; !exists { | ||||
| 			glog.V(2).Infof("LoadBalancerRR: Removing endpoints for %s", k) | ||||
| 			delete(lb.services, k) | ||||
| 			// Reset but don't delete. | ||||
| 			state := lb.services[k] | ||||
| 			state.endpoints = []string{} | ||||
| 			state.index = 0 | ||||
| 			state.affinity.affinityMap = map[string]*affinityState{} | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Tim Hockin
					Tim Hockin