From 8829efaeb0b0c2e2fc8f38c3f5c75b283867c45e Mon Sep 17 00:00:00 2001 From: Tobias Hintze Date: Fri, 24 May 2019 17:32:38 +0200 Subject: [PATCH] Allow trailing dot for service.spec.externalName --- pkg/apis/core/validation/validation.go | 7 +++++-- pkg/apis/core/validation/validation_test.go | 9 +++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/pkg/apis/core/validation/validation.go b/pkg/apis/core/validation/validation.go index 1f92208cd5a..7eca587e120 100644 --- a/pkg/apis/core/validation/validation.go +++ b/pkg/apis/core/validation/validation.go @@ -3692,8 +3692,11 @@ func ValidateService(service *core.Service) field.ErrorList { if service.Spec.ClusterIP != "" { allErrs = append(allErrs, field.Forbidden(specPath.Child("clusterIP"), "must be empty for ExternalName services")) } - if len(service.Spec.ExternalName) > 0 { - allErrs = append(allErrs, ValidateDNS1123Subdomain(service.Spec.ExternalName, specPath.Child("externalName"))...) + + // The value (a CNAME) may have a trailing dot to denote it as fully qualified + cname := strings.TrimSuffix(service.Spec.ExternalName, ".") + if len(cname) > 0 { + allErrs = append(allErrs, ValidateDNS1123Subdomain(cname, specPath.Child("externalName"))...) } else { allErrs = append(allErrs, field.Required(specPath.Child("externalName"), "")) } diff --git a/pkg/apis/core/validation/validation_test.go b/pkg/apis/core/validation/validation_test.go index 2feccddb9b2..07ef601f50b 100644 --- a/pkg/apis/core/validation/validation_test.go +++ b/pkg/apis/core/validation/validation_test.go @@ -9306,6 +9306,15 @@ func TestValidateService(t *testing.T) { }, numErrs: 0, }, + { + name: "valid ExternalName (trailing dot)", + tweakSvc: func(s *core.Service) { + s.Spec.Type = core.ServiceTypeExternalName + s.Spec.ClusterIP = "" + s.Spec.ExternalName = "foo.bar.example.com." + }, + numErrs: 0, + }, { name: "invalid ExternalName clusterIP (valid IP)", tweakSvc: func(s *core.Service) {