diff --git a/pkg/api/validation/validation.go b/pkg/api/validation/validation.go index ac53ae8b3bc..3783255d4ec 100644 --- a/pkg/api/validation/validation.go +++ b/pkg/api/validation/validation.go @@ -1224,7 +1224,7 @@ func ValidateService(service *api.Service) errs.ValidationErrorList { allErrs := errs.ValidationErrorList{} allErrs = append(allErrs, ValidateObjectMeta(&service.ObjectMeta, true, ValidateServiceName).Prefix("metadata")...) - if len(service.Spec.Ports) == 0 { + if len(service.Spec.Ports) == 0 && service.Spec.ClusterIP != api.ClusterIPNone { allErrs = append(allErrs, errs.NewFieldRequired("spec.ports")) } if service.Spec.Type == api.ServiceTypeLoadBalancer { diff --git a/pkg/api/validation/validation_test.go b/pkg/api/validation/validation_test.go index 08a60b5100d..bfd0dd86bc7 100644 --- a/pkg/api/validation/validation_test.go +++ b/pkg/api/validation/validation_test.go @@ -1792,6 +1792,14 @@ func TestValidateService(t *testing.T) { }, numErrs: 1, }, + { + name: "missing ports but headless", + tweakSvc: func(s *api.Service) { + s.Spec.Ports = nil + s.Spec.ClusterIP = api.ClusterIPNone + }, + numErrs: 0, + }, { name: "empty port[0] name", tweakSvc: func(s *api.Service) {