• Clayton Coleman's avatar
    Expose exec and logs via WebSockets · 363b6169
    Clayton Coleman authored
    Not all clients and systems can support SPDY protocols. This commit adds
    support for two new websocket protocols, one to handle streaming of pod
    logs from a pod, and the other to allow exec to be tunneled over
    websocket.
    
    Browser support for chunked encoding is still poor, and web consoles
    that wish to show pod logs may need to make compromises to display the
    output. The /pods/<name>/log endpoint now supports websocket upgrade to
    the 'binary.k8s.io' subprotocol, which sends chunks of logs as binary to
    the client. Messages are written as logs are streamed from the container
    daemon, so flushing should be unaffected.
    
    Browser support for raw communication over SDPY is not possible, and
    some languages lack libraries for it and HTTP/2. The Kubelet supports
    upgrade to WebSocket instead of SPDY, and will multiplex STDOUT/IN/ERR
    over websockets by prepending each binary message with a single byte
    representing the channel (0 for IN, 1 for OUT, and 2 for ERR). Because
    framing on WebSockets suffers from head-of-line blocking, clients and
    other server code should ensure that no particular stream blocks. An
    alternative subprotocol 'base64.channel.k8s.io' base64 encodes the body
    and uses '0'-'9' to represent the channel for ease of use in browsers.
    363b6169
doc.go 884 Bytes