From 023bf87c3888cf40683cc93b13ee7ca253293c40 Mon Sep 17 00:00:00 2001 From: derekwaynecarr Date: Thu, 18 Aug 2016 17:50:09 -0400 Subject: [PATCH] Service with type=NodePortr and clusterIP=None is not allowed --- pkg/api/validation/validation.go | 4 ++++ pkg/api/validation/validation_test.go | 23 +++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/pkg/api/validation/validation.go b/pkg/api/validation/validation.go index 03665339bb7..f73ab421488 100644 --- a/pkg/api/validation/validation.go +++ b/pkg/api/validation/validation.go @@ -2455,6 +2455,10 @@ func validateServiceFields(service *api.Service) field.ErrorList { if service.Spec.ClusterIP == "None" { allErrs = append(allErrs, field.Invalid(specPath.Child("clusterIP"), service.Spec.ClusterIP, "may not be set to 'None' for LoadBalancer services")) } + case api.ServiceTypeNodePort: + if service.Spec.ClusterIP == "None" { + allErrs = append(allErrs, field.Invalid(specPath.Child("clusterIP"), service.Spec.ClusterIP, "may not be set to 'None' for NodePort services")) + } case api.ServiceTypeExternalName: if service.Spec.ClusterIP != "" { allErrs = append(allErrs, field.Invalid(specPath.Child("clusterIP"), service.Spec.ClusterIP, "must be empty for ExternalName services")) diff --git a/pkg/api/validation/validation_test.go b/pkg/api/validation/validation_test.go index 47089acf031..29ebe974cfc 100644 --- a/pkg/api/validation/validation_test.go +++ b/pkg/api/validation/validation_test.go @@ -5474,6 +5474,15 @@ func TestValidateService(t *testing.T) { }, numErrs: 1, }, + { + name: "invalid node port with clusterIP None", + tweakSvc: func(s *api.Service) { + s.Spec.Type = api.ServiceTypeNodePort + s.Spec.Ports = append(s.Spec.Ports, api.ServicePort{Name: "q", Port: 1, Protocol: "TCP", NodePort: 1, TargetPort: intstr.FromInt(1)}) + s.Spec.ClusterIP = "None" + }, + numErrs: 1, + }, } for _, tc := range testCases { @@ -7069,6 +7078,20 @@ func TestValidateServiceUpdate(t *testing.T) { }, numErrs: 0, }, + { + name: "invalid node port with clusterIP None", + tweakSvc: func(oldSvc, newSvc *api.Service) { + oldSvc.Spec.Type = api.ServiceTypeNodePort + newSvc.Spec.Type = api.ServiceTypeNodePort + + oldSvc.Spec.Ports = append(oldSvc.Spec.Ports, api.ServicePort{Name: "q", Port: 1, Protocol: "TCP", NodePort: 1, TargetPort: intstr.FromInt(1)}) + newSvc.Spec.Ports = append(newSvc.Spec.Ports, api.ServicePort{Name: "q", Port: 1, Protocol: "TCP", NodePort: 1, TargetPort: intstr.FromInt(1)}) + + oldSvc.Spec.ClusterIP = "" + newSvc.Spec.ClusterIP = "None" + }, + numErrs: 1, + }, } for _, tc := range testCases {