diff --git a/cli/kubernetes/portForward.go b/cli/kubernetes/portForward.go index 6129671ea..4c5ef480f 100644 --- a/cli/kubernetes/portForward.go +++ b/cli/kubernetes/portForward.go @@ -2,6 +2,7 @@ package kubernetes import ( "bytes" + "context" "fmt" "k8s.io/apimachinery/pkg/util/httpstream" "k8s.io/client-go/tools/portforward" @@ -15,7 +16,7 @@ type PortForward struct { stopChan chan struct{} } -func NewPortForward(kubernetesProvider *Provider, namespace string, podName string, localPort uint16, podPort uint16) (*PortForward, error) { +func NewPortForward(kubernetesProvider *Provider, namespace string, podName string, localPort uint16, podPort uint16, cancel context.CancelFunc) (*PortForward, error) { dialer := getHttpDialer(kubernetesProvider, namespace, podName) stopChan, readyChan := make(chan struct{}, 1), make(chan struct{}, 1) out, errOut := new(bytes.Buffer), new(bytes.Buffer) @@ -24,10 +25,13 @@ func NewPortForward(kubernetesProvider *Provider, namespace string, podName stri if err != nil { return nil, err } - go forwarder.ForwardPorts() - //if err != nil { - // return nil, err - //} + go func () { + err = forwarder.ForwardPorts() // this is blocking + if err != nil { + fmt.Printf("kubernetes port-forwarding error: %s", err) + cancel() + } + }() return &PortForward{stopChan: stopChan}, nil } diff --git a/cli/kubernetes/watch.go b/cli/kubernetes/watch.go index b70107804..b37289063 100644 --- a/cli/kubernetes/watch.go +++ b/cli/kubernetes/watch.go @@ -24,6 +24,7 @@ func FilteredWatch(ctx context.Context, watcher watch.Interface, podFilter *rege if e.Object == nil { errorChan <- errors.New("kubernetes pod watch failed") + return } pod := e.Object.(*corev1.Pod) diff --git a/cli/mizu/mizu.go b/cli/mizu/mizu.go index 40c0061a1..fe959bbe6 100644 --- a/cli/mizu/mizu.go +++ b/cli/mizu/mizu.go @@ -78,7 +78,7 @@ func createPodAndPortForward(ctx context.Context, kubernetesProvider *kubernetes if modifiedPod.Status.Phase == "Running" && !isPodReady { isPodReady = true var err error - portForward, err = kubernetes.NewPortForward(kubernetesProvider, kubernetesProvider.Namespace, podName, config.Configuration.DashboardPort, 80) + portForward, err = kubernetes.NewPortForward(kubernetesProvider, kubernetesProvider.Namespace, podName, config.Configuration.DashboardPort, 80, cancel) if !config.Configuration.NoDashboard { fmt.Printf("Dashboard is now available at http://localhost:%d\n", config.Configuration.DashboardPort) }