From 57e5bae8f6e6525e53ddded91282d2ae95b51787 Mon Sep 17 00:00:00 2001 From: Ed Snible Date: Sun, 4 Aug 2019 23:45:44 -0400 Subject: [PATCH] Contact pod before starting port forward, to verify connectivity (#16023) --- istioctl/pkg/kubernetes/client.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/istioctl/pkg/kubernetes/client.go b/istioctl/pkg/kubernetes/client.go index ce3b6b8079ba..87df2069bc19 100644 --- a/istioctl/pkg/kubernetes/client.go +++ b/istioctl/pkg/kubernetes/client.go @@ -355,6 +355,21 @@ func (client *Client) BuildPortForwarder(podName string, ns string, localPort in return nil, fmt.Errorf("failed establishing port-forward: %v", err) } + // Run the same check as k8s.io/kubectl/pkg/cmd/portforward/portforward.go + // so that we will fail early if there is a problem contacting API server. + podGet := client.Get().Resource("pods").Namespace(ns).Name(podName) + obj, err := podGet.Do().Get() + if err != nil { + return nil, fmt.Errorf("failed retrieving pod: %v", err) + } + pod, ok := obj.(*v1.Pod) + if !ok { + return nil, fmt.Errorf("failed getting pod: %v", err) + } + if pod.Status.Phase != v1.PodRunning { + return nil, fmt.Errorf("pod is not running. Status=%v", pod.Status.Phase) + } + return &PortForward{ Forwarder: fw, ReadyChannel: ready,