Skip creating HNS loadbalancer with empty endpoints

This commit is contained in:
Sravanth Bangari 2021-12-09 20:03:21 -08:00
parent 12b4bef7bd
commit 26be8d6890

View File

@ -1240,22 +1240,27 @@ func (proxier *Proxier) syncProxyRules() {
if svcInfo.preserveDIP || svcInfo.localTrafficDSR { if svcInfo.preserveDIP || svcInfo.localTrafficDSR {
nodePortEndpoints = hnsLocalEndpoints nodePortEndpoints = hnsLocalEndpoints
} }
hnsLoadBalancer, err := hns.getLoadBalancer(
nodePortEndpoints,
loadBalancerFlags{isDSR: svcInfo.localTrafficDSR, localRoutedVIP: true, sessionAffinity: sessionAffinityClientIP, isIPv6: proxier.isIPv6Mode},
sourceVip,
"",
Enum(svcInfo.Protocol()),
uint16(svcInfo.targetPort),
uint16(svcInfo.NodePort()),
)
if err != nil {
klog.ErrorS(err, "Policy creation failed")
continue
}
svcInfo.nodePorthnsID = hnsLoadBalancer.hnsID if len(nodePortEndpoints) > 0 {
klog.V(3).InfoS("Hns LoadBalancer resource created for nodePort resources", "clusterIP", svcInfo.ClusterIP(), "hnsID", hnsLoadBalancer.hnsID) hnsLoadBalancer, err := hns.getLoadBalancer(
nodePortEndpoints,
loadBalancerFlags{isDSR: svcInfo.localTrafficDSR, localRoutedVIP: true, sessionAffinity: sessionAffinityClientIP, isIPv6: proxier.isIPv6Mode},
sourceVip,
"",
Enum(svcInfo.Protocol()),
uint16(svcInfo.targetPort),
uint16(svcInfo.NodePort()),
)
if err != nil {
klog.ErrorS(err, "Policy creation failed")
continue
}
svcInfo.nodePorthnsID = hnsLoadBalancer.hnsID
klog.V(3).InfoS("Hns LoadBalancer resource created for nodePort resources", "clusterIP", svcInfo.ClusterIP(), "nodeport", svcInfo.NodePort(), "hnsID", hnsLoadBalancer.hnsID)
} else {
klog.V(3).InfoS("Skipped creating Hns LoadBalancer for nodePort resources", "clusterIP", svcInfo.ClusterIP(), "nodeport", svcInfo.NodePort(), "hnsID", hnsLoadBalancer.hnsID)
}
} }
// Create a Load Balancer Policy for each external IP // Create a Load Balancer Policy for each external IP
@ -1265,22 +1270,27 @@ func (proxier *Proxier) syncProxyRules() {
if svcInfo.localTrafficDSR { if svcInfo.localTrafficDSR {
externalIPEndpoints = hnsLocalEndpoints externalIPEndpoints = hnsLocalEndpoints
} }
// Try loading existing policies, if already available
hnsLoadBalancer, err = hns.getLoadBalancer( if len(externalIPEndpoints) > 0 {
externalIPEndpoints, // Try loading existing policies, if already available
loadBalancerFlags{isDSR: svcInfo.localTrafficDSR, sessionAffinity: sessionAffinityClientIP, isIPv6: proxier.isIPv6Mode}, hnsLoadBalancer, err = hns.getLoadBalancer(
sourceVip, externalIPEndpoints,
externalIP.ip, loadBalancerFlags{isDSR: svcInfo.localTrafficDSR, sessionAffinity: sessionAffinityClientIP, isIPv6: proxier.isIPv6Mode},
Enum(svcInfo.Protocol()), sourceVip,
uint16(svcInfo.targetPort), externalIP.ip,
uint16(svcInfo.Port()), Enum(svcInfo.Protocol()),
) uint16(svcInfo.targetPort),
if err != nil { uint16(svcInfo.Port()),
klog.ErrorS(err, "Policy creation failed") )
continue if err != nil {
klog.ErrorS(err, "Policy creation failed")
continue
}
externalIP.hnsID = hnsLoadBalancer.hnsID
klog.V(3).InfoS("Hns LoadBalancer resource created for externalIP resources", "externalIP", externalIP, "hnsID", hnsLoadBalancer.hnsID)
} else {
klog.V(3).InfoS("Skipped creating Hns LoadBalancer for externalIP resources", "externalIP", externalIP, "hnsID", hnsLoadBalancer.hnsID)
} }
externalIP.hnsID = hnsLoadBalancer.hnsID
klog.V(3).InfoS("Hns LoadBalancer resource created for externalIP resources", "externalIP", externalIP, "hnsID", hnsLoadBalancer.hnsID)
} }
// Create a Load Balancer Policy for each loadbalancer ingress // Create a Load Balancer Policy for each loadbalancer ingress
for _, lbIngressIP := range svcInfo.loadBalancerIngressIPs { for _, lbIngressIP := range svcInfo.loadBalancerIngressIPs {
@ -1289,21 +1299,27 @@ func (proxier *Proxier) syncProxyRules() {
if svcInfo.preserveDIP || svcInfo.localTrafficDSR { if svcInfo.preserveDIP || svcInfo.localTrafficDSR {
lbIngressEndpoints = hnsLocalEndpoints lbIngressEndpoints = hnsLocalEndpoints
} }
hnsLoadBalancer, err := hns.getLoadBalancer(
lbIngressEndpoints, if len(lbIngressEndpoints) > 0 {
loadBalancerFlags{isDSR: svcInfo.preserveDIP || svcInfo.localTrafficDSR, useMUX: svcInfo.preserveDIP, preserveDIP: svcInfo.preserveDIP, sessionAffinity: sessionAffinityClientIP, isIPv6: proxier.isIPv6Mode}, hnsLoadBalancer, err := hns.getLoadBalancer(
sourceVip, lbIngressEndpoints,
lbIngressIP.ip, loadBalancerFlags{isDSR: svcInfo.preserveDIP || svcInfo.localTrafficDSR, useMUX: svcInfo.preserveDIP, preserveDIP: svcInfo.preserveDIP, sessionAffinity: sessionAffinityClientIP, isIPv6: proxier.isIPv6Mode},
Enum(svcInfo.Protocol()), sourceVip,
uint16(svcInfo.targetPort), lbIngressIP.ip,
uint16(svcInfo.Port()), Enum(svcInfo.Protocol()),
) uint16(svcInfo.targetPort),
if err != nil { uint16(svcInfo.Port()),
klog.ErrorS(err, "Policy creation failed") )
continue if err != nil {
klog.ErrorS(err, "Policy creation failed")
continue
}
lbIngressIP.hnsID = hnsLoadBalancer.hnsID
klog.V(3).InfoS("Hns LoadBalancer resource created for loadBalancer Ingress resources", "lbIngressIP", lbIngressIP)
} else {
klog.V(3).InfoS("Skipped creating Hns LoadBalancer for loadBalancer Ingress resources", "lbIngressIP", lbIngressIP)
} }
lbIngressIP.hnsID = hnsLoadBalancer.hnsID
klog.V(3).InfoS("Hns LoadBalancer resource created for loadBalancer Ingress resources", "lbIngressIP", lbIngressIP)
} }
svcInfo.policyApplied = true svcInfo.policyApplied = true
klog.V(2).InfoS("Policy successfully applied for service", "serviceInfo", svcInfo) klog.V(2).InfoS("Policy successfully applied for service", "serviceInfo", svcInfo)