in portforward/portforward.go [67:110]
func (pf *PodPortForwarder) Start() error {
transport, upgrader, err := spdy.RoundTripperFor(pf.restCfg)
if err != nil {
return fmt.Errorf("failed to create spdy transport: %w", err)
}
dialer := spdy.NewDialer(
upgrader,
&http.Client{Transport: transport},
"POST",
pf.portforwardURL,
)
startCh := make(chan struct{})
// pick available local port randomly.
kubePortForwarder, err := kubepf.New(
dialer,
[]string{fmt.Sprintf("0:%d", pf.targetPort)},
nil,
startCh,
&debugLogger{},
&debugLogger{},
)
if err != nil {
return fmt.Errorf("failed to init kube port forward: %w", err)
}
errCh := make(chan error, 1)
go func() {
errCh <- kubePortForwarder.ForwardPorts()
}()
select {
case <-startCh:
case err := <-errCh:
return fmt.Errorf("failed to start kube port forward: %w", err)
case <-time.After(120 * time.Second):
return fmt.Errorf("timeout to start kube port forward")
}
pf.portForwarder = kubePortForwarder
return nil
}