proxy

package
v0.31.0-rc.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 1, 2024 License: Apache-2.0 Imports: 36 Imported by: 52

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

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewRequestForProxy added in v0.28.0

func NewRequestForProxy(location *url.URL, req *http.Request) (*http.Request, context.CancelFunc)

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 NewTranslatingHandler(delegate http.Handler, translator http.Handler, shouldTranslate func(*http.Request) bool) http.Handler

func ResolveCluster

func ResolveCluster(services listersv1.ServiceLister, namespace, id string, port int32) (*url.URL, error)

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

type Options struct {
	Stdin  bool
	Stdout bool
	Stderr bool
	Tty    bool
}

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.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL