mirror of
https://github.com/tailscale/tailscale.git
synced 2025-08-11 21:27:31 +00:00
cmd/k8s-operator,k8s-operator/sessionrecording: support recording kubectl exec sessions over WebSockets (#12947)
cmd/k8s-operator,k8s-operator/sessionrecording: support recording WebSocket sessions Kubernetes currently supports two streaming protocols, SPDY and WebSockets. WebSockets are replacing SPDY, see https://github.com/kubernetes/enhancements/issues/4006. We were currently only supporting SPDY, erroring out if session was not SPDY and relying on the kube's built-in SPDY fallback. This PR: - adds support for parsing contents of 'kubectl exec' sessions streamed over WebSockets - adds logic to distinguish 'kubectl exec' requests for a SPDY/WebSockets sessions and call the relevant handler Updates tailscale/corp#19821 Signed-off-by: Irbe Krumina <irbe@tailscale.com> Co-authored-by: Tom Proctor <tomhjp@users.noreply.github.com>
This commit is contained in:
@@ -13,6 +13,9 @@ import (
|
||||
"net"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"math/rand"
|
||||
|
||||
"tailscale.com/sessionrecording"
|
||||
"tailscale.com/tstime"
|
||||
@@ -116,3 +119,20 @@ func AsciinemaResizeMsg(t *testing.T, width, height int) []byte {
|
||||
}
|
||||
return append(bs, '\n')
|
||||
}
|
||||
|
||||
func RandomBytes(t *testing.T) [][]byte {
|
||||
t.Helper()
|
||||
r := rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||
n := r.Intn(4096)
|
||||
b := make([]byte, n)
|
||||
t.Logf("RandomBytes: generating byte slice of length %d", n)
|
||||
_, err := r.Read(b)
|
||||
if err != nil {
|
||||
t.Fatalf("error generating random byte slice: %v", err)
|
||||
}
|
||||
if len(b) < 2 {
|
||||
return [][]byte{b}
|
||||
}
|
||||
split := r.Intn(len(b) - 1)
|
||||
return [][]byte{b[:split], b[split:]}
|
||||
}
|
||||
|
Reference in New Issue
Block a user