From 2e68d087a979650c39e80e848318c1d1f370a58c Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Sun, 15 Jun 2014 21:19:35 -0700 Subject: [PATCH] Add udp support. --- pkg/kubelet/kubelet.go | 14 +++++++++++++- pkg/kubelet/kubelet_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 9923f896335..0167af40310 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -274,7 +274,19 @@ func makePortsAndBindings(container *api.Container) (map[docker.Port]struct{}, m exteriorPort := port.HostPort // 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 - dockerPort := docker.Port(strconv.Itoa(interiorPort) + "/tcp") + var protocol string + switch port.Protocol { + case "udp": + protocol = "/udp" + case "tcp": + protocol = "/tcp" + default: + if len(port.Protocol) != 0 { + log.Printf("Unknown protocol: %s, defaulting to tcp.", port.Protocol) + } + protocol = "/tcp" + } + dockerPort := docker.Port(strconv.Itoa(interiorPort) + protocol) exposedPorts[dockerPort] = struct{}{} portBindings[dockerPort] = []docker.PortBinding{ { diff --git a/pkg/kubelet/kubelet_test.go b/pkg/kubelet/kubelet_test.go index 06666c5ad5f..29928b19313 100644 --- a/pkg/kubelet/kubelet_test.go +++ b/pkg/kubelet/kubelet_test.go @@ -677,6 +677,17 @@ func TestMakePortsAndBindings(t *testing.T) { { ContainerPort: 443, HostPort: 443, + Protocol: "tcp", + }, + { + ContainerPort: 444, + HostPort: 444, + Protocol: "udp", + }, + { + ContainerPort: 445, + HostPort: 445, + Protocol: "foobar", }, }, } @@ -685,6 +696,27 @@ func TestMakePortsAndBindings(t *testing.T) { len(container.Ports) != len(bindings) { t.Errorf("Unexpected ports and bindings, %#v %#v %#v", container, exposedPorts, bindings) } + for key,value := range bindings { + switch value[0].HostPort { + case "8080": + if !reflect.DeepEqual(docker.Port("80/tcp"), key) { + t.Errorf("Unexpected docker port: %#v", key) + } + case "443": + if !reflect.DeepEqual(docker.Port("443/tcp"), key) { + t.Errorf("Unexpected docker port: %#v", key) + } + case "444": + if !reflect.DeepEqual(docker.Port("444/udp"), key) { + t.Errorf("Unexpected docker port: %#v", key) + } + case "445": + if !reflect.DeepEqual(docker.Port("445/tcp"), key) { + t.Errorf("Unexpected docker port: %#v", key) + } +} +} + } func TestExtractFromNonExistentFile(t *testing.T) {