Merge pull request #113742 from princepereira/ppereira-kubeproxy-flags

Add a flag to HNS Load Balancer policy to hint HNS about the VIP being an External IP
This commit is contained in:
Kubernetes Prow Robot 2022-12-12 04:23:33 -08:00 committed by GitHub
commit 0e19bbb916
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 9 additions and 3 deletions

View File

@ -48,6 +48,8 @@ type hns struct{}
var ( var (
// LoadBalancerFlagsIPv6 enables IPV6. // LoadBalancerFlagsIPv6 enables IPV6.
LoadBalancerFlagsIPv6 hcn.LoadBalancerFlags = 2 LoadBalancerFlagsIPv6 hcn.LoadBalancerFlags = 2
// LoadBalancerPortMappingFlagsVipExternalIP enables VipExternalIP.
LoadBalancerPortMappingFlagsVipExternalIP hcn.LoadBalancerPortMappingFlags = 16
) )
func (hns hns) getNetworkByName(name string) (*hnsNetworkInfo, error) { func (hns hns) getNetworkByName(name string) (*hnsNetworkInfo, error) {
@ -305,6 +307,9 @@ func (hns hns) getLoadBalancer(endpoints []endpointsInfo, flags loadBalancerFlag
if flags.localRoutedVIP { if flags.localRoutedVIP {
lbPortMappingFlags |= hcn.LoadBalancerPortMappingFlagsLocalRoutedVIP lbPortMappingFlags |= hcn.LoadBalancerPortMappingFlagsLocalRoutedVIP
} }
if flags.isVipExternalIP {
lbPortMappingFlags |= LoadBalancerPortMappingFlagsVipExternalIP
}
lbFlags := hcn.LoadBalancerFlagsNone lbFlags := hcn.LoadBalancerFlagsNone
if flags.isDSR { if flags.isDSR {

View File

@ -107,6 +107,7 @@ type loadBalancerIdentifier struct {
type loadBalancerFlags struct { type loadBalancerFlags struct {
isILB bool isILB bool
isDSR bool isDSR bool
isVipExternalIP bool
localRoutedVIP bool localRoutedVIP bool
useMUX bool useMUX bool
preserveDIP bool preserveDIP bool
@ -1313,7 +1314,7 @@ func (proxier *Proxier) syncProxyRules() {
if len(nodePortEndpoints) > 0 { if len(nodePortEndpoints) > 0 {
hnsLoadBalancer, err := hns.getLoadBalancer( hnsLoadBalancer, err := hns.getLoadBalancer(
nodePortEndpoints, nodePortEndpoints,
loadBalancerFlags{isDSR: svcInfo.localTrafficDSR, localRoutedVIP: true, sessionAffinity: sessionAffinityClientIP, isIPv6: proxier.isIPv6Mode}, loadBalancerFlags{isVipExternalIP: true, isDSR: svcInfo.localTrafficDSR, localRoutedVIP: true, sessionAffinity: sessionAffinityClientIP, isIPv6: proxier.isIPv6Mode},
sourceVip, sourceVip,
"", "",
Enum(svcInfo.Protocol()), Enum(svcInfo.Protocol()),
@ -1345,7 +1346,7 @@ func (proxier *Proxier) syncProxyRules() {
// Try loading existing policies, if already available // Try loading existing policies, if already available
hnsLoadBalancer, err = hns.getLoadBalancer( hnsLoadBalancer, err = hns.getLoadBalancer(
externalIPEndpoints, externalIPEndpoints,
loadBalancerFlags{isDSR: svcInfo.localTrafficDSR, sessionAffinity: sessionAffinityClientIP, isIPv6: proxier.isIPv6Mode}, loadBalancerFlags{isVipExternalIP: true, isDSR: svcInfo.localTrafficDSR, sessionAffinity: sessionAffinityClientIP, isIPv6: proxier.isIPv6Mode},
sourceVip, sourceVip,
externalIP.ip, externalIP.ip,
Enum(svcInfo.Protocol()), Enum(svcInfo.Protocol()),
@ -1374,7 +1375,7 @@ func (proxier *Proxier) syncProxyRules() {
if len(lbIngressEndpoints) > 0 { if len(lbIngressEndpoints) > 0 {
hnsLoadBalancer, err := hns.getLoadBalancer( hnsLoadBalancer, err := hns.getLoadBalancer(
lbIngressEndpoints, lbIngressEndpoints,
loadBalancerFlags{isDSR: svcInfo.preserveDIP || svcInfo.localTrafficDSR, useMUX: svcInfo.preserveDIP, preserveDIP: svcInfo.preserveDIP, sessionAffinity: sessionAffinityClientIP, isIPv6: proxier.isIPv6Mode}, loadBalancerFlags{isVipExternalIP: true, isDSR: svcInfo.preserveDIP || svcInfo.localTrafficDSR, useMUX: svcInfo.preserveDIP, preserveDIP: svcInfo.preserveDIP, sessionAffinity: sessionAffinityClientIP, isIPv6: proxier.isIPv6Mode},
sourceVip, sourceVip,
lbIngressIP.ip, lbIngressIP.ip,
Enum(svcInfo.Protocol()), Enum(svcInfo.Protocol()),