@@ -95,11 +95,12 @@ type loadBalancerInfo struct {
95
95
}
96
96
97
97
type loadBalancerFlags struct {
98
- isILB bool
99
- isDSR bool
100
- localRoutedVIP bool
101
- useMUX bool
102
- preserveDIP bool
98
+ isILB bool
99
+ isDSR bool
100
+ localRoutedVIP bool
101
+ useMUX bool
102
+ preserveDIP bool
103
+ sessionAffinity bool
103
104
}
104
105
105
106
// internal struct for string service information
@@ -488,11 +489,12 @@ type Proxier struct {
488
489
// precomputing some number of those and cache for future reuse.
489
490
precomputedProbabilities []string
490
491
491
- hns HostNetworkService
492
- network hnsNetworkInfo
493
- sourceVip string
494
- hostMac string
495
- isDSR bool
492
+ hns HostNetworkService
493
+ network hnsNetworkInfo
494
+ sourceVip string
495
+ hostMac string
496
+ isDSR bool
497
+ supportedFeatures hcn.SupportedFeatures
496
498
}
497
499
498
500
type localPort struct {
@@ -649,6 +651,7 @@ func NewProxier(
649
651
sourceVip : sourceVip ,
650
652
hostMac : hostMac ,
651
653
isDSR : isDSR ,
654
+ supportedFeatures : supportedFeatures ,
652
655
}
653
656
654
657
burstSyncs := 2
@@ -1226,9 +1229,15 @@ func (proxier *Proxier) syncProxyRules() {
1226
1229
if containsPublicIP || containsNodeIP {
1227
1230
sourceVip = proxier .nodeIP .String ()
1228
1231
}
1232
+
1233
+ sessionAffinityClientIP := svcInfo .sessionAffinityType == v1 .ServiceAffinityClientIP
1234
+ if sessionAffinityClientIP && ! proxier .supportedFeatures .SessionAffinity {
1235
+ klog .Warningf ("Session Affinity is not supported on this version of Windows." )
1236
+ }
1237
+
1229
1238
hnsLoadBalancer , err := hns .getLoadBalancer (
1230
1239
hnsEndpoints ,
1231
- loadBalancerFlags {isDSR : proxier .isDSR },
1240
+ loadBalancerFlags {isDSR : proxier .isDSR , sessionAffinity : sessionAffinityClientIP },
1232
1241
sourceVip ,
1233
1242
svcInfo .clusterIP .String (),
1234
1243
Enum (svcInfo .protocol ),
@@ -1253,7 +1262,7 @@ func (proxier *Proxier) syncProxyRules() {
1253
1262
}
1254
1263
hnsLoadBalancer , err := hns .getLoadBalancer (
1255
1264
nodePortEndpoints ,
1256
- loadBalancerFlags {localRoutedVIP : true },
1265
+ loadBalancerFlags {localRoutedVIP : true , sessionAffinity : sessionAffinityClientIP },
1257
1266
sourceVip ,
1258
1267
"" ,
1259
1268
Enum (svcInfo .protocol ),
@@ -1274,7 +1283,7 @@ func (proxier *Proxier) syncProxyRules() {
1274
1283
// Try loading existing policies, if already available
1275
1284
hnsLoadBalancer , err = hns .getLoadBalancer (
1276
1285
hnsEndpoints ,
1277
- loadBalancerFlags {},
1286
+ loadBalancerFlags {sessionAffinity : sessionAffinityClientIP },
1278
1287
sourceVip ,
1279
1288
externalIP .ip ,
1280
1289
Enum (svcInfo .protocol ),
@@ -1297,7 +1306,7 @@ func (proxier *Proxier) syncProxyRules() {
1297
1306
}
1298
1307
hnsLoadBalancer , err := hns .getLoadBalancer (
1299
1308
lbIngressEndpoints ,
1300
- loadBalancerFlags {isDSR : svcInfo .preserveDIP || proxier .isDSR , useMUX : svcInfo .preserveDIP , preserveDIP : svcInfo .preserveDIP },
1309
+ loadBalancerFlags {isDSR : svcInfo .preserveDIP || proxier .isDSR , useMUX : svcInfo .preserveDIP , preserveDIP : svcInfo .preserveDIP , sessionAffinity : sessionAffinityClientIP },
1301
1310
sourceVip ,
1302
1311
lbIngressIP .ip ,
1303
1312
Enum (svcInfo .protocol ),
0 commit comments