Documentation ¶
Overview ¶
Among other files, this directory contains functionality for two stream proxies: streamtranslator.go and streamtunnel.go. Both of these proxies allow the inter-connection of WebSocket and SPDY streaming connections.
The stream translator proxy is used for the RemoteCommand subprotocol (e.g. kubectl exec, cp, and attach), and it connects the output streams of a WebSocket connection (e.g. STDIN, STDOUT, STDERR, TTY resize, and error streams) to the input streams of a SPDY connection.
The stream tunnel proxy tunnels SPDY frames through a WebSocket connection, and it is used for the PortForward subprotocol (e.g. kubectl port-forward). This proxy implements tunneling by transparently encoding and decoding SPDY framed data into and out of the payload of a WebSocket data frame. The primary structure for this tunneling is the TunnelingConnection. A lot of the other code in streamtunnel.go is for properly upgrading both the upstream SPDY connection and the downstream WebSocket connection before streaming begins.
Index ¶
- func NewRequestForProxy(location *url.URL, req *http.Request) (*http.Request, context.CancelFunc)
- func NewTranslatingHandler(delegate http.Handler, translator http.Handler, ...) http.Handler
- func ResolveCluster(services listersv1.ServiceLister, namespace, id string, port int32) (*url.URL, error)
- func ResolveEndpoint(services listersv1.ServiceLister, endpoints listersv1.EndpointsLister, ...) (*url.URL, error)
- type Options
- type StreamTranslatorHandler
- type TunnelingHandler
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewRequestForProxy ¶ added in v0.28.0
NewRequestForProxy returns a shallow copy of the original request with a context that may include a timeout for discovery requests
func NewTranslatingHandler ¶ added in v0.29.0
func ResolveCluster ¶
func ResolveEndpoint ¶
func ResolveEndpoint(services listersv1.ServiceLister, endpoints listersv1.EndpointsLister, namespace, id string, port int32) (*url.URL, error)
ResolveEndpoint returns a URL to which one can send traffic for the specified service.
Types ¶
type Options ¶ added in v0.29.0
Options contains details about which streams are required for remote command execution.
type StreamTranslatorHandler ¶ added in v0.29.0
type StreamTranslatorHandler struct { // Location is the location of the upstream proxy. It is used as the location to Dial on the upstream server // for upgrade requests. Location *url.URL // Transport provides an optional round tripper to use to proxy. If nil, the default proxy transport is used Transport http.RoundTripper // MaxBytesPerSec throttles stream Reader/Writer if necessary MaxBytesPerSec int64 // Options define the requested streams (e.g. stdin, stdout). Options Options }
StreamTranslatorHandler is a handler which translates WebSocket stream data to SPDY to proxy to kubelet (and ContainerRuntime).
func NewStreamTranslatorHandler ¶ added in v0.29.0
func NewStreamTranslatorHandler(location *url.URL, transport http.RoundTripper, maxBytesPerSec int64, opts Options) *StreamTranslatorHandler
NewStreamTranslatorHandler creates a new proxy handler. Responder is required for returning errors to the caller.
func (*StreamTranslatorHandler) ServeHTTP ¶ added in v0.29.0
func (h *StreamTranslatorHandler) ServeHTTP(w http.ResponseWriter, req *http.Request)
type TunnelingHandler ¶ added in v0.30.0
type TunnelingHandler struct {
// contains filtered or unexported fields
}
TunnelingHandler is a handler which tunnels SPDY through WebSockets.
func NewTunnelingHandler ¶ added in v0.30.0
func NewTunnelingHandler(upgradeHandler http.Handler) *TunnelingHandler
NewTunnelingHandler is used to create the tunnel between an upstream SPDY connection and a downstream tunneling connection through the stored UpgradeAwareProxy.
func (*TunnelingHandler) ServeHTTP ¶ added in v0.30.0
func (h *TunnelingHandler) ServeHTTP(w http.ResponseWriter, req *http.Request)
ServeHTTP uses the upgradeHandler to tunnel between a downstream tunneling connection and an upstream SPDY connection. The tunneling connection is a wrapped WebSockets connection which communicates SPDY framed data. In the case the upstream upgrade fails, we delegate communication to the passed in "w" ResponseWriter.