// getPortForward handles a new restful port forward request. It determines the // pod name and uid and then calls ServePortForward. func (s *Server) getPortForward(request *restful.Request, response *restful.Response) { params := getRequestParams(request) pod, ok := s.host.GetPodByName(params.podNamespace, params.podName) if !ok { response.WriteError(http.StatusNotFound, fmt.Errorf("pod does not exist")) return } if len(params.podUID) > 0 && pod.UID != params.podUID { response.WriteError(http.StatusNotFound, fmt.Errorf("pod not found")) return } redirect, err := s.host.GetPortForward(pod.Name, pod.Namespace, pod.UID) if err != nil { response.WriteError(streaming.HTTPStatus(err), err) return } if redirect != nil { http.Redirect(response.ResponseWriter, request.Request, redirect.String(), http.StatusFound) return } portforward.ServePortForward(response.ResponseWriter, request.Request, s.host, kubecontainer.GetPodFullName(pod), params.podUID, s.host.StreamingConnectionIdleTimeout(), remotecommand.DefaultStreamCreationTimeout) }
// fakePortForwardServer creates an HTTP server that can handle port forwarding // requests. func fakePortForwardServer(t *testing.T, testName string, serverSends, expectedFromClient map[uint16]string) http.HandlerFunc { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { pf := &fakePortForwarder{ expected: expectedFromClient, received: make(map[uint16]string), send: serverSends, } portforward.ServePortForward(w, req, pf, "pod", "uid", 0, 10*time.Second) for port, expected := range expectedFromClient { actual, ok := pf.received[port] if !ok { t.Errorf("%s: server didn't receive any data for port %d", testName, port) continue } if expected != actual { t.Errorf("%s: server expected to receive %q, got %q for port %d", testName, expected, actual, port) } } for port, actual := range pf.received { if _, ok := expectedFromClient[port]; !ok { t.Errorf("%s: server unexpectedly received %q for port %d", testName, actual, port) } } }) }
// getPortForward handles a new restful port forward request. It determines the // pod name and uid and then calls ServePortForward. func (s *Server) getPortForward(request *restful.Request, response *restful.Response) { podNamespace, podID, uid := getPodCoordinates(request) pod, ok := s.host.GetPodByName(podNamespace, podID) if !ok { response.WriteError(http.StatusNotFound, fmt.Errorf("pod does not exist")) return } podName := kubecontainer.GetPodFullName(pod) portforward.ServePortForward(response.ResponseWriter, request.Request, s.host, podName, uid, s.host.StreamingConnectionIdleTimeout(), remotecommand.DefaultStreamCreationTimeout) }
func (s *server) servePortForward(req *restful.Request, resp *restful.Response) { podSandboxID := req.PathParameter("podSandboxID") if podSandboxID == "" { resp.WriteError(http.StatusBadRequest, errors.New("missing required podSandboxID path parameter")) return } portforward.ServePortForward( resp.ResponseWriter, req.Request, s.runtime, podSandboxID, "", // unused: podUID s.config.StreamIdleTimeout, s.config.StreamCreationTimeout) }
func (s *server) servePortForward(req *restful.Request, resp *restful.Response) { token := req.PathParameter("token") cachedRequest, ok := s.cache.Consume(token) if !ok { http.NotFound(resp.ResponseWriter, req.Request) return } pf, ok := cachedRequest.(*runtimeapi.PortForwardRequest) if !ok { http.NotFound(resp.ResponseWriter, req.Request) return } portforward.ServePortForward( resp.ResponseWriter, req.Request, s.runtime, pf.GetPodSandboxId(), "", // unused: podUID s.config.StreamIdleTimeout, s.config.StreamCreationTimeout) }