diff --git a/pkg/api/validation/validation.go b/pkg/api/validation/validation.go index ea930ec9e0..b287747b34 100644 --- a/pkg/api/validation/validation.go +++ b/pkg/api/validation/validation.go @@ -963,6 +963,11 @@ func ValidatePodSpec(spec *api.PodSpec) errs.ValidationErrorList { allErrs = append(allErrs, ValidateLabels(spec.NodeSelector, "nodeSelector")...) allErrs = append(allErrs, validateHostNetwork(spec.HostNetwork, spec.Containers).Prefix("hostNetwork")...) allErrs = append(allErrs, validateImagePullSecrets(spec.ImagePullSecrets).Prefix("imagePullSecrets")...) + if len(spec.ServiceAccount) > 0 { + if ok, msg := ValidateServiceAccountName(spec.ServiceAccount, false); !ok { + allErrs = append(allErrs, errs.NewFieldInvalid("serviceAccount", spec.ServiceAccount, msg)) + } + } if spec.ActiveDeadlineSeconds != nil { if *spec.ActiveDeadlineSeconds <= 0 { diff --git a/pkg/api/validation/validation_test.go b/pkg/api/validation/validation_test.go index 47d330b2f6..72bda67fdd 100644 --- a/pkg/api/validation/validation_test.go +++ b/pkg/api/validation/validation_test.go @@ -1052,6 +1052,7 @@ func TestValidatePodSpec(t *testing.T) { NodeName: "foobar", DNSPolicy: api.DNSClusterFirst, ActiveDeadlineSeconds: &activeDeadlineSeconds, + ServiceAccount: "acct", }, { // Populate HostNetwork. Containers: []api.Container{ @@ -1092,6 +1093,12 @@ func TestValidatePodSpec(t *testing.T) { RestartPolicy: api.RestartPolicyAlways, Containers: []api.Container{{Name: "ctr", Image: "image", ImagePullPolicy: "IfNotPresent"}}, }, + "bad service account name": { + Containers: []api.Container{{Name: "ctr", Image: "image", ImagePullPolicy: "IfNotPresent"}}, + RestartPolicy: api.RestartPolicyAlways, + DNSPolicy: api.DNSClusterFirst, + ServiceAccount: "invalidName", + }, "bad restart policy": { RestartPolicy: "UnknowPolicy", DNSPolicy: api.DNSClusterFirst,