From dd14f6368a9c9e13d80a80afec7579211984acb6 Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Fri, 30 Sep 2016 11:30:45 +0800 Subject: [PATCH] Fake docker portfoward for in-process docker CRI integration --- pkg/kubelet/dockershim/legacy.go | 2 +- pkg/kubelet/dockertools/docker_manager.go | 7 ++++++- pkg/kubelet/kuberuntime/kuberuntime_manager.go | 8 ++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/pkg/kubelet/dockershim/legacy.go b/pkg/kubelet/dockershim/legacy.go index 2335e47d5cc..da4fd6521ad 100644 --- a/pkg/kubelet/dockershim/legacy.go +++ b/pkg/kubelet/dockershim/legacy.go @@ -40,7 +40,7 @@ func (ds *dockerService) GetContainerLogs(pod *api.Pod, containerID kubecontaine } func (ds *dockerService) PortForward(pod *kubecontainer.Pod, port uint16, stream io.ReadWriteCloser) error { - return fmt.Errorf("not implemented") + return dockertools.PortForward(ds.client, pod, port, stream) } func (ds *dockerService) ExecInContainer(containerID kubecontainer.ContainerID, cmd []string, stdin io.Reader, stdout, stderr io.WriteCloser, tty bool, resize <-chan term.Size) error { diff --git a/pkg/kubelet/dockertools/docker_manager.go b/pkg/kubelet/dockertools/docker_manager.go index ce098d54829..c9bb1b52659 100644 --- a/pkg/kubelet/dockertools/docker_manager.go +++ b/pkg/kubelet/dockertools/docker_manager.go @@ -1273,11 +1273,16 @@ func noPodInfraContainerError(podName, podNamespace string) error { // - should we support nsenter + socat on the host? (current impl) // - should we support nsenter + socat in a container, running with elevated privs and --pid=host? func (dm *DockerManager) PortForward(pod *kubecontainer.Pod, port uint16, stream io.ReadWriteCloser) error { + return PortForward(dm.client, pod, port, stream) +} + +// Temporarily export this function to share with dockershim. +func PortForward(client DockerInterface, pod *kubecontainer.Pod, port uint16, stream io.ReadWriteCloser) error { podInfraContainer := pod.FindContainerByName(PodInfraContainerName) if podInfraContainer == nil { return noPodInfraContainerError(pod.Name, pod.Namespace) } - container, err := dm.client.InspectContainer(podInfraContainer.ID.ID) + container, err := client.InspectContainer(podInfraContainer.ID.ID) if err != nil { return err } diff --git a/pkg/kubelet/kuberuntime/kuberuntime_manager.go b/pkg/kubelet/kuberuntime/kuberuntime_manager.go index 9e6245c37ae..4d6cf804172 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_manager.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_manager.go @@ -32,6 +32,7 @@ import ( internalApi "k8s.io/kubernetes/pkg/kubelet/api" runtimeApi "k8s.io/kubernetes/pkg/kubelet/api/v1alpha1/runtime" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" + "k8s.io/kubernetes/pkg/kubelet/dockershim" "k8s.io/kubernetes/pkg/kubelet/events" "k8s.io/kubernetes/pkg/kubelet/images" "k8s.io/kubernetes/pkg/kubelet/lifecycle" @@ -851,5 +852,12 @@ func (m *kubeGenericRuntimeManager) GetPodContainerID(pod *kubecontainer.Pod) (k // Forward the specified port from the specified pod to the stream. func (m *kubeGenericRuntimeManager) PortForward(pod *kubecontainer.Pod, port uint16, stream io.ReadWriteCloser) error { + // Use docker portforward directly for in-process docker integration + // now to unblock other tests. + // TODO: remove this hack after portforward is defined in CRI. + if ds, ok := m.runtimeService.(dockershim.DockerLegacyService); ok { + return ds.PortForward(pod, port, stream) + } + return fmt.Errorf("not implemented") }