mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-15 14:14:39 +00:00
ipvs lb local session affinity
This commit is contained in:
@@ -856,7 +856,7 @@ func (proxier *Proxier) syncProxyRules() {
|
|||||||
}
|
}
|
||||||
if err := proxier.syncService(svcNameString, serv, true); err == nil {
|
if err := proxier.syncService(svcNameString, serv, true); err == nil {
|
||||||
activeIPVSServices[serv.String()] = true
|
activeIPVSServices[serv.String()] = true
|
||||||
if err := proxier.syncEndpoint(svcName, svcInfo.OnlyNodeLocalEndpoints, serv); err != nil {
|
if err := proxier.syncEndpoint(svcName, false, serv); err != nil {
|
||||||
glog.Errorf("Failed to sync endpoint for service: %v, err: %v", serv, err)
|
glog.Errorf("Failed to sync endpoint for service: %v, err: %v", serv, err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -955,8 +955,10 @@ func (proxier *Proxier) syncProxyRules() {
|
|||||||
serv.Timeout = uint32(svcInfo.StickyMaxAgeSeconds)
|
serv.Timeout = uint32(svcInfo.StickyMaxAgeSeconds)
|
||||||
}
|
}
|
||||||
if err := proxier.syncService(svcNameString, serv, true); err == nil {
|
if err := proxier.syncService(svcNameString, serv, true); err == nil {
|
||||||
|
// check if service need skip endpoints that not in same host as kube-proxy
|
||||||
|
onlyLocal := svcInfo.SessionAffinityType == api.ServiceAffinityClientIP && svcInfo.OnlyNodeLocalEndpoints
|
||||||
activeIPVSServices[serv.String()] = true
|
activeIPVSServices[serv.String()] = true
|
||||||
if err := proxier.syncEndpoint(svcName, svcInfo.OnlyNodeLocalEndpoints, serv); err != nil {
|
if err := proxier.syncEndpoint(svcName, onlyLocal, serv); err != nil {
|
||||||
glog.Errorf("Failed to sync endpoint for service: %v, err: %v", serv, err)
|
glog.Errorf("Failed to sync endpoint for service: %v, err: %v", serv, err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1084,7 +1086,7 @@ func (proxier *Proxier) syncProxyRules() {
|
|||||||
// There is no need to bind Node IP to dummy interface, so set parameter `bindAddr` to `false`.
|
// There is no need to bind Node IP to dummy interface, so set parameter `bindAddr` to `false`.
|
||||||
if err := proxier.syncService(svcNameString, serv, false); err == nil {
|
if err := proxier.syncService(svcNameString, serv, false); err == nil {
|
||||||
activeIPVSServices[serv.String()] = true
|
activeIPVSServices[serv.String()] = true
|
||||||
if err := proxier.syncEndpoint(svcName, svcInfo.OnlyNodeLocalEndpoints, serv); err != nil {
|
if err := proxier.syncEndpoint(svcName, false, serv); err != nil {
|
||||||
glog.Errorf("Failed to sync endpoint for service: %v, err: %v", serv, err)
|
glog.Errorf("Failed to sync endpoint for service: %v, err: %v", serv, err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -1477,6 +1479,9 @@ func (proxier *Proxier) syncEndpoint(svcPortName proxy.ServicePortName, onlyNode
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, epInfo := range proxier.endpointsMap[svcPortName] {
|
for _, epInfo := range proxier.endpointsMap[svcPortName] {
|
||||||
|
if onlyNodeLocalEndpoints && !epInfo.GetIsLocal() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
newEndpoints.Insert(epInfo.String())
|
newEndpoints.Insert(epInfo.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user