From 3165bc169a2bfbfc1095a383e7863b3098fc56f6 Mon Sep 17 00:00:00 2001 From: Sean Sullivan Date: Fri, 19 Jul 2024 12:04:41 -0700 Subject: [PATCH] Falls back to SPDY for gorilla/websocket https proxy error Kubernetes-commit: 6450174ac9a07f15aecfa5f05d58755efc2192b7 --- pkg/cmd/attach/attach.go | 4 +++- pkg/cmd/exec/exec.go | 4 +++- pkg/cmd/portforward/portforward.go | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/pkg/cmd/attach/attach.go b/pkg/cmd/attach/attach.go index c1e8d83dc..b38760a1c 100644 --- a/pkg/cmd/attach/attach.go +++ b/pkg/cmd/attach/attach.go @@ -184,7 +184,9 @@ func createExecutor(url *url.URL, config *restclient.Config) (remotecommand.Exec if err != nil { return nil, err } - exec, err = remotecommand.NewFallbackExecutor(websocketExec, exec, httpstream.IsUpgradeFailure) + exec, err = remotecommand.NewFallbackExecutor(websocketExec, exec, func(err error) bool { + return httpstream.IsUpgradeFailure(err) || httpstream.IsHTTPSProxyError(err) + }) if err != nil { return nil, err } diff --git a/pkg/cmd/exec/exec.go b/pkg/cmd/exec/exec.go index 405807664..a6ec2f430 100644 --- a/pkg/cmd/exec/exec.go +++ b/pkg/cmd/exec/exec.go @@ -147,7 +147,9 @@ func createExecutor(url *url.URL, config *restclient.Config) (remotecommand.Exec if err != nil { return nil, err } - exec, err = remotecommand.NewFallbackExecutor(websocketExec, exec, httpstream.IsUpgradeFailure) + exec, err = remotecommand.NewFallbackExecutor(websocketExec, exec, func(err error) bool { + return httpstream.IsUpgradeFailure(err) || httpstream.IsHTTPSProxyError(err) + }) if err != nil { return nil, err } diff --git a/pkg/cmd/portforward/portforward.go b/pkg/cmd/portforward/portforward.go index 66d485895..027bffd4a 100644 --- a/pkg/cmd/portforward/portforward.go +++ b/pkg/cmd/portforward/portforward.go @@ -148,7 +148,9 @@ func (f *defaultPortForwarder) ForwardPorts(method string, url *url.URL, opts Po return err } // First attempt tunneling (websocket) dialer, then fallback to spdy dialer. - dialer = portforward.NewFallbackDialer(tunnelingDialer, dialer, httpstream.IsUpgradeFailure) + dialer = portforward.NewFallbackDialer(tunnelingDialer, dialer, func(err error) bool { + return httpstream.IsUpgradeFailure(err) || httpstream.IsHTTPSProxyError(err) + }) } fw, err := portforward.NewOnAddresses(dialer, opts.Address, opts.Ports, opts.StopChannel, opts.ReadyChannel, f.Out, f.ErrOut) if err != nil {