Merge pull request #55591 from miaoyq/validate-port-of-service

Automatic merge from submit-queue (batch tested with PRs 54826, 53576, 55591, 54946, 54825). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.

Make sure the ports are valid when parsing portString

**What this PR does / why we need it**:
We need ensure the ports are valid when parsing `portString`.

**Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*:
Fixes #

**Special notes for your reviewer**:

**Release note**:

```release-note

```
This commit is contained in:
Kubernetes Submit Queue 2017-11-13 14:47:02 -08:00 committed by GitHub
commit 5888af447d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 0 deletions

View File

@ -89,14 +89,25 @@ func parsePorts(portString string) (int32, intstr.IntOrString, error) {
if err != nil {
return 0, intstr.FromInt(0), err
}
if errs := validation.IsValidPortNum(port); len(errs) != 0 {
return 0, intstr.FromInt(0), fmt.Errorf(strings.Join(errs, ","))
}
if len(portStringSlice) == 1 {
return int32(port), intstr.FromInt(int(port)), nil
}
var targetPort intstr.IntOrString
if portNum, err := strconv.Atoi(portStringSlice[1]); err != nil {
if errs := validation.IsValidPortName(portStringSlice[1]); len(errs) != 0 {
return 0, intstr.FromInt(0), fmt.Errorf(strings.Join(errs, ","))
}
targetPort = intstr.FromString(portStringSlice[1])
} else {
if errs := validation.IsValidPortNum(portNum); len(errs) != 0 {
return 0, intstr.FromInt(0), fmt.Errorf(strings.Join(errs, ","))
}
targetPort = intstr.FromInt(portNum)
}
return int32(port), targetPort, nil

View File

@ -115,6 +115,20 @@ func TestServiceBasicGenerate(t *testing.T) {
},
expectErr: false,
},
{
name: "invalid-port",
tcp: []string{"65536"},
clusterip: "None",
serviceType: v1.ServiceTypeClusterIP,
expectErr: true,
},
{
name: "invalid-port-mapping",
tcp: []string{"8080:-abc"},
clusterip: "None",
serviceType: v1.ServiceTypeClusterIP,
expectErr: true,
},
{
expectErr: true,
},