@@ -26,6 +26,7 @@ import (
26
26
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27
27
v1listers "k8s.io/client-go/listers/core/v1"
28
28
"k8s.io/client-go/tools/cache"
29
+ api "k8s.io/kubernetes/pkg/apis/core"
29
30
k8sports "k8s.io/kubernetes/pkg/cluster/ports"
30
31
)
31
32
@@ -126,7 +127,8 @@ func TestGetNodeIngressRules(t *testing.T) {
126
127
makeIngressSecurityRule ("3" , 80 ),
127
128
makeIngressSecurityRule ("3" , k8sports .ProxyHealthzPort ),
128
129
},
129
- }, {
130
+ },
131
+ {
130
132
name : "remove lb subnets" ,
131
133
securityList : & core.SecurityList {
132
134
IngressSecurityRules : []core.IngressSecurityRule {
@@ -150,7 +152,8 @@ func TestGetNodeIngressRules(t *testing.T) {
150
152
makeIngressSecurityRule ("existing" , 9000 ),
151
153
makeIngressSecurityRule ("existing" , 9001 ),
152
154
},
153
- }, {
155
+ },
156
+ {
154
157
name : "do not delete health check rules that are used by other services" ,
155
158
securityList : & core.SecurityList {
156
159
IngressSecurityRules : []core.IngressSecurityRule {
@@ -167,8 +170,9 @@ func TestGetNodeIngressRules(t *testing.T) {
167
170
{
168
171
ObjectMeta : metav1.ObjectMeta {Namespace : "namespace" , Name : "using-default-health-check-port" },
169
172
Spec : v1.ServiceSpec {
170
- Type : v1 .ServiceTypeLoadBalancer ,
171
- Ports : []v1.ServicePort {{Port : 443 }},
173
+ Type : v1 .ServiceTypeLoadBalancer ,
174
+ ExternalTrafficPolicy : v1 .ServiceExternalTrafficPolicy (api .ServiceExternalTrafficPolicyCluster ),
175
+ Ports : []v1.ServicePort {{Port : 443 }},
172
176
},
173
177
},
174
178
},
@@ -177,7 +181,48 @@ func TestGetNodeIngressRules(t *testing.T) {
177
181
expected : []core.IngressSecurityRule {
178
182
makeIngressSecurityRule ("0.0.0.0/0" , lbNodesHealthCheckPort ),
179
183
},
180
- }, {
184
+ },
185
+ {
186
+ name : "multiple services for same cluster; one uses default healthcheck and other uses HealthcheckNodeport" ,
187
+ securityList : & core.SecurityList {
188
+ IngressSecurityRules : []core.IngressSecurityRule {
189
+ makeIngressSecurityRule ("0.0.0.0/0" , lbNodesHealthCheckPort ),
190
+ makeIngressSecurityRule ("0.0.0.0/0" , 80 ),
191
+ makeIngressSecurityRule ("1.1.1.1/1" , 32000 ),
192
+ },
193
+ },
194
+ lbSubnets : []* core.Subnet {},
195
+ desiredPorts : portSpec {
196
+ BackendPort : 80 ,
197
+ HealthCheckerPort : k8sports .ProxyHealthzPort ,
198
+ },
199
+ services : []* v1.Service {
200
+ {
201
+ ObjectMeta : metav1.ObjectMeta {Namespace : "namespace" , Name : "using-default-health-check-port" },
202
+ Spec : v1.ServiceSpec {
203
+ Type : v1 .ServiceTypeLoadBalancer ,
204
+ ExternalTrafficPolicy : v1 .ServiceExternalTrafficPolicy (api .ServiceExternalTrafficPolicyCluster ),
205
+ Ports : []v1.ServicePort {{Port : 443 }},
206
+ },
207
+ },
208
+ {
209
+ ObjectMeta : metav1.ObjectMeta {Namespace : "namespace" , Name : "using-NodePort-health-check-port" },
210
+ Spec : v1.ServiceSpec {
211
+ Type : v1 .ServiceTypeLoadBalancer ,
212
+ ExternalTrafficPolicy : v1 .ServiceExternalTrafficPolicy (api .ServiceExternalTrafficPolicyLocal ),
213
+ Ports : []v1.ServicePort {{Port : 8081 }},
214
+ HealthCheckNodePort : 32000 ,
215
+ },
216
+ },
217
+ },
218
+ isPreserveSource : false ,
219
+ sourceCIDRs : []string {"0.0.0.0/0" },
220
+ expected : []core.IngressSecurityRule {
221
+ makeIngressSecurityRule ("0.0.0.0/0" , lbNodesHealthCheckPort ),
222
+ makeIngressSecurityRule ("1.1.1.1/1" , 32000 ),
223
+ },
224
+ },
225
+ {
181
226
name : "update service port" ,
182
227
securityList : & core.SecurityList {
183
228
IngressSecurityRules : []core.IngressSecurityRule {
@@ -243,6 +288,48 @@ func TestGetNodeIngressRules(t *testing.T) {
243
288
makeIngressSecurityRule ("10.0.50.0/24" , k8sports .ProxyHealthzPort + 1 ),
244
289
makeIngressSecurityRule ("10.0.51.0/24" , k8sports .ProxyHealthzPort + 1 ),
245
290
},
291
+ }, {
292
+ name : "external traffic policy local service health check port" ,
293
+ securityList : & core.SecurityList {
294
+ IngressSecurityRules : []core.IngressSecurityRule {
295
+ core.IngressSecurityRule {Source : common .String ("0.0.0.0/0" )},
296
+ makeIngressSecurityRule ("10.0.50.0/24" , 8081 ),
297
+ makeIngressSecurityRule ("10.0.51.0/24" , 8081 ),
298
+ makeIngressSecurityRule ("10.0.50.0/24" , k8sports .ProxyHealthzPort ),
299
+ makeIngressSecurityRule ("10.0.51.0/24" , k8sports .ProxyHealthzPort ),
300
+ },
301
+ },
302
+ lbSubnets : []* core.Subnet {
303
+ {CidrBlock : common .String ("10.0.50.0/24" )},
304
+ {CidrBlock : common .String ("10.0.51.0/24" )},
305
+ },
306
+ actualPorts : & portSpec {
307
+ BackendPort : 8081 ,
308
+ HealthCheckerPort : k8sports .ProxyHealthzPort ,
309
+ },
310
+ desiredPorts : portSpec {
311
+ BackendPort : 8081 ,
312
+ HealthCheckerPort : 30000 ,
313
+ },
314
+ services : []* v1.Service {
315
+ {
316
+ ObjectMeta : metav1.ObjectMeta {Namespace : "namespace" , Name : "using-non-default-health-check-port" },
317
+ Spec : v1.ServiceSpec {
318
+ Type : v1 .ServiceTypeLoadBalancer ,
319
+ ExternalTrafficPolicy : v1 .ServiceExternalTrafficPolicy (api .ServiceExternalTrafficPolicyLocal ),
320
+ Ports : []v1.ServicePort {{Port : 8081 }},
321
+ },
322
+ },
323
+ },
324
+ isPreserveSource : false ,
325
+ sourceCIDRs : []string {"0.0.0.0/0" },
326
+ expected : []core.IngressSecurityRule {
327
+ core.IngressSecurityRule {Source : common .String ("0.0.0.0/0" )},
328
+ makeIngressSecurityRule ("10.0.50.0/24" , 8081 ),
329
+ makeIngressSecurityRule ("10.0.51.0/24" , 8081 ),
330
+ makeIngressSecurityRule ("10.0.50.0/24" , 30000 ),
331
+ makeIngressSecurityRule ("10.0.51.0/24" , 30000 ),
332
+ },
246
333
},
247
334
}
248
335
@@ -407,8 +494,9 @@ func TestGetNodeIngressRules_NLB(t *testing.T) {
407
494
{
408
495
ObjectMeta : metav1.ObjectMeta {Namespace : "namespace" , Name : "using-default-health-check-port" },
409
496
Spec : v1.ServiceSpec {
410
- Type : v1 .ServiceTypeLoadBalancer ,
411
- Ports : []v1.ServicePort {{Port : 443 }},
497
+ Type : v1 .ServiceTypeLoadBalancer ,
498
+ ExternalTrafficPolicy : v1 .ServiceExternalTrafficPolicy (api .ServiceExternalTrafficPolicyCluster ),
499
+ Ports : []v1.ServicePort {{Port : 443 }},
412
500
},
413
501
},
414
502
},
@@ -907,12 +995,72 @@ func TestGetLoadBalancerEgressRules(t *testing.T) {
907
995
{
908
996
ObjectMeta : metav1.ObjectMeta {Namespace : "namespace" , Name : "using-default-health-check-port" },
909
997
Spec : v1.ServiceSpec {
910
- Type : v1 .ServiceTypeLoadBalancer ,
911
- Ports : []v1.ServicePort {{Port : 80 }},
998
+ Type : v1 .ServiceTypeLoadBalancer ,
999
+ ExternalTrafficPolicy : v1 .ServiceExternalTrafficPolicy (api .ServiceExternalTrafficPolicyCluster ),
1000
+ Ports : []v1.ServicePort {{Port : 80 }},
1001
+ },
1002
+ },
1003
+ },
1004
+ expected : []core.EgressSecurityRule {
1005
+ makeEgressSecurityRule ("0.0.0.0/0" , lbNodesHealthCheckPort ),
1006
+ },
1007
+ },
1008
+ {
1009
+ name : "do not delete a port rule during listener deletes" ,
1010
+ securityList : & core.SecurityList {
1011
+ EgressSecurityRules : []core.EgressSecurityRule {
1012
+ makeEgressSecurityRule ("0.0.0.0/0" , 30000 ),
1013
+ },
1014
+ },
1015
+ subnets : []* core.Subnet {},
1016
+ actualPort : 30000 ,
1017
+ desiredPort : 30000 ,
1018
+ services : []* v1.Service {
1019
+ {
1020
+ ObjectMeta : metav1.ObjectMeta {Namespace : "namespace" , Name : "using-default-health-check-port" },
1021
+ Spec : v1.ServiceSpec {
1022
+ Type : v1 .ServiceTypeLoadBalancer ,
1023
+ ExternalTrafficPolicy : v1 .ServiceExternalTrafficPolicy (api .ServiceExternalTrafficPolicyLocal ),
1024
+ HealthCheckNodePort : 30000 ,
1025
+ },
1026
+ },
1027
+ },
1028
+ expected : []core.EgressSecurityRule {
1029
+ makeEgressSecurityRule ("0.0.0.0/0" , 30000 ),
1030
+ },
1031
+ },
1032
+ {
1033
+ name : "multiple services in the same cluster; one using default healthcheck and other using healthcheck Nodeport" ,
1034
+ securityList : & core.SecurityList {
1035
+ EgressSecurityRules : []core.EgressSecurityRule {
1036
+ makeEgressSecurityRule ("0.0.0.0/0" , 30000 ),
1037
+ makeEgressSecurityRule ("0.0.0.0/0" , lbNodesHealthCheckPort ),
1038
+ },
1039
+ },
1040
+ subnets : []* core.Subnet {},
1041
+ actualPort : 31000 ,
1042
+ desiredPort : 31000 ,
1043
+ services : []* v1.Service {
1044
+ {
1045
+ ObjectMeta : metav1.ObjectMeta {Namespace : "namespace" , Name : "using-Nodeport-health-check-port" },
1046
+ Spec : v1.ServiceSpec {
1047
+ Type : v1 .ServiceTypeLoadBalancer ,
1048
+ ExternalTrafficPolicy : v1 .ServiceExternalTrafficPolicy (api .ServiceExternalTrafficPolicyLocal ),
1049
+ Ports : []v1.ServicePort {{Port : 80 }},
1050
+ HealthCheckNodePort : 30000 ,
1051
+ },
1052
+ },
1053
+ {
1054
+ ObjectMeta : metav1.ObjectMeta {Namespace : "namespace" , Name : "using-default-health-check-port" },
1055
+ Spec : v1.ServiceSpec {
1056
+ Type : v1 .ServiceTypeLoadBalancer ,
1057
+ Ports : []v1.ServicePort {{Port : 8080 }},
1058
+ ExternalTrafficPolicy : v1 .ServiceExternalTrafficPolicy (api .ServiceExternalTrafficPolicyCluster ),
912
1059
},
913
1060
},
914
1061
},
915
1062
expected : []core.EgressSecurityRule {
1063
+ makeEgressSecurityRule ("0.0.0.0/0" , 30000 ),
916
1064
makeEgressSecurityRule ("0.0.0.0/0" , lbNodesHealthCheckPort ),
917
1065
},
918
1066
},
0 commit comments