Merge pull request #43370 from feiskyer/port-mapping
Automatic merge from submit-queue (batch tested with PRs 42659, 43370) dockershim: process protocol correctly for port mapping **What this PR does / why we need it**: dockershim: process protocol correctly for port mapping. **Which issue this PR fixes** Fixes #43365. **Special notes for your reviewer**: Should be included in v1.6. **Release note**: ```release-note NONE ``` cc/ @Random-Liu @justinsb @kubernetes/sig-node-pr-reviews
This commit is contained in:
		| @@ -96,6 +96,7 @@ go_test( | |||||||
|         "//vendor:github.com/blang/semver", |         "//vendor:github.com/blang/semver", | ||||||
|         "//vendor:github.com/docker/engine-api/types", |         "//vendor:github.com/docker/engine-api/types", | ||||||
|         "//vendor:github.com/docker/engine-api/types/container", |         "//vendor:github.com/docker/engine-api/types/container", | ||||||
|  |         "//vendor:github.com/docker/go-connections/nat", | ||||||
|         "//vendor:github.com/golang/mock/gomock", |         "//vendor:github.com/golang/mock/gomock", | ||||||
|         "//vendor:github.com/stretchr/testify/assert", |         "//vendor:github.com/stretchr/testify/assert", | ||||||
|         "//vendor:github.com/stretchr/testify/require", |         "//vendor:github.com/stretchr/testify/require", | ||||||
|   | |||||||
| @@ -149,10 +149,10 @@ func makePortsAndBindings(pm []*runtimeapi.PortMapping) (map[dockernat.Port]stru | |||||||
| 		// Some of this port stuff is under-documented voodoo. | 		// Some of this port stuff is under-documented voodoo. | ||||||
| 		// See http://stackoverflow.com/questions/20428302/binding-a-port-to-a-host-interface-using-the-rest-api | 		// See http://stackoverflow.com/questions/20428302/binding-a-port-to-a-host-interface-using-the-rest-api | ||||||
| 		var protocol string | 		var protocol string | ||||||
| 		switch strings.ToUpper(string(port.Protocol)) { | 		switch port.Protocol { | ||||||
| 		case "UDP": | 		case runtimeapi.Protocol_UDP: | ||||||
| 			protocol = "/udp" | 			protocol = "/udp" | ||||||
| 		case "TCP": | 		case runtimeapi.Protocol_TCP: | ||||||
| 			protocol = "/tcp" | 			protocol = "/tcp" | ||||||
| 		default: | 		default: | ||||||
| 			glog.Warningf("Unknown protocol %q: defaulting to TCP", port.Protocol) | 			glog.Warningf("Unknown protocol %q: defaulting to TCP", port.Protocol) | ||||||
|   | |||||||
| @@ -22,6 +22,7 @@ import ( | |||||||
|  |  | ||||||
| 	"github.com/blang/semver" | 	"github.com/blang/semver" | ||||||
| 	dockertypes "github.com/docker/engine-api/types" | 	dockertypes "github.com/docker/engine-api/types" | ||||||
|  | 	dockernat "github.com/docker/go-connections/nat" | ||||||
| 	"github.com/stretchr/testify/assert" | 	"github.com/stretchr/testify/assert" | ||||||
| 	"github.com/stretchr/testify/require" | 	"github.com/stretchr/testify/require" | ||||||
|  |  | ||||||
| @@ -301,3 +302,87 @@ func TestEnsureSandboxImageExists(t *testing.T) { | |||||||
| 		assert.Equal(t, test.err, err != nil) | 		assert.Equal(t, test.err, err != nil) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|  | func TestMakePortsAndBindings(t *testing.T) { | ||||||
|  | 	for desc, test := range map[string]struct { | ||||||
|  | 		pm           []*runtimeapi.PortMapping | ||||||
|  | 		exposedPorts map[dockernat.Port]struct{} | ||||||
|  | 		portmappings map[dockernat.Port][]dockernat.PortBinding | ||||||
|  | 	}{ | ||||||
|  | 		"no port mapping": { | ||||||
|  | 			pm:           nil, | ||||||
|  | 			exposedPorts: map[dockernat.Port]struct{}{}, | ||||||
|  | 			portmappings: map[dockernat.Port][]dockernat.PortBinding{}, | ||||||
|  | 		}, | ||||||
|  | 		"tcp port mapping": { | ||||||
|  | 			pm: []*runtimeapi.PortMapping{ | ||||||
|  | 				{ | ||||||
|  | 					Protocol:      runtimeapi.Protocol_TCP, | ||||||
|  | 					ContainerPort: 80, | ||||||
|  | 					HostPort:      80, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			exposedPorts: map[dockernat.Port]struct{}{ | ||||||
|  | 				"80/tcp": {}, | ||||||
|  | 			}, | ||||||
|  | 			portmappings: map[dockernat.Port][]dockernat.PortBinding{ | ||||||
|  | 				"80/tcp": { | ||||||
|  | 					{ | ||||||
|  | 						HostPort: "80", | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 		"udp port mapping": { | ||||||
|  | 			pm: []*runtimeapi.PortMapping{ | ||||||
|  | 				{ | ||||||
|  | 					Protocol:      runtimeapi.Protocol_UDP, | ||||||
|  | 					ContainerPort: 80, | ||||||
|  | 					HostPort:      80, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			exposedPorts: map[dockernat.Port]struct{}{ | ||||||
|  | 				"80/udp": {}, | ||||||
|  | 			}, | ||||||
|  | 			portmappings: map[dockernat.Port][]dockernat.PortBinding{ | ||||||
|  | 				"80/udp": { | ||||||
|  | 					{ | ||||||
|  | 						HostPort: "80", | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 		"multipe port mappings": { | ||||||
|  | 			pm: []*runtimeapi.PortMapping{ | ||||||
|  | 				{ | ||||||
|  | 					Protocol:      runtimeapi.Protocol_TCP, | ||||||
|  | 					ContainerPort: 80, | ||||||
|  | 					HostPort:      80, | ||||||
|  | 				}, | ||||||
|  | 				{ | ||||||
|  | 					Protocol:      runtimeapi.Protocol_TCP, | ||||||
|  | 					ContainerPort: 80, | ||||||
|  | 					HostPort:      81, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 			exposedPorts: map[dockernat.Port]struct{}{ | ||||||
|  | 				"80/tcp": {}, | ||||||
|  | 			}, | ||||||
|  | 			portmappings: map[dockernat.Port][]dockernat.PortBinding{ | ||||||
|  | 				"80/tcp": { | ||||||
|  | 					{ | ||||||
|  | 						HostPort: "80", | ||||||
|  | 					}, | ||||||
|  | 					{ | ||||||
|  | 						HostPort: "81", | ||||||
|  | 					}, | ||||||
|  | 				}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
|  | 	} { | ||||||
|  | 		t.Logf("TestCase: %s", desc) | ||||||
|  | 		actualExposedPorts, actualPortMappings := makePortsAndBindings(test.pm) | ||||||
|  | 		assert.Equal(t, test.exposedPorts, actualExposedPorts) | ||||||
|  | 		assert.Equal(t, test.portmappings, actualPortMappings) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Kubernetes Submit Queue
					Kubernetes Submit Queue