Support websocket protocol negotation with k8s 1.30
- Support websocket protocol negotation with k8s 1.30
Kubernetes 1.30 supports websocket connections instead of SPDY (they call it the remote command protocol v5). The negotiation roughly works like this:
- Trying to establish websocket connection (
GET
upgrade request) - If it fails try to establish a SPDY connection (
POST
upgrade request)
The websocket connection negotiation will fail when for example trying
to establish it from a kubectl v1.30 to a Kube API v1.29 which doesn't
support websockets. The observed status code returned by that Kube API
is a 403 FORBIDDEN
. I assume that this is because a GET
route is
simply not supported on this endpoint in that version.
This change set simply ignored the status code returned by an upgrade request and will always early exit - no matter what status code we get.
Changelog: fixed
Closes #562 (closed)
Test Protocol
I've manually tested this against an agentk running in a v1.29.2 and v1.30.0 kind cluster using both KUBECTL_REMOTE_COMMAND_WEBSOCKETS
set to false
(for SPDY) and true
for websockets. I've used kubectl v1.30.0 for these tests. All four combinations worked fine:
✅ Kubernetes v1.29.2 with SPDY (expand for logs)
I0429 09:39:23.684150 37777 round_trippers.go:466] curl -v -XGET -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.30.0 (darwin/arm64) kubernetes/7c48c2b" -H "Authorization: Bearer <masked>" 'https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx'
I0429 09:39:23.687001 37777 round_trippers.go:495] HTTP Trace: DNS Lookup for kas.gdk.test resolved to [{172.16.123.1 }]
I0429 09:39:23.687635 37777 round_trippers.go:510] HTTP Trace: Dial to tcp:172.16.123.1:3443 succeed
I0429 09:39:23.706620 37777 round_trippers.go:553] GET https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx 200 OK in 22 milliseconds
I0429 09:39:23.706648 37777 round_trippers.go:570] HTTP Statistics: DNSLookup 2 ms Dial 0 ms TLSHandshake 9 ms ServerProcessing 9 ms Duration 22 ms
I0429 09:39:23.706653 37777 round_trippers.go:577] Response Headers:
I0429 09:39:23.706660 37777 round_trippers.go:580] Server: nginx/1.25.4
I0429 09:39:23.706664 37777 round_trippers.go:580] Content-Type: application/json
I0429 09:39:23.706666 37777 round_trippers.go:580] Content-Length: 4096
I0429 09:39:23.706668 37777 round_trippers.go:580] Audit-Id: 4630b594-ae3a-4410-acd7-8c4d907f48be
I0429 09:39:23.706671 37777 round_trippers.go:580] Cache-Control: no-cache, private
I0429 09:39:23.706673 37777 round_trippers.go:580] Date: Mon, 29 Apr 2024 07:39:23 GMT
I0429 09:39:23.706675 37777 round_trippers.go:580] Via: 2.0 gitlab-agent/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:39:23.706677 37777 round_trippers.go:580] Via: gRPC/1.0 gitlab-kas/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:39:23.706678 37777 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: 9f6cad0a-737b-4168-9fc9-1f160d53db4b
I0429 09:39:23.706680 37777 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: 3b74e976-f4b5-4f16-970c-1d85574fe992
I0429 09:39:23.706796 37777 request.go:1212] Response Body: {"kind":"Pod","apiVersion":"v1","metadata":{"name":"my-nginx","namespace":"default","uid":"1104d156-48fc-4b08-a49a-72ac00862291","resourceVersion":"1291503","creationTimestamp":"2024-04-26T08:13:41Z","labels":{"run":"my-nginx"},"managedFields":[{"manager":"kubectl-run","operation":"Update","apiVersion":"v1","time":"2024-04-26T08:13:41Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:labels":{".":{},"f:run":{}}},"f:spec":{"f:containers":{"k:{\"name\":\"my-nginx\"}":{".":{},"f:image":{},"f:imagePullPolicy":{},"f:name":{},"f:ports":{".":{},"k:{\"containerPort\":80,\"protocol\":\"TCP\"}":{".":{},"f:containerPort":{},"f:protocol":{}}},"f:resources":{},"f:terminationMessagePath":{},"f:terminationMessagePolicy":{}}},"f:dnsPolicy":{},"f:enableServiceLinks":{},"f:restartPolicy":{},"f:schedulerName":{},"f:securityContext":{},"f:terminationGracePeriodSeconds":{}}}},{"manager":"kubelet","operation":"Update","apiVersion":"v1","time":"2024-04-26T08:13:49Z","fieldsType":"FieldsV1","fieldsV1":{"f:status":{"f:conditions":{"k:{\"type\":\"ContainersReady\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}},"k:{\"type\":\"Initialized\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}},"k:{\"type\":\"PodReadyToStartContainers\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}},"k:{\"type\":\"Ready\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}}},"f:containerStatuses":{},"f:hostIP":{},"f:hostIPs":{},"f:phase":{},"f:podIP":{},"f:podIPs":{".":{},"k:{\"ip\":\"10.244.0.13\"}":{".":{},"f:ip":{}}},"f:startTime":{}}},"subresource":"status"}]},"spec":{"volumes":[{"name":"kube-api-access-dqjtj","projected":{"sources":[{"serviceAccountToken":{"expirationSeconds":3607,"path":"token"}},{"configMap":{"name":"kube-root-ca.crt","items":[{"key":"ca.crt","path":"ca.crt"}]}},{"downwardAPI":{"items":[{"path":"namespace","fieldRef":{"apiVersion":"v1","fieldPath":"metadata.namespace"}}]}}],"defaultMode":420}}],"containers":[{"name":"my-nginx","image":"nginx","ports":[{"containerPort":80,"protocol":"TCP"}],"resources":{},"volumeMounts":[{"name":"kube-api-access-dqjtj","readOnly":true,"mountPath":"/var/run/secrets/kubernetes.io/serviceaccount"}],"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","imagePullPolicy":"Always"}],"restartPolicy":"Always","terminationGracePeriodSeconds":30,"dnsPolicy":"ClusterFirst","serviceAccountName":"default","serviceAccount":"default","nodeName":"gitlab-agent-dev-control-plane","securityContext":{},"schedulerName":"default-scheduler","tolerations":[{"key":"node.kubernetes.io/not-ready","operator":"Exists","effect":"NoExecute","tolerationSeconds":300},{"key":"node.kubernetes.io/unreachable","operator":"Exists","effect":"NoExecute","tolerationSeconds":300}],"priority":0,"enableServiceLinks":true,"preemptionPolicy":"PreemptLowerPriority"},"status":{"phase":"Running","conditions":[{"type":"PodReadyToStartContainers","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-26T08:13:49Z"},{"type":"Initialized","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-26T08:13:41Z"},{"type":"Ready","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-26T08:13:49Z"},{"type":"ContainersReady","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-26T08:13:49Z"},{"type":"PodScheduled","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-26T08:13:41Z"}],"hostIP":"172.18.0.2","hostIPs":[{"ip":"172.18.0.2"}],"podIP":"10.244.0.13","podIPs":[{"ip":"10.244.0.13"}],"startTime":"2024-04-26T08:13:41Z","containerStatuses":[{"name":"my-nginx","state":{"running":{"startedAt":"2024-04-26T08:13:48Z"}},"lastState":{},"ready":true,"restartCount":0,"image":"docker.io/library/nginx:latest","imageID":"docker.io/library/nginx@sha256:ed6d2c43c8fbcd3eaa44c9dab6d94cb346234476230dc1681227aa72d07181ee","containerID":"containerd://da76c734030ed193b6c5564262e1d0d6cf9c8336000f92f34f9cafb65f4999cf","started":true}],"qosClass":"BestEffort"}}
I0429 09:39:23.708169 37777 podcmd.go:88] Defaulting container name to my-nginx
I0429 09:39:23.708233 37777 round_trippers.go:466] curl -v -XPOST -H "X-Stream-Protocol-Version: v5.channel.k8s.io" -H "X-Stream-Protocol-Version: v4.channel.k8s.io" -H "X-Stream-Protocol-Version: v3.channel.k8s.io" -H "X-Stream-Protocol-Version: v2.channel.k8s.io" -H "X-Stream-Protocol-Version: channel.k8s.io" -H "User-Agent: kubectl/v1.30.0 (darwin/arm64) kubernetes/7c48c2b" -H "Authorization: Bearer <masked>" 'https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx/exec?command=ls&command=-l&container=my-nginx&stderr=true&stdout=true'
I0429 09:39:23.709716 37777 round_trippers.go:495] HTTP Trace: DNS Lookup for kas.gdk.test resolved to [{172.16.123.1 }]
I0429 09:39:23.710231 37777 round_trippers.go:510] HTTP Trace: Dial to tcp:172.16.123.1:3443 succeed
I0429 09:39:23.734329 37777 round_trippers.go:553] POST https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx/exec?command=ls&command=-l&container=my-nginx&stderr=true&stdout=true 101 Switching Protocols in 26 milliseconds
I0429 09:39:23.734347 37777 round_trippers.go:570] HTTP Statistics: DNSLookup 1 ms Dial 0 ms TLSHandshake 0 ms Duration 26 ms
I0429 09:39:23.734351 37777 round_trippers.go:577] Response Headers:
I0429 09:39:23.734355 37777 round_trippers.go:580] Via: 1.1 gitlab-agent/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:39:23.734358 37777 round_trippers.go:580] Via: gRPC/1.0 gitlab-kas/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:39:23.734360 37777 round_trippers.go:580] X-Stream-Protocol-Version: v4.channel.k8s.io
I0429 09:39:23.734362 37777 round_trippers.go:580] Server: nginx/1.25.4
I0429 09:39:23.734364 37777 round_trippers.go:580] Date: Mon, 29 Apr 2024 07:39:23 GMT
I0429 09:39:23.734367 37777 round_trippers.go:580] Connection: upgrade
I0429 09:39:23.734392 37777 round_trippers.go:580] Upgrade: SPDY/3.1
total 72
lrwxrwxrwx 1 root root 7 Apr 23 15:00 bin -> usr/bin
drwxr-xr-x 2 root root 4096 Jan 28 21:20 boot
drwxr-xr-x 5 root root 360 Apr 26 08:13 dev
drwxr-xr-x 1 root root 4096 Apr 25 07:36 docker-entrypoint.d
-rwxr-xr-x 1 root root 1620 Apr 24 02:21 docker-entrypoint.sh
drwxr-xr-x 1 root root 4096 Apr 26 08:13 etc
drwxr-xr-x 2 root root 4096 Jan 28 21:20 home
lrwxrwxrwx 1 root root 7 Apr 23 15:00 lib -> usr/lib
drwxr-xr-x 2 root root 4096 Apr 23 15:00 media
drwxr-xr-x 2 root root 4096 Apr 23 15:00 mnt
drwxr-xr-x 2 root root 4096 Apr 23 15:00 opt
dr-xr-xr-x 281 root root 0 Apr 26 08:13 proc
-rw-r--r-- 1 root root 5 Apr 26 08:13 product_name
-rw-r--r-- 1 root root 37 Apr 26 08:13 product_uuid
drwx------ 1 root root 4096 Apr 26 08:13 root
drwxr-xr-x 1 root root 4096 Apr 26 08:13 run
lrwxrwxrwx 1 root root 8 Apr 23 15:00 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Apr 23 15:00 srv
dr-xr-xr-x 13 root root 0 Apr 26 08:13 sys
drwxrwxrwt 2 root root 4096 Apr 23 15:00 tmp
drwxr-xr-x 1 root root 4096 Apr 23 15:00 usr
drwxr-xr-x 1 root root 4096 Apr 23 15:00 var
✅ Kubernetes v1.29.2 with websocket support enabled, but fallback to SPDY (expand for logs)
I0429 09:40:04.330019 37912 round_trippers.go:466] curl -v -XGET -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.30.0 (darwin/arm64) kubernetes/7c48c2b" -H "Authorization: Bearer <masked>" 'https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx'
I0429 09:40:04.333159 37912 round_trippers.go:495] HTTP Trace: DNS Lookup for kas.gdk.test resolved to [{172.16.123.1 }]
I0429 09:40:04.334162 37912 round_trippers.go:510] HTTP Trace: Dial to tcp:172.16.123.1:3443 succeed
I0429 09:40:04.350107 37912 round_trippers.go:553] GET https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx 200 OK in 20 milliseconds
I0429 09:40:04.350126 37912 round_trippers.go:570] HTTP Statistics: DNSLookup 3 ms Dial 0 ms TLSHandshake 9 ms ServerProcessing 6 ms Duration 20 ms
I0429 09:40:04.350130 37912 round_trippers.go:577] Response Headers:
I0429 09:40:04.350134 37912 round_trippers.go:580] Date: Mon, 29 Apr 2024 07:40:04 GMT
I0429 09:40:04.350136 37912 round_trippers.go:580] Content-Type: application/json
I0429 09:40:04.350138 37912 round_trippers.go:580] Content-Length: 4096
I0429 09:40:04.350139 37912 round_trippers.go:580] Audit-Id: 5f8ddbb5-a8c3-49f6-a40e-c0238c44f257
I0429 09:40:04.350141 37912 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: 9f6cad0a-737b-4168-9fc9-1f160d53db4b
I0429 09:40:04.350142 37912 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: 3b74e976-f4b5-4f16-970c-1d85574fe992
I0429 09:40:04.350143 37912 round_trippers.go:580] Server: nginx/1.25.4
I0429 09:40:04.350145 37912 round_trippers.go:580] Via: 2.0 gitlab-agent/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:40:04.350146 37912 round_trippers.go:580] Via: gRPC/1.0 gitlab-kas/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:40:04.350148 37912 round_trippers.go:580] Cache-Control: no-cache, private
I0429 09:40:04.350271 37912 request.go:1212] Response Body: {"kind":"Pod","apiVersion":"v1","metadata":{"name":"my-nginx","namespace":"default","uid":"1104d156-48fc-4b08-a49a-72ac00862291","resourceVersion":"1291503","creationTimestamp":"2024-04-26T08:13:41Z","labels":{"run":"my-nginx"},"managedFields":[{"manager":"kubectl-run","operation":"Update","apiVersion":"v1","time":"2024-04-26T08:13:41Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:labels":{".":{},"f:run":{}}},"f:spec":{"f:containers":{"k:{\"name\":\"my-nginx\"}":{".":{},"f:image":{},"f:imagePullPolicy":{},"f:name":{},"f:ports":{".":{},"k:{\"containerPort\":80,\"protocol\":\"TCP\"}":{".":{},"f:containerPort":{},"f:protocol":{}}},"f:resources":{},"f:terminationMessagePath":{},"f:terminationMessagePolicy":{}}},"f:dnsPolicy":{},"f:enableServiceLinks":{},"f:restartPolicy":{},"f:schedulerName":{},"f:securityContext":{},"f:terminationGracePeriodSeconds":{}}}},{"manager":"kubelet","operation":"Update","apiVersion":"v1","time":"2024-04-26T08:13:49Z","fieldsType":"FieldsV1","fieldsV1":{"f:status":{"f:conditions":{"k:{\"type\":\"ContainersReady\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}},"k:{\"type\":\"Initialized\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}},"k:{\"type\":\"PodReadyToStartContainers\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}},"k:{\"type\":\"Ready\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}}},"f:containerStatuses":{},"f:hostIP":{},"f:hostIPs":{},"f:phase":{},"f:podIP":{},"f:podIPs":{".":{},"k:{\"ip\":\"10.244.0.13\"}":{".":{},"f:ip":{}}},"f:startTime":{}}},"subresource":"status"}]},"spec":{"volumes":[{"name":"kube-api-access-dqjtj","projected":{"sources":[{"serviceAccountToken":{"expirationSeconds":3607,"path":"token"}},{"configMap":{"name":"kube-root-ca.crt","items":[{"key":"ca.crt","path":"ca.crt"}]}},{"downwardAPI":{"items":[{"path":"namespace","fieldRef":{"apiVersion":"v1","fieldPath":"metadata.namespace"}}]}}],"defaultMode":420}}],"containers":[{"name":"my-nginx","image":"nginx","ports":[{"containerPort":80,"protocol":"TCP"}],"resources":{},"volumeMounts":[{"name":"kube-api-access-dqjtj","readOnly":true,"mountPath":"/var/run/secrets/kubernetes.io/serviceaccount"}],"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","imagePullPolicy":"Always"}],"restartPolicy":"Always","terminationGracePeriodSeconds":30,"dnsPolicy":"ClusterFirst","serviceAccountName":"default","serviceAccount":"default","nodeName":"gitlab-agent-dev-control-plane","securityContext":{},"schedulerName":"default-scheduler","tolerations":[{"key":"node.kubernetes.io/not-ready","operator":"Exists","effect":"NoExecute","tolerationSeconds":300},{"key":"node.kubernetes.io/unreachable","operator":"Exists","effect":"NoExecute","tolerationSeconds":300}],"priority":0,"enableServiceLinks":true,"preemptionPolicy":"PreemptLowerPriority"},"status":{"phase":"Running","conditions":[{"type":"PodReadyToStartContainers","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-26T08:13:49Z"},{"type":"Initialized","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-26T08:13:41Z"},{"type":"Ready","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-26T08:13:49Z"},{"type":"ContainersReady","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-26T08:13:49Z"},{"type":"PodScheduled","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-26T08:13:41Z"}],"hostIP":"172.18.0.2","hostIPs":[{"ip":"172.18.0.2"}],"podIP":"10.244.0.13","podIPs":[{"ip":"10.244.0.13"}],"startTime":"2024-04-26T08:13:41Z","containerStatuses":[{"name":"my-nginx","state":{"running":{"startedAt":"2024-04-26T08:13:48Z"}},"lastState":{},"ready":true,"restartCount":0,"image":"docker.io/library/nginx:latest","imageID":"docker.io/library/nginx@sha256:ed6d2c43c8fbcd3eaa44c9dab6d94cb346234476230dc1681227aa72d07181ee","containerID":"containerd://da76c734030ed193b6c5564262e1d0d6cf9c8336000f92f34f9cafb65f4999cf","started":true}],"qosClass":"BestEffort"}}
I0429 09:40:04.351761 37912 podcmd.go:88] Defaulting container name to my-nginx
I0429 09:40:04.351811 37912 round_trippers.go:466] curl -v -XGET -H "User-Agent: kubectl/v1.30.0 (darwin/arm64) kubernetes/7c48c2b" -H "Authorization: Bearer <masked>" -H "Sec-Websocket-Protocol: v5.channel.k8s.io" 'https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx/exec?command=ls&command=-l&container=my-nginx&stderr=true&stdout=true'
I0429 09:40:04.353293 37912 round_trippers.go:495] HTTP Trace: DNS Lookup for kas.gdk.test resolved to [{172.16.123.1 }]
I0429 09:40:04.353607 37912 round_trippers.go:510] HTTP Trace: Dial to tcp:172.16.123.1:3443 succeed
I0429 09:40:04.375219 37912 round_trippers.go:553] GET https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx/exec?command=ls&command=-l&container=my-nginx&stderr=true&stdout=true in 23 milliseconds
I0429 09:40:04.375233 37912 round_trippers.go:570] HTTP Statistics: DNSLookup 1 ms Dial 0 ms TLSHandshake 2 ms ServerProcessing 19 ms Duration 23 ms
I0429 09:40:04.375237 37912 round_trippers.go:577] Response Headers:
I0429 09:40:04.375264 37912 round_trippers.go:466] curl -v -XPOST -H "X-Stream-Protocol-Version: v5.channel.k8s.io" -H "X-Stream-Protocol-Version: v4.channel.k8s.io" -H "X-Stream-Protocol-Version: v3.channel.k8s.io" -H "X-Stream-Protocol-Version: v2.channel.k8s.io" -H "X-Stream-Protocol-Version: channel.k8s.io" -H "User-Agent: kubectl/v1.30.0 (darwin/arm64) kubernetes/7c48c2b" -H "Authorization: Bearer <masked>" 'https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx/exec?command=ls&command=-l&container=my-nginx&stderr=true&stdout=true'
I0429 09:40:04.376496 37912 round_trippers.go:495] HTTP Trace: DNS Lookup for kas.gdk.test resolved to [{172.16.123.1 }]
I0429 09:40:04.376790 37912 round_trippers.go:510] HTTP Trace: Dial to tcp:172.16.123.1:3443 succeed
I0429 09:40:04.399223 37912 round_trippers.go:553] POST https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx/exec?command=ls&command=-l&container=my-nginx&stderr=true&stdout=true 101 Switching Protocols in 23 milliseconds
I0429 09:40:04.399243 37912 round_trippers.go:570] HTTP Statistics: DNSLookup 1 ms Dial 0 ms TLSHandshake 0 ms Duration 23 ms
I0429 09:40:04.399247 37912 round_trippers.go:577] Response Headers:
I0429 09:40:04.399256 37912 round_trippers.go:580] Upgrade: SPDY/3.1
I0429 09:40:04.399259 37912 round_trippers.go:580] Via: 1.1 gitlab-agent/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:40:04.399261 37912 round_trippers.go:580] Via: gRPC/1.0 gitlab-kas/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:40:04.399263 37912 round_trippers.go:580] X-Stream-Protocol-Version: v4.channel.k8s.io
I0429 09:40:04.399264 37912 round_trippers.go:580] Server: nginx/1.25.4
I0429 09:40:04.399266 37912 round_trippers.go:580] Date: Mon, 29 Apr 2024 07:40:04 GMT
I0429 09:40:04.399457 37912 round_trippers.go:580] Connection: upgrade
total 72
lrwxrwxrwx 1 root root 7 Apr 23 15:00 bin -> usr/bin
drwxr-xr-x 2 root root 4096 Jan 28 21:20 boot
drwxr-xr-x 5 root root 360 Apr 26 08:13 dev
drwxr-xr-x 1 root root 4096 Apr 25 07:36 docker-entrypoint.d
-rwxr-xr-x 1 root root 1620 Apr 24 02:21 docker-entrypoint.sh
drwxr-xr-x 1 root root 4096 Apr 26 08:13 etc
drwxr-xr-x 2 root root 4096 Jan 28 21:20 home
lrwxrwxrwx 1 root root 7 Apr 23 15:00 lib -> usr/lib
drwxr-xr-x 2 root root 4096 Apr 23 15:00 media
drwxr-xr-x 2 root root 4096 Apr 23 15:00 mnt
drwxr-xr-x 2 root root 4096 Apr 23 15:00 opt
dr-xr-xr-x 281 root root 0 Apr 26 08:13 proc
-rw-r--r-- 1 root root 5 Apr 26 08:13 product_name
-rw-r--r-- 1 root root 37 Apr 26 08:13 product_uuid
drwx------ 1 root root 4096 Apr 26 08:13 root
drwxr-xr-x 1 root root 4096 Apr 26 08:13 run
lrwxrwxrwx 1 root root 8 Apr 23 15:00 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Apr 23 15:00 srv
dr-xr-xr-x 13 root root 0 Apr 26 08:13 sys
drwxrwxrwt 2 root root 4096 Apr 23 15:00 tmp
drwxr-xr-x 1 root root 4096 Apr 23 15:00 usr
drwxr-xr-x 1 root root 4096 Apr 23 15:00 var
✅ Kubernetes v1.30.0 with SPDY (expand for logs)
I0429 09:36:40.861152 37134 round_trippers.go:466] curl -v -XGET -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.30.0 (darwin/arm64) kubernetes/7c48c2b" -H "Authorization: Bearer <masked>" 'https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx'
I0429 09:36:40.866270 37134 round_trippers.go:495] HTTP Trace: DNS Lookup for kas.gdk.test resolved to [{172.16.123.1 }]
I0429 09:36:40.867086 37134 round_trippers.go:510] HTTP Trace: Dial to tcp:172.16.123.1:3443 succeed
I0429 09:36:40.928774 37134 round_trippers.go:553] GET https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx 200 OK in 67 milliseconds
I0429 09:36:40.928791 37134 round_trippers.go:570] HTTP Statistics: DNSLookup 5 ms Dial 0 ms TLSHandshake 10 ms ServerProcessing 50 ms Duration 67 ms
I0429 09:36:40.928795 37134 round_trippers.go:577] Response Headers:
I0429 09:36:40.928800 37134 round_trippers.go:580] Server: nginx/1.25.4
I0429 09:36:40.928802 37134 round_trippers.go:580] Cache-Control: no-cache, private
I0429 09:36:40.928804 37134 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: 27ecacc7-a30a-49cb-bda4-c851899e7c91
I0429 09:36:40.928806 37134 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: f2110336-6c00-44e0-94b8-d85271158b6c
I0429 09:36:40.928807 37134 round_trippers.go:580] Date: Mon, 29 Apr 2024 07:36:40 GMT
I0429 09:36:40.928809 37134 round_trippers.go:580] Content-Type: application/json
I0429 09:36:40.928810 37134 round_trippers.go:580] Audit-Id: 1501c078-16ac-4816-8cc1-75e53fa393a8
I0429 09:36:40.928838 37134 round_trippers.go:580] Via: 2.0 gitlab-agent/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:36:40.928840 37134 round_trippers.go:580] Via: gRPC/1.0 gitlab-kas/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:36:40.928903 37134 request.go:1212] Response Body: {"kind":"Pod","apiVersion":"v1","metadata":{"name":"my-nginx","namespace":"default","uid":"b32bc102-5167-4843-8de4-eebf9c912cac","resourceVersion":"1102","creationTimestamp":"2024-04-29T07:33:38Z","annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"annotations\":{},\"name\":\"my-nginx\",\"namespace\":\"default\"},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"nginx\",\"ports\":[{\"containerPort\":80}]}]}}\n"},"managedFields":[{"manager":"kubectl-client-side-apply","operation":"Update","apiVersion":"v1","time":"2024-04-29T07:33:38Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{".":{},"f:kubectl.kubernetes.io/last-applied-configuration":{}}},"f:spec":{"f:containers":{"k:{\"name\":\"nginx\"}":{".":{},"f:image":{},"f:imagePullPolicy":{},"f:name":{},"f:ports":{".":{},"k:{\"containerPort\":80,\"protocol\":\"TCP\"}":{".":{},"f:containerPort":{},"f:protocol":{}}},"f:resources":{},"f:terminationMessagePath":{},"f:terminationMessagePolicy":{}}},"f:dnsPolicy":{},"f:enableServiceLinks":{},"f:restartPolicy":{},"f:schedulerName":{},"f:securityContext":{},"f:terminationGracePeriodSeconds":{}}}},{"manager":"kubelet","operation":"Update","apiVersion":"v1","time":"2024-04-29T07:33:40Z","fieldsType":"FieldsV1","fieldsV1":{"f:status":{"f:conditions":{"k:{\"type\":\"ContainersReady\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}},"k:{\"type\":\"Initialized\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}},"k:{\"type\":\"PodReadyToStartContainers\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}},"k:{\"type\":\"Ready\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}}},"f:containerStatuses":{},"f:hostIP":{},"f:hostIPs":{},"f:phase":{},"f:podIP":{},"f:podIPs":{".":{},"k:{\"ip\":\"10.244.1.3\"}":{".":{},"f:ip":{}}},"f:startTime":{}}},"subresource":"status"}]},"spec":{"volumes":[{"name":"kube-api-access-qlgts","projected":{"sources":[{"serviceAccountToken":{"expirationSeconds":3607,"path":"token"}},{"configMap":{"name":"kube-root-ca.crt","items":[{"key":"ca.crt","path":"ca.crt"}]}},{"downwardAPI":{"items":[{"path":"namespace","fieldRef":{"apiVersion":"v1","fieldPath":"metadata.namespace"}}]}}],"defaultMode":420}}],"containers":[{"name":"nginx","image":"nginx:1.14.2","ports":[{"containerPort":80,"protocol":"TCP"}],"resources":{},"volumeMounts":[{"name":"kube-api-access-qlgts","readOnly":true,"mountPath":"/var/run/secrets/kubernetes.io/serviceaccount"}],"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","imagePullPolicy":"IfNotPresent"}],"restartPolicy":"Always","terminationGracePeriodSeconds":30,"dnsPolicy":"ClusterFirst","serviceAccountName":"default","serviceAccount":"default","nodeName":"gitlab-agent-dev-1.30-worker","securityContext":{},"schedulerName":"default-scheduler","tolerations":[{"key":"node.kubernetes.io/not-ready","operator":"Exists","effect":"NoExecute","tolerationSeconds":300},{"key":"node.kubernetes.io/unreachable","operator":"Exists","effect":"NoExecute","tolerationSeconds":300}],"priority":0,"enableServiceLinks":true,"preemptionPolicy":"PreemptLowerPriority"},"status":{"phase":"Running","conditions":[{"type":"PodReadyToStartContainers","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-29T07:33:40Z"},{"type":"Initialized","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-29T07:33:38Z"},{"type":"Ready","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-29T07:33:40Z"},{"type":"ContainersReady","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-29T07:33:40Z"},{"type":"PodScheduled","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-29T07:33:38Z"}],"hostIP":"172.18.0.3","hostIPs":[{"ip":"172.18.0.3"}],"podIP":"10.244.1.3","podIPs":[{"ip":"10.244.1.3"}],"startTime":"2024-04-29T07:33:38Z","containerStatuses":[{"name":"nginx","state":{"running":{"startedAt":"2024-04-29T07:33:39Z"}},"lastState":{},"ready":true,"restartCount":0,"image":"docker.io/library/nginx:1.14.2","imageID":"docker.io/library/nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d","containerID":"containerd://6d17c82811b1ac6afce3d95afda2f4977d2932f77c5711bc2aa255fd41a2b85a","started":true}],"qosClass":"BestEffort"}}
I0429 09:36:40.930235 37134 podcmd.go:88] Defaulting container name to nginx
I0429 09:36:40.930282 37134 round_trippers.go:466] curl -v -XPOST -H "User-Agent: kubectl/v1.30.0 (darwin/arm64) kubernetes/7c48c2b" -H "X-Stream-Protocol-Version: v5.channel.k8s.io" -H "X-Stream-Protocol-Version: v4.channel.k8s.io" -H "X-Stream-Protocol-Version: v3.channel.k8s.io" -H "X-Stream-Protocol-Version: v2.channel.k8s.io" -H "X-Stream-Protocol-Version: channel.k8s.io" -H "Authorization: Bearer <masked>" 'https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx/exec?command=ls&command=-l&container=nginx&stderr=true&stdout=true'
I0429 09:36:40.931738 37134 round_trippers.go:495] HTTP Trace: DNS Lookup for kas.gdk.test resolved to [{172.16.123.1 }]
I0429 09:36:40.932059 37134 round_trippers.go:510] HTTP Trace: Dial to tcp:172.16.123.1:3443 succeed
I0429 09:36:40.951676 37134 round_trippers.go:553] POST https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx/exec?command=ls&command=-l&container=nginx&stderr=true&stdout=true 101 Switching Protocols in 21 milliseconds
I0429 09:36:40.951695 37134 round_trippers.go:570] HTTP Statistics: DNSLookup 1 ms Dial 0 ms TLSHandshake 0 ms Duration 21 ms
I0429 09:36:40.951699 37134 round_trippers.go:577] Response Headers:
I0429 09:36:40.951703 37134 round_trippers.go:580] Via: 1.1 gitlab-agent/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:36:40.951706 37134 round_trippers.go:580] Via: gRPC/1.0 gitlab-kas/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:36:40.951708 37134 round_trippers.go:580] X-Stream-Protocol-Version: v4.channel.k8s.io
I0429 09:36:40.951710 37134 round_trippers.go:580] Server: nginx/1.25.4
I0429 09:36:40.951711 37134 round_trippers.go:580] Date: Mon, 29 Apr 2024 07:36:40 GMT
I0429 09:36:40.951712 37134 round_trippers.go:580] Connection: upgrade
I0429 09:36:40.951742 37134 round_trippers.go:580] Upgrade: SPDY/3.1
total 72
drwxr-xr-x 1 root root 4096 Mar 27 2019 bin
drwxr-xr-x 2 root root 4096 Feb 3 2019 boot
drwxr-xr-x 5 root root 360 Apr 29 07:33 dev
drwxr-xr-x 1 root root 4096 Apr 29 07:33 etc
drwxr-xr-x 2 root root 4096 Feb 3 2019 home
drwxr-xr-x 1 root root 4096 Mar 27 2019 lib
drwxr-xr-x 2 root root 4096 Mar 26 2019 media
drwxr-xr-x 2 root root 4096 Mar 26 2019 mnt
drwxr-xr-x 2 root root 4096 Mar 26 2019 opt
dr-xr-xr-x 286 root root 0 Apr 29 07:33 proc
-rw-r--r-- 1 root root 5 Apr 29 07:33 product_name
-rw-r--r-- 1 root root 37 Apr 29 07:33 product_uuid
drwx------ 2 root root 4096 Mar 26 2019 root
drwxr-xr-x 1 root root 4096 Apr 29 07:33 run
drwxr-xr-x 2 root root 4096 Mar 26 2019 sbin
drwxr-xr-x 2 root root 4096 Mar 26 2019 srv
dr-xr-xr-x 13 root root 0 Apr 29 07:33 sys
drwxrwxrwt 1 root root 4096 Mar 27 2019 tmp
drwxr-xr-x 1 root root 4096 Mar 26 2019 usr
drwxr-xr-x 1 root root 4096 Mar 26 2019 var
✅ Kubernetes v1.30.0 with websockets (expand for logs)
I0429 09:38:00.050461 37356 round_trippers.go:466] curl -v -XGET -H "User-Agent: kubectl/v1.30.0 (darwin/arm64) kubernetes/7c48c2b" -H "Accept: application/json, */*" -H "Authorization: Bearer <masked>" 'https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx'
I0429 09:38:00.053710 37356 round_trippers.go:495] HTTP Trace: DNS Lookup for kas.gdk.test resolved to [{172.16.123.1 }]
I0429 09:38:00.054855 37356 round_trippers.go:510] HTTP Trace: Dial to tcp:172.16.123.1:3443 succeed
I0429 09:38:00.071757 37356 round_trippers.go:553] GET https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx 200 OK in 21 milliseconds
I0429 09:38:00.071778 37356 round_trippers.go:570] HTTP Statistics: DNSLookup 3 ms Dial 1 ms TLSHandshake 10 ms ServerProcessing 6 ms Duration 21 ms
I0429 09:38:00.071785 37356 round_trippers.go:577] Response Headers:
I0429 09:38:00.071791 37356 round_trippers.go:580] Date: Mon, 29 Apr 2024 07:38:00 GMT
I0429 09:38:00.071793 37356 round_trippers.go:580] Content-Type: application/json
I0429 09:38:00.071796 37356 round_trippers.go:580] Audit-Id: 0901843e-4cbc-432f-9567-e78135ea5e1c
I0429 09:38:00.071799 37356 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: f2110336-6c00-44e0-94b8-d85271158b6c
I0429 09:38:00.071801 37356 round_trippers.go:580] Server: nginx/1.25.4
I0429 09:38:00.071804 37356 round_trippers.go:580] Cache-Control: no-cache, private
I0429 09:38:00.071807 37356 round_trippers.go:580] Via: 2.0 gitlab-agent/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:38:00.071809 37356 round_trippers.go:580] Via: gRPC/1.0 gitlab-kas/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:38:00.071810 37356 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: 27ecacc7-a30a-49cb-bda4-c851899e7c91
I0429 09:38:00.071852 37356 request.go:1212] Response Body: {"kind":"Pod","apiVersion":"v1","metadata":{"name":"my-nginx","namespace":"default","uid":"b32bc102-5167-4843-8de4-eebf9c912cac","resourceVersion":"1102","creationTimestamp":"2024-04-29T07:33:38Z","annotations":{"kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Pod\",\"metadata\":{\"annotations\":{},\"name\":\"my-nginx\",\"namespace\":\"default\"},\"spec\":{\"containers\":[{\"image\":\"nginx:1.14.2\",\"name\":\"nginx\",\"ports\":[{\"containerPort\":80}]}]}}\n"},"managedFields":[{"manager":"kubectl-client-side-apply","operation":"Update","apiVersion":"v1","time":"2024-04-29T07:33:38Z","fieldsType":"FieldsV1","fieldsV1":{"f:metadata":{"f:annotations":{".":{},"f:kubectl.kubernetes.io/last-applied-configuration":{}}},"f:spec":{"f:containers":{"k:{\"name\":\"nginx\"}":{".":{},"f:image":{},"f:imagePullPolicy":{},"f:name":{},"f:ports":{".":{},"k:{\"containerPort\":80,\"protocol\":\"TCP\"}":{".":{},"f:containerPort":{},"f:protocol":{}}},"f:resources":{},"f:terminationMessagePath":{},"f:terminationMessagePolicy":{}}},"f:dnsPolicy":{},"f:enableServiceLinks":{},"f:restartPolicy":{},"f:schedulerName":{},"f:securityContext":{},"f:terminationGracePeriodSeconds":{}}}},{"manager":"kubelet","operation":"Update","apiVersion":"v1","time":"2024-04-29T07:33:40Z","fieldsType":"FieldsV1","fieldsV1":{"f:status":{"f:conditions":{"k:{\"type\":\"ContainersReady\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}},"k:{\"type\":\"Initialized\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}},"k:{\"type\":\"PodReadyToStartContainers\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}},"k:{\"type\":\"Ready\"}":{".":{},"f:lastProbeTime":{},"f:lastTransitionTime":{},"f:status":{},"f:type":{}}},"f:containerStatuses":{},"f:hostIP":{},"f:hostIPs":{},"f:phase":{},"f:podIP":{},"f:podIPs":{".":{},"k:{\"ip\":\"10.244.1.3\"}":{".":{},"f:ip":{}}},"f:startTime":{}}},"subresource":"status"}]},"spec":{"volumes":[{"name":"kube-api-access-qlgts","projected":{"sources":[{"serviceAccountToken":{"expirationSeconds":3607,"path":"token"}},{"configMap":{"name":"kube-root-ca.crt","items":[{"key":"ca.crt","path":"ca.crt"}]}},{"downwardAPI":{"items":[{"path":"namespace","fieldRef":{"apiVersion":"v1","fieldPath":"metadata.namespace"}}]}}],"defaultMode":420}}],"containers":[{"name":"nginx","image":"nginx:1.14.2","ports":[{"containerPort":80,"protocol":"TCP"}],"resources":{},"volumeMounts":[{"name":"kube-api-access-qlgts","readOnly":true,"mountPath":"/var/run/secrets/kubernetes.io/serviceaccount"}],"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","imagePullPolicy":"IfNotPresent"}],"restartPolicy":"Always","terminationGracePeriodSeconds":30,"dnsPolicy":"ClusterFirst","serviceAccountName":"default","serviceAccount":"default","nodeName":"gitlab-agent-dev-1.30-worker","securityContext":{},"schedulerName":"default-scheduler","tolerations":[{"key":"node.kubernetes.io/not-ready","operator":"Exists","effect":"NoExecute","tolerationSeconds":300},{"key":"node.kubernetes.io/unreachable","operator":"Exists","effect":"NoExecute","tolerationSeconds":300}],"priority":0,"enableServiceLinks":true,"preemptionPolicy":"PreemptLowerPriority"},"status":{"phase":"Running","conditions":[{"type":"PodReadyToStartContainers","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-29T07:33:40Z"},{"type":"Initialized","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-29T07:33:38Z"},{"type":"Ready","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-29T07:33:40Z"},{"type":"ContainersReady","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-29T07:33:40Z"},{"type":"PodScheduled","status":"True","lastProbeTime":null,"lastTransitionTime":"2024-04-29T07:33:38Z"}],"hostIP":"172.18.0.3","hostIPs":[{"ip":"172.18.0.3"}],"podIP":"10.244.1.3","podIPs":[{"ip":"10.244.1.3"}],"startTime":"2024-04-29T07:33:38Z","containerStatuses":[{"name":"nginx","state":{"running":{"startedAt":"2024-04-29T07:33:39Z"}},"lastState":{},"ready":true,"restartCount":0,"image":"docker.io/library/nginx:1.14.2","imageID":"docker.io/library/nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d","containerID":"containerd://6d17c82811b1ac6afce3d95afda2f4977d2932f77c5711bc2aa255fd41a2b85a","started":true}],"qosClass":"BestEffort"}}
I0429 09:38:00.073387 37356 podcmd.go:88] Defaulting container name to nginx
I0429 09:38:00.073436 37356 round_trippers.go:466] curl -v -XGET -H "Sec-Websocket-Protocol: v5.channel.k8s.io" -H "User-Agent: kubectl/v1.30.0 (darwin/arm64) kubernetes/7c48c2b" -H "Authorization: Bearer <masked>" 'https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx/exec?command=ls&command=-l&container=nginx&stderr=true&stdout=true'
I0429 09:38:00.077336 37356 round_trippers.go:495] HTTP Trace: DNS Lookup for kas.gdk.test resolved to [{172.16.123.1 }]
I0429 09:38:00.078240 37356 round_trippers.go:510] HTTP Trace: Dial to tcp:172.16.123.1:3443 succeed
I0429 09:38:00.092619 37356 round_trippers.go:553] GET https://kas.gdk.test:3443/-/k8s-proxy/api/v1/namespaces/default/pods/my-nginx/exec?command=ls&command=-l&container=nginx&stderr=true&stdout=true 101 Switching Protocols in 19 milliseconds
I0429 09:38:00.092638 37356 round_trippers.go:570] HTTP Statistics: DNSLookup 3 ms Dial 0 ms TLSHandshake 2 ms ServerProcessing 12 ms Duration 19 ms
I0429 09:38:00.092642 37356 round_trippers.go:577] Response Headers:
I0429 09:38:00.092647 37356 round_trippers.go:580] Server: nginx/1.25.4
I0429 09:38:00.092650 37356 round_trippers.go:580] Date: Mon, 29 Apr 2024 07:38:00 GMT
I0429 09:38:00.092652 37356 round_trippers.go:580] Connection: upgrade
I0429 09:38:00.092655 37356 round_trippers.go:580] Sec-Websocket-Accept: jwxSymJmEArH6/jLS14PdptKhxg=
I0429 09:38:00.092657 37356 round_trippers.go:580] Sec-Websocket-Protocol: v5.channel.k8s.io
I0429 09:38:00.092660 37356 round_trippers.go:580] Upgrade: websocket
I0429 09:38:00.092661 37356 round_trippers.go:580] Via: 1.1 gitlab-agent/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:38:00.092714 37356 round_trippers.go:580] Via: gRPC/1.0 gitlab-kas/v17.0.0-rc1-21-g5a1145c3/5a1145c3
I0429 09:38:00.092733 37356 websocket.go:133] The subprotocol is v5.channel.k8s.io
total 72
drwxr-xr-x 1 root root 4096 Mar 27 2019 bin
drwxr-xr-x 2 root root 4096 Feb 3 2019 boot
drwxr-xr-x 5 root root 360 Apr 29 07:33 dev
drwxr-xr-x 1 root root 4096 Apr 29 07:33 etc
drwxr-xr-x 2 root root 4096 Feb 3 2019 home
drwxr-xr-x 1 root root 4096 Mar 27 2019 lib
drwxr-xr-x 2 root root 4096 Mar 26 2019 media
drwxr-xr-x 2 root root 4096 Mar 26 2019 mnt
drwxr-xr-x 2 root root 4096 Mar 26 2019 opt
dr-xr-xr-x 286 root root 0 Apr 29 07:33 proc
-rw-r--r-- 1 root root 5 Apr 29 07:33 product_name
-rw-r--r-- 1 root root 37 Apr 29 07:33 product_uuid
drwx------ 2 root root 4096 Mar 26 2019 root
drwxr-xr-x 1 root root 4096 Apr 29 07:33 run
drwxr-xr-x 2 root root 4096 Mar 26 2019 sbin
drwxr-xr-x 2 root root 4096 Mar 26 2019 srv
dr-xr-xr-x 13 root root 0 Apr 29 07:33 sys
drwxrwxrwt 1 root root 4096 Mar 27 2019 tmp
drwxr-xr-x 1 root root 4096 Mar 26 2019 usr
drwxr-xr-x 1 root root 4096 Mar 26 2019 var
I0429 09:38:00.153362 37356 websocket.go:490] closed channel--returning