Update the related tests

1. add AllocateLoadBalancerNodePorts fields in specs for validation test cases
2. update fuzzer
3. in resource quota e2e, allocate node port for loadbalancer type service and
   exceed the node port quota

Signed-off-by: Hanlin Shi <shihanlin9@gmail.com>
This commit is contained in:
Hanlin Shi 2021-03-19 19:33:56 +00:00
parent 05c6eaf0d1
commit 24592ca989
5 changed files with 117 additions and 30 deletions

View File

@ -19,6 +19,7 @@ package testing
import ( import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
utilpointer "k8s.io/utils/pointer"
api "k8s.io/kubernetes/pkg/apis/core" api "k8s.io/kubernetes/pkg/apis/core"
) )
@ -88,6 +89,16 @@ func SetTypeExternalName(svc *api.Service) {
svc.Spec.ClusterIPs = nil svc.Spec.ClusterIPs = nil
} }
// SetTypeExternalNameTrue sets the allocate LB node port to true.
func SetAllocateLBNodePortTrue(svc *api.Service) {
svc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
}
// SetTypeExternalNameFalse sets the allocate LB node port to false.
func SetAllocateLBNodePortFalse(svc *api.Service) {
svc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(false)
}
// SetPorts sets the service ports list. // SetPorts sets the service ports list.
func SetPorts(ports ...api.ServicePort) Tweak { func SetPorts(ports ...api.ServicePort) Tweak {
return func(svc *api.Service) { return func(svc *api.Service) {

View File

@ -31,6 +31,7 @@ import (
runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer" runtimeserializer "k8s.io/apimachinery/pkg/runtime/serializer"
"k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/intstr"
"k8s.io/kubernetes/pkg/apis/core" "k8s.io/kubernetes/pkg/apis/core"
utilpointer "k8s.io/utils/pointer"
) )
// Funcs returns the fuzzer functions for the core group. // Funcs returns the fuzzer functions for the core group.
@ -518,6 +519,9 @@ var Funcs = func(codecs runtimeserializer.CodecFactory) []interface{} {
case core.ServiceAffinityNone: case core.ServiceAffinityNone:
ss.SessionAffinityConfig = nil ss.SessionAffinityConfig = nil
} }
if ss.AllocateLoadBalancerNodePorts == nil {
ss.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
}
}, },
func(s *core.NodeStatus, c fuzz.Continue) { func(s *core.NodeStatus, c fuzz.Continue) {
c.FuzzNoCustom(s) c.FuzzNoCustom(s)

View File

@ -10880,6 +10880,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "valid load balancer protocol UDP 1", name: "valid load balancer protocol UDP 1",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.Ports[0].Protocol = "UDP" s.Spec.Ports[0].Protocol = "UDP"
}, },
numErrs: 0, numErrs: 0,
@ -10888,6 +10889,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "valid load balancer protocol UDP 2", name: "valid load balancer protocol UDP 2",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.Ports[0] = core.ServicePort{Name: "q", Port: 12345, Protocol: "UDP", TargetPort: intstr.FromInt(12345)} s.Spec.Ports[0] = core.ServicePort{Name: "q", Port: 12345, Protocol: "UDP", TargetPort: intstr.FromInt(12345)}
}, },
numErrs: 0, numErrs: 0,
@ -10896,6 +10898,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "load balancer with mix protocol", name: "load balancer with mix protocol",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "q", Port: 12345, Protocol: "UDP", TargetPort: intstr.FromInt(12345)}) s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "q", Port: 12345, Protocol: "UDP", TargetPort: intstr.FromInt(12345)})
}, },
numErrs: 0, numErrs: 0,
@ -10949,6 +10952,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "valid type - loadbalancer", name: "valid type - loadbalancer",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
}, },
numErrs: 0, numErrs: 0,
}, },
@ -10956,6 +10960,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "valid type loadbalancer 2 ports", name: "valid type loadbalancer 2 ports",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "q", Port: 12345, Protocol: "TCP", TargetPort: intstr.FromInt(12345)}) s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "q", Port: 12345, Protocol: "TCP", TargetPort: intstr.FromInt(12345)})
}, },
numErrs: 0, numErrs: 0,
@ -10964,6 +10969,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "valid external load balancer 2 ports", name: "valid external load balancer 2 ports",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "q", Port: 12345, Protocol: "TCP", TargetPort: intstr.FromInt(12345)}) s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "q", Port: 12345, Protocol: "TCP", TargetPort: intstr.FromInt(12345)})
}, },
numErrs: 0, numErrs: 0,
@ -11021,9 +11027,10 @@ func TestValidateServiceCreate(t *testing.T) {
numErrs: 0, numErrs: 0,
}, },
{ {
name: "valid type - loadbalancer", name: "valid type - loadbalancer with allocateLoadBalancerNodePorts=true",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
}, },
numErrs: 0, numErrs: 0,
}, },
@ -11031,6 +11038,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "valid type loadbalancer 2 ports", name: "valid type loadbalancer 2 ports",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "q", Port: 12345, Protocol: "TCP", TargetPort: intstr.FromInt(12345)}) s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "q", Port: 12345, Protocol: "TCP", TargetPort: intstr.FromInt(12345)})
}, },
numErrs: 0, numErrs: 0,
@ -11039,6 +11047,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "valid type loadbalancer with NodePort", name: "valid type loadbalancer with NodePort",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "q", Port: 12345, Protocol: "TCP", NodePort: 12345, TargetPort: intstr.FromInt(12345)}) s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "q", Port: 12345, Protocol: "TCP", NodePort: 12345, TargetPort: intstr.FromInt(12345)})
}, },
numErrs: 0, numErrs: 0,
@ -11088,6 +11097,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "valid type=LoadBalancer", name: "valid type=LoadBalancer",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "q", Port: 12345, Protocol: "TCP", TargetPort: intstr.FromInt(12345)}) s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "q", Port: 12345, Protocol: "TCP", TargetPort: intstr.FromInt(12345)})
}, },
numErrs: 0, numErrs: 0,
@ -11098,6 +11108,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "invalid port type=LoadBalancer", name: "invalid port type=LoadBalancer",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "kubelet", Port: 10250, Protocol: "TCP", TargetPort: intstr.FromInt(12345)}) s.Spec.Ports = append(s.Spec.Ports, core.ServicePort{Name: "kubelet", Port: 10250, Protocol: "TCP", TargetPort: intstr.FromInt(12345)})
}, },
numErrs: 1, numErrs: 1,
@ -11106,6 +11117,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "valid LoadBalancer source range annotation", name: "valid LoadBalancer source range annotation",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Annotations[core.AnnotationLoadBalancerSourceRangesKey] = "1.2.3.4/8, 5.6.7.8/16" s.Annotations[core.AnnotationLoadBalancerSourceRangesKey] = "1.2.3.4/8, 5.6.7.8/16"
}, },
numErrs: 0, numErrs: 0,
@ -11114,6 +11126,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "empty LoadBalancer source range annotation", name: "empty LoadBalancer source range annotation",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Annotations[core.AnnotationLoadBalancerSourceRangesKey] = "" s.Annotations[core.AnnotationLoadBalancerSourceRangesKey] = ""
}, },
numErrs: 0, numErrs: 0,
@ -11129,6 +11142,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "invalid LoadBalancer source range annotation (invalid CIDR)", name: "invalid LoadBalancer source range annotation (invalid CIDR)",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Annotations[core.AnnotationLoadBalancerSourceRangesKey] = "1.2.3.4/33" s.Annotations[core.AnnotationLoadBalancerSourceRangesKey] = "1.2.3.4/33"
}, },
numErrs: 1, numErrs: 1,
@ -11144,6 +11158,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "valid LoadBalancer source range", name: "valid LoadBalancer source range",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.LoadBalancerSourceRanges = []string{"1.2.3.4/8", "5.6.7.8/16"} s.Spec.LoadBalancerSourceRanges = []string{"1.2.3.4/8", "5.6.7.8/16"}
}, },
numErrs: 0, numErrs: 0,
@ -11152,6 +11167,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "empty LoadBalancer source range", name: "empty LoadBalancer source range",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.LoadBalancerSourceRanges = []string{" "} s.Spec.LoadBalancerSourceRanges = []string{" "}
}, },
numErrs: 1, numErrs: 1,
@ -11160,6 +11176,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "invalid LoadBalancer source range", name: "invalid LoadBalancer source range",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.LoadBalancerSourceRanges = []string{"foo.bar"} s.Spec.LoadBalancerSourceRanges = []string{"foo.bar"}
}, },
numErrs: 1, numErrs: 1,
@ -11214,6 +11231,7 @@ func TestValidateServiceCreate(t *testing.T) {
s.Spec.ClusterIP = "None" s.Spec.ClusterIP = "None"
s.Spec.ClusterIPs = []string{"None"} s.Spec.ClusterIPs = []string{"None"}
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
}, },
numErrs: 1, numErrs: 1,
}, },
@ -11232,6 +11250,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "invalid externalTraffic field", name: "invalid externalTraffic field",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.ExternalTrafficPolicy = "invalid" s.Spec.ExternalTrafficPolicy = "invalid"
}, },
numErrs: 1, numErrs: 1,
@ -11256,6 +11275,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "nagative healthCheckNodePort field", name: "nagative healthCheckNodePort field",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.ExternalTrafficPolicy = core.ServiceExternalTrafficPolicyTypeLocal s.Spec.ExternalTrafficPolicy = core.ServiceExternalTrafficPolicyTypeLocal
s.Spec.HealthCheckNodePort = -1 s.Spec.HealthCheckNodePort = -1
}, },
@ -11265,6 +11285,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "nagative healthCheckNodePort field", name: "nagative healthCheckNodePort field",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.ExternalTrafficPolicy = core.ServiceExternalTrafficPolicyTypeLocal s.Spec.ExternalTrafficPolicy = core.ServiceExternalTrafficPolicyTypeLocal
s.Spec.HealthCheckNodePort = 31100 s.Spec.HealthCheckNodePort = 31100
}, },
@ -11288,6 +11309,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "sessionAffinityConfig can't be set when session affinity is None", name: "sessionAffinityConfig can't be set when session affinity is None",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.SessionAffinity = core.ServiceAffinityNone s.Spec.SessionAffinity = core.ServiceAffinityNone
s.Spec.SessionAffinityConfig = &core.SessionAffinityConfig{ s.Spec.SessionAffinityConfig = &core.SessionAffinityConfig{
ClientIP: &core.ClientIPConfig{ ClientIP: &core.ClientIPConfig{
@ -11740,6 +11762,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "valid LoadBalancerClass when type is LoadBalancer", name: "valid LoadBalancerClass when type is LoadBalancer",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-load-balancer-class") s.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-load-balancer-class")
}, },
numErrs: 0, numErrs: 0,
@ -11748,6 +11771,7 @@ func TestValidateServiceCreate(t *testing.T) {
name: "invalid LoadBalancerClass", name: "invalid LoadBalancerClass",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.LoadBalancerClass = utilpointer.StringPtr("Bad/LoadBalancerClass") s.Spec.LoadBalancerClass = utilpointer.StringPtr("Bad/LoadBalancerClass")
}, },
numErrs: 1, numErrs: 1,
@ -11787,6 +11811,7 @@ func TestValidateServiceExternalTrafficFieldsCombination(t *testing.T) {
name: "valid loadBalancer service with externalTrafficPolicy and healthCheckNodePort set", name: "valid loadBalancer service with externalTrafficPolicy and healthCheckNodePort set",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.ExternalTrafficPolicy = core.ServiceExternalTrafficPolicyTypeLocal s.Spec.ExternalTrafficPolicy = core.ServiceExternalTrafficPolicyTypeLocal
s.Spec.HealthCheckNodePort = 34567 s.Spec.HealthCheckNodePort = 34567
}, },
@ -11811,6 +11836,7 @@ func TestValidateServiceExternalTrafficFieldsCombination(t *testing.T) {
name: "cannot set healthCheckNodePort field on loadBalancer service with externalTrafficPolicy!=Local", name: "cannot set healthCheckNodePort field on loadBalancer service with externalTrafficPolicy!=Local",
tweakSvc: func(s *core.Service) { tweakSvc: func(s *core.Service) {
s.Spec.Type = core.ServiceTypeLoadBalancer s.Spec.Type = core.ServiceTypeLoadBalancer
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
s.Spec.ExternalTrafficPolicy = core.ServiceExternalTrafficPolicyTypeCluster s.Spec.ExternalTrafficPolicy = core.ServiceExternalTrafficPolicyTypeCluster
s.Spec.HealthCheckNodePort = 34567 s.Spec.HealthCheckNodePort = 34567
}, },
@ -13330,6 +13356,7 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "change type", name: "change type",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
}, },
numErrs: 0, numErrs: 0,
}, },
@ -13351,7 +13378,9 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "add loadBalancerSourceRanges", name: "add loadBalancerSourceRanges",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.LoadBalancerSourceRanges = []string{"10.0.0.0/8"} newSvc.Spec.LoadBalancerSourceRanges = []string{"10.0.0.0/8"}
}, },
numErrs: 0, numErrs: 0,
@ -13360,8 +13389,10 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "update loadBalancerSourceRanges", name: "update loadBalancerSourceRanges",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.LoadBalancerSourceRanges = []string{"10.0.0.0/8"} oldSvc.Spec.LoadBalancerSourceRanges = []string{"10.0.0.0/8"}
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.LoadBalancerSourceRanges = []string{"10.100.0.0/16"} newSvc.Spec.LoadBalancerSourceRanges = []string{"10.100.0.0/16"}
}, },
numErrs: 0, numErrs: 0,
@ -13372,6 +13403,7 @@ func TestValidateServiceUpdate(t *testing.T) {
newSvc.Spec.ClusterIP = "None" newSvc.Spec.ClusterIP = "None"
newSvc.Spec.ClusterIPs = []string{"None"} newSvc.Spec.ClusterIPs = []string{"None"}
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
}, },
numErrs: 1, numErrs: 1,
}, },
@ -13472,6 +13504,7 @@ func TestValidateServiceUpdate(t *testing.T) {
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeClusterIP oldSvc.Spec.Type = core.ServiceTypeClusterIP
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.ClusterIP = "1.2.3.4" oldSvc.Spec.ClusterIP = "1.2.3.4"
oldSvc.Spec.ClusterIPs = []string{"1.2.3.4"} oldSvc.Spec.ClusterIPs = []string{"1.2.3.4"}
@ -13486,6 +13519,7 @@ func TestValidateServiceUpdate(t *testing.T) {
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeClusterIP oldSvc.Spec.Type = core.ServiceTypeClusterIP
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.ClusterIP = "" oldSvc.Spec.ClusterIP = ""
oldSvc.Spec.ClusterIPs = nil oldSvc.Spec.ClusterIPs = nil
@ -13556,6 +13590,7 @@ func TestValidateServiceUpdate(t *testing.T) {
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeNodePort oldSvc.Spec.Type = core.ServiceTypeNodePort
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.ClusterIP = "1.2.3.4" oldSvc.Spec.ClusterIP = "1.2.3.4"
oldSvc.Spec.ClusterIPs = []string{"1.2.3.4"} oldSvc.Spec.ClusterIPs = []string{"1.2.3.4"}
@ -13570,6 +13605,7 @@ func TestValidateServiceUpdate(t *testing.T) {
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeNodePort oldSvc.Spec.Type = core.ServiceTypeNodePort
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.ClusterIP = "" oldSvc.Spec.ClusterIP = ""
oldSvc.Spec.ClusterIPs = nil oldSvc.Spec.ClusterIPs = nil
@ -13583,7 +13619,9 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "Service with LoadBalancer type cannot change its set ClusterIP", name: "Service with LoadBalancer type cannot change its set ClusterIP",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.ClusterIP = "1.2.3.4" oldSvc.Spec.ClusterIP = "1.2.3.4"
oldSvc.Spec.ClusterIPs = []string{"1.2.3.4"} oldSvc.Spec.ClusterIPs = []string{"1.2.3.4"}
@ -13597,7 +13635,9 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "Service with LoadBalancer type can change its empty ClusterIP", name: "Service with LoadBalancer type can change its empty ClusterIP",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.ClusterIP = "" oldSvc.Spec.ClusterIP = ""
oldSvc.Spec.ClusterIPs = nil oldSvc.Spec.ClusterIPs = nil
@ -13611,6 +13651,7 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "Service with LoadBalancer type cannot change its set ClusterIP when changing type to ClusterIP", name: "Service with LoadBalancer type cannot change its set ClusterIP when changing type to ClusterIP",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.Type = core.ServiceTypeClusterIP newSvc.Spec.Type = core.ServiceTypeClusterIP
oldSvc.Spec.ClusterIP = "1.2.3.4" oldSvc.Spec.ClusterIP = "1.2.3.4"
@ -13625,6 +13666,7 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "Service with LoadBalancer type can change its empty ClusterIP when changing type to ClusterIP", name: "Service with LoadBalancer type can change its empty ClusterIP when changing type to ClusterIP",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.Type = core.ServiceTypeClusterIP newSvc.Spec.Type = core.ServiceTypeClusterIP
oldSvc.Spec.ClusterIP = "" oldSvc.Spec.ClusterIP = ""
@ -13639,6 +13681,7 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "Service with LoadBalancer type cannot change its set ClusterIP when changing type to NodePort", name: "Service with LoadBalancer type cannot change its set ClusterIP when changing type to NodePort",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.Type = core.ServiceTypeNodePort newSvc.Spec.Type = core.ServiceTypeNodePort
oldSvc.Spec.ClusterIP = "1.2.3.4" oldSvc.Spec.ClusterIP = "1.2.3.4"
@ -13653,6 +13696,7 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "Service with LoadBalancer type can change its empty ClusterIP when changing type to NodePort", name: "Service with LoadBalancer type can change its empty ClusterIP when changing type to NodePort",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.Type = core.ServiceTypeNodePort newSvc.Spec.Type = core.ServiceTypeNodePort
oldSvc.Spec.ClusterIP = "" oldSvc.Spec.ClusterIP = ""
@ -14144,9 +14188,11 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "update LoadBalancer type of service without change LoadBalancerClass", name: "update LoadBalancer type of service without change LoadBalancerClass",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-old") oldSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-old")
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-old") newSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-old")
}, },
numErrs: 0, numErrs: 0,
@ -14155,9 +14201,11 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "invalid: change LoadBalancerClass when update service", name: "invalid: change LoadBalancerClass when update service",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-old") oldSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-old")
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-new") newSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-new")
}, },
numErrs: 1, numErrs: 1,
@ -14166,9 +14214,11 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "invalid: unset LoadBalancerClass when update service", name: "invalid: unset LoadBalancerClass when update service",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-old") oldSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-old")
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.LoadBalancerClass = nil newSvc.Spec.LoadBalancerClass = nil
}, },
numErrs: 1, numErrs: 1,
@ -14177,9 +14227,11 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "invalid: set LoadBalancerClass when update service", name: "invalid: set LoadBalancerClass when update service",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.LoadBalancerClass = nil oldSvc.Spec.LoadBalancerClass = nil
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-new") newSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-new")
}, },
numErrs: 1, numErrs: 1,
@ -14190,6 +14242,7 @@ func TestValidateServiceUpdate(t *testing.T) {
oldSvc.Spec.Type = core.ServiceTypeClusterIP oldSvc.Spec.Type = core.ServiceTypeClusterIP
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-load-balancer-class") newSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-load-balancer-class")
}, },
numErrs: 0, numErrs: 0,
@ -14200,6 +14253,7 @@ func TestValidateServiceUpdate(t *testing.T) {
oldSvc.Spec.Type = core.ServiceTypeClusterIP oldSvc.Spec.Type = core.ServiceTypeClusterIP
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.LoadBalancerClass = nil newSvc.Spec.LoadBalancerClass = nil
}, },
numErrs: 0, numErrs: 0,
@ -14210,6 +14264,7 @@ func TestValidateServiceUpdate(t *testing.T) {
oldSvc.Spec.Type = core.ServiceTypeClusterIP oldSvc.Spec.Type = core.ServiceTypeClusterIP
newSvc.Spec.Type = core.ServiceTypeLoadBalancer newSvc.Spec.Type = core.ServiceTypeLoadBalancer
newSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
newSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("Bad/LoadBalancerclass") newSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("Bad/LoadBalancerclass")
}, },
numErrs: 2, numErrs: 2,
@ -14248,6 +14303,7 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "invalid: set LoadBalancerClass when update from LoadBalancer service to non LoadBalancer type of service", name: "invalid: set LoadBalancerClass when update from LoadBalancer service to non LoadBalancer type of service",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-load-balancer-class") oldSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-load-balancer-class")
newSvc.Spec.Type = core.ServiceTypeClusterIP newSvc.Spec.Type = core.ServiceTypeClusterIP
@ -14259,6 +14315,7 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "invalid: set LoadBalancerClass when update from LoadBalancer service to non LoadBalancer type of service", name: "invalid: set LoadBalancerClass when update from LoadBalancer service to non LoadBalancer type of service",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-load-balancer-class") oldSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-load-balancer-class")
newSvc.Spec.Type = core.ServiceTypeExternalName newSvc.Spec.Type = core.ServiceTypeExternalName
@ -14270,6 +14327,7 @@ func TestValidateServiceUpdate(t *testing.T) {
name: "invalid: set LoadBalancerClass when update from LoadBalancer service to non LoadBalancer type of service", name: "invalid: set LoadBalancerClass when update from LoadBalancer service to non LoadBalancer type of service",
tweakSvc: func(oldSvc, newSvc *core.Service) { tweakSvc: func(oldSvc, newSvc *core.Service) {
oldSvc.Spec.Type = core.ServiceTypeLoadBalancer oldSvc.Spec.Type = core.ServiceTypeLoadBalancer
oldSvc.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
oldSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-load-balancer-class") oldSvc.Spec.LoadBalancerClass = utilpointer.StringPtr("test.com/test-load-balancer-class")
newSvc.Spec.Type = core.ServiceTypeNodePort newSvc.Spec.Type = core.ServiceTypeNodePort

View File

@ -736,7 +736,7 @@ func TestServiceRegistryLoadBalancerService(t *testing.T) {
ctx := genericapirequest.NewDefaultContext() ctx := genericapirequest.NewDefaultContext()
storage, server := NewTestREST(t, []api.IPFamily{api.IPv4Protocol}) storage, server := NewTestREST(t, []api.IPFamily{api.IPv4Protocol})
defer server.Terminate(t) defer server.Terminate(t)
svc := svctest.MakeService("foo", svctest.SetTypeLoadBalancer) svc := svctest.MakeService("foo", svctest.SetTypeLoadBalancer, svctest.SetAllocateLBNodePortTrue)
_, err := storage.Create(ctx, svc, rest.ValidateAllObjectFunc, &metav1.CreateOptions{}) _, err := storage.Create(ctx, svc, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
if err != nil { if err != nil {
t.Errorf("Failed to create service: %#v", err) t.Errorf("Failed to create service: %#v", err)
@ -755,12 +755,6 @@ func TestServiceRegistryLoadBalancerService(t *testing.T) {
} }
func TestAllocateLoadBalancerNodePorts(t *testing.T) { func TestAllocateLoadBalancerNodePorts(t *testing.T) {
setAlloc := func(val bool) svctest.Tweak {
return func(s *api.Service) {
s.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(val)
}
}
testcases := []struct { testcases := []struct {
name string name string
svc *api.Service svc *api.Service
@ -769,12 +763,12 @@ func TestAllocateLoadBalancerNodePorts(t *testing.T) {
expectError bool expectError bool
}{{ }{{
name: "allocate false, gate on", name: "allocate false, gate on",
svc: svctest.MakeService("alloc-false", svctest.SetTypeLoadBalancer, setAlloc(false)), svc: svctest.MakeService("alloc-false", svctest.SetTypeLoadBalancer, svctest.SetAllocateLBNodePortFalse),
expectNodePorts: false, expectNodePorts: false,
allocateNodePortGate: true, allocateNodePortGate: true,
}, { }, {
name: "allocate true, gate on", name: "allocate true, gate on",
svc: svctest.MakeService("alloc-true", svctest.SetTypeLoadBalancer, setAlloc(true)), svc: svctest.MakeService("alloc-true", svctest.SetTypeLoadBalancer, svctest.SetAllocateLBNodePortTrue),
expectNodePorts: true, expectNodePorts: true,
allocateNodePortGate: true, allocateNodePortGate: true,
}, { }, {
@ -784,12 +778,12 @@ func TestAllocateLoadBalancerNodePorts(t *testing.T) {
allocateNodePortGate: false, allocateNodePortGate: false,
}, { }, {
name: "allocate false, gate off", name: "allocate false, gate off",
svc: svctest.MakeService("alloc-false", svctest.SetTypeLoadBalancer, setAlloc(false)), svc: svctest.MakeService("alloc-false", svctest.SetTypeLoadBalancer, svctest.SetAllocateLBNodePortFalse),
expectNodePorts: true, expectNodePorts: true,
allocateNodePortGate: false, allocateNodePortGate: false,
}, { }, {
name: "allocate true, gate off", name: "allocate true, gate off",
svc: svctest.MakeService("alloc-true", svctest.SetTypeLoadBalancer, setAlloc(true)), svc: svctest.MakeService("alloc-true", svctest.SetTypeLoadBalancer, svctest.SetAllocateLBNodePortTrue),
expectNodePorts: true, expectNodePorts: true,
allocateNodePortGate: false, allocateNodePortGate: false,
}} }}
@ -948,6 +942,7 @@ func TestServiceRegistryUpdateLoadBalancerService(t *testing.T) {
// Modify to be loadbalancer. // Modify to be loadbalancer.
svc2 := obj.(*api.Service).DeepCopy() svc2 := obj.(*api.Service).DeepCopy()
svc2.Spec.Type = api.ServiceTypeLoadBalancer svc2.Spec.Type = api.ServiceTypeLoadBalancer
svc2.Spec.AllocateLoadBalancerNodePorts = utilpointer.BoolPtr(true)
if _, _, err := storage.Update(ctx, svc2.Name, rest.DefaultUpdatedObjectInfo(svc2), rest.ValidateAllObjectFunc, rest.ValidateAllObjectUpdateFunc, false, &metav1.UpdateOptions{}); err != nil { if _, _, err := storage.Update(ctx, svc2.Name, rest.DefaultUpdatedObjectInfo(svc2), rest.ValidateAllObjectFunc, rest.ValidateAllObjectUpdateFunc, false, &metav1.UpdateOptions{}); err != nil {
t.Fatalf("Unexpected error: %v", err) t.Fatalf("Unexpected error: %v", err)
} }
@ -970,7 +965,9 @@ func TestServiceRegistryUpdateMultiPortLoadBalancerService(t *testing.T) {
svctest.SetTypeLoadBalancer, svctest.SetTypeLoadBalancer,
svctest.SetPorts( svctest.SetPorts(
svctest.MakeServicePort("p", 6502, intstr.FromInt(6502), api.ProtocolTCP), svctest.MakeServicePort("p", 6502, intstr.FromInt(6502), api.ProtocolTCP),
svctest.MakeServicePort("q", 8086, intstr.FromInt(8086), api.ProtocolTCP))) svctest.MakeServicePort("q", 8086, intstr.FromInt(8086), api.ProtocolTCP)),
svctest.SetAllocateLBNodePortTrue,
)
obj, err := storage.Create(ctx, svc1, rest.ValidateAllObjectFunc, &metav1.CreateOptions{}) obj, err := storage.Create(ctx, svc1, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
if err != nil { if err != nil {
t.Fatalf("Unexpected error: %v", err) t.Fatalf("Unexpected error: %v", err)
@ -1324,7 +1321,7 @@ func TestServiceRegistryIPLoadBalancer(t *testing.T) {
storage, server := NewTestREST(t, []api.IPFamily{api.IPv4Protocol}) storage, server := NewTestREST(t, []api.IPFamily{api.IPv4Protocol})
defer server.Terminate(t) defer server.Terminate(t)
svc := svctest.MakeService("foo", svctest.SetTypeLoadBalancer) svc := svctest.MakeService("foo", svctest.SetTypeLoadBalancer, svctest.SetAllocateLBNodePortTrue)
ctx := genericapirequest.NewDefaultContext() ctx := genericapirequest.NewDefaultContext()
createdSvc, err := storage.Create(ctx, svc, rest.ValidateAllObjectFunc, &metav1.CreateOptions{}) createdSvc, err := storage.Create(ctx, svc, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
if createdSvc == nil || err != nil { if createdSvc == nil || err != nil {
@ -1353,9 +1350,13 @@ func TestServiceRegistryExternalTrafficHealthCheckNodePortAllocation(t *testing.
ctx := genericapirequest.NewDefaultContext() ctx := genericapirequest.NewDefaultContext()
storage, server := NewTestREST(t, []api.IPFamily{api.IPv4Protocol}) storage, server := NewTestREST(t, []api.IPFamily{api.IPv4Protocol})
defer server.Terminate(t) defer server.Terminate(t)
svc := svctest.MakeService("external-lb-esipp", svctest.SetTypeLoadBalancer, func(s *api.Service) { svc := svctest.MakeService("external-lb-esipp",
svctest.SetTypeLoadBalancer,
svctest.SetAllocateLBNodePortTrue,
func(s *api.Service) {
s.Spec.ExternalTrafficPolicy = api.ServiceExternalTrafficPolicyTypeLocal s.Spec.ExternalTrafficPolicy = api.ServiceExternalTrafficPolicyTypeLocal
}) },
)
obj, err := storage.Create(ctx, svc, rest.ValidateAllObjectFunc, &metav1.CreateOptions{}) obj, err := storage.Create(ctx, svc, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
if obj == nil || err != nil { if obj == nil || err != nil {
t.Errorf("Unexpected failure creating service %v", err) t.Errorf("Unexpected failure creating service %v", err)
@ -1377,13 +1378,17 @@ func TestServiceRegistryExternalTrafficHealthCheckNodePortUserAllocation(t *test
ctx := genericapirequest.NewDefaultContext() ctx := genericapirequest.NewDefaultContext()
storage, server := NewTestREST(t, []api.IPFamily{api.IPv4Protocol}) storage, server := NewTestREST(t, []api.IPFamily{api.IPv4Protocol})
defer server.Terminate(t) defer server.Terminate(t)
svc := svctest.MakeService("external-lb-esipp", svctest.SetTypeLoadBalancer, func(s *api.Service) { svc := svctest.MakeService("external-lb-esipp",
svctest.SetTypeLoadBalancer,
svctest.SetAllocateLBNodePortTrue,
func(s *api.Service) {
// hard-code NodePort to make sure it doesn't conflict with the healthport. // hard-code NodePort to make sure it doesn't conflict with the healthport.
// TODO: remove this once http://issue.k8s.io/93922 fixes auto-allocation conflicting with user-specified health check ports // TODO: remove this once http://issue.k8s.io/93922 fixes auto-allocation conflicting with user-specified health check ports
s.Spec.Ports[0].NodePort = 30500 s.Spec.Ports[0].NodePort = 30500
s.Spec.ExternalTrafficPolicy = api.ServiceExternalTrafficPolicyTypeLocal s.Spec.ExternalTrafficPolicy = api.ServiceExternalTrafficPolicyTypeLocal
s.Spec.HealthCheckNodePort = 30501 s.Spec.HealthCheckNodePort = 30501
}) },
)
obj, err := storage.Create(ctx, svc, rest.ValidateAllObjectFunc, &metav1.CreateOptions{}) obj, err := storage.Create(ctx, svc, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
if obj == nil || err != nil { if obj == nil || err != nil {
t.Fatalf("Unexpected failure creating service :%v", err) t.Fatalf("Unexpected failure creating service :%v", err)
@ -1423,9 +1428,13 @@ func TestServiceRegistryExternalTrafficGlobal(t *testing.T) {
ctx := genericapirequest.NewDefaultContext() ctx := genericapirequest.NewDefaultContext()
storage, server := NewTestREST(t, []api.IPFamily{api.IPv4Protocol}) storage, server := NewTestREST(t, []api.IPFamily{api.IPv4Protocol})
defer server.Terminate(t) defer server.Terminate(t)
svc := svctest.MakeService("external-lb-esipp", svctest.SetTypeLoadBalancer, func(s *api.Service) { svc := svctest.MakeService("external-lb-esipp",
svctest.SetTypeLoadBalancer,
svctest.SetAllocateLBNodePortTrue,
func(s *api.Service) {
s.Spec.ExternalTrafficPolicy = api.ServiceExternalTrafficPolicyTypeCluster s.Spec.ExternalTrafficPolicy = api.ServiceExternalTrafficPolicyTypeCluster
}) },
)
obj, err := storage.Create(ctx, svc, rest.ValidateAllObjectFunc, &metav1.CreateOptions{}) obj, err := storage.Create(ctx, svc, rest.ValidateAllObjectFunc, &metav1.CreateOptions{})
if obj == nil || err != nil { if obj == nil || err != nil {
t.Errorf("Unexpected failure creating service %v", err) t.Errorf("Unexpected failure creating service %v", err)

View File

@ -36,7 +36,6 @@ import (
"k8s.io/kubernetes/test/e2e/framework" "k8s.io/kubernetes/test/e2e/framework"
"k8s.io/kubernetes/test/utils/crd" "k8s.io/kubernetes/test/utils/crd"
imageutils "k8s.io/kubernetes/test/utils/image" imageutils "k8s.io/kubernetes/test/utils/image"
"k8s.io/utils/pointer"
"github.com/onsi/ginkgo" "github.com/onsi/ginkgo"
) )
@ -111,7 +110,7 @@ var _ = SIGDescribe("ResourceQuota", func() {
framework.ExpectNoError(err) framework.ExpectNoError(err)
ginkgo.By("Not allowing a LoadBalancer Service with NodePort to be created that exceeds remaining quota") ginkgo.By("Not allowing a LoadBalancer Service with NodePort to be created that exceeds remaining quota")
loadbalancer := newTestServiceForQuota("test-service-lb", v1.ServiceTypeLoadBalancer, false) loadbalancer := newTestServiceForQuota("test-service-lb", v1.ServiceTypeLoadBalancer, true)
_, err = f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(context.TODO(), loadbalancer, metav1.CreateOptions{}) _, err = f.ClientSet.CoreV1().Services(f.Namespace.Name).Create(context.TODO(), loadbalancer, metav1.CreateOptions{})
framework.ExpectError(err) framework.ExpectError(err)
@ -1737,6 +1736,12 @@ func newTestReplicaSetForQuota(name, image string, replicas int32) *appsv1.Repli
// newTestServiceForQuota returns a simple service // newTestServiceForQuota returns a simple service
func newTestServiceForQuota(name string, serviceType v1.ServiceType, allocateLoadBalancerNodePorts bool) *v1.Service { func newTestServiceForQuota(name string, serviceType v1.ServiceType, allocateLoadBalancerNodePorts bool) *v1.Service {
var allocateNPs *bool
// Only set allocateLoadBalancerNodePorts when service type is LB
if serviceType == v1.ServiceTypeLoadBalancer {
allocateNPs = &allocateLoadBalancerNodePorts
}
return &v1.Service{ return &v1.Service{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: name, Name: name,
@ -1747,7 +1752,7 @@ func newTestServiceForQuota(name string, serviceType v1.ServiceType, allocateLoa
Port: 80, Port: 80,
TargetPort: intstr.FromInt(80), TargetPort: intstr.FromInt(80),
}}, }},
AllocateLoadBalancerNodePorts: pointer.BoolPtr(allocateLoadBalancerNodePorts), AllocateLoadBalancerNodePorts: allocateNPs,
}, },
} }
} }