Skip to content

Unable to serve code-server through inverting proxy #142

@pkvprakash

Description

@pkvprakash

Image

Problem description:

When I try to access code-server behind inverting proxy, I get the page loaded with websocket errors.

Dataproc Image : Ubuntu 20.04
Browser : MS Edge
Code server version : 4.91.0

Steps to reproduce:

  1. Create a dataproc custer, with component gateway enabled.
  2. Stop google-dataproc-component-gateway and knox services sudo systemctl stop knox google-dataproc-component-gateway
  3. Install code-server on the master node. Refer: https://coder.com/docs/code-server/install#debian-ubuntu
  4. Start code-server on port 8080, auth none for testing. code-server --verbose --auth none
  5. Start component gateway on console so that you can see the logs. user@codeserver-test-m:~$ /usr/bin/proxy-forwarding-agent -proxy https://us-central1.dataproc.cloud.google.com/tun/m/<a-hex-string>/ -host localhost:8080 -backend xxxxxxxxxx -session-cookie-name=_xsrf -shim-path websocket-shim
  6. Use dataproc url to access code server using browser. Eg: https://xxxxxxxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com and observe the logs

Outcome

On browser:

TRACE [remote-connection][Management   ][d2d47…][initial][WebSocket(xxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com:443)] 1/6. invoking socketFactory.connect().  log.ts:419  
INFO Creating a socket (renderer-Management-d2d47e5e-d55e-469d-aea3-9ccdd1b4091e)...  log.ts:419  
INFO Creating a socket (renderer-Management-d2d47e5e-d55e-469d-aea3-9ccdd1b4091e) was successful after 1568 ms.   log.ts:399 
TRACE [remote-connection][Management   ][d2d47…][initial][WebSocket(xxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com:443)] 2/6. socketFactory.connect() was successful.    log.ts:399 
TRACE [remote-connection][Management   ][d2d47…][initial][WebSocket(xxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com:443)] 3/6. sending AuthRequest control message.      log.ts:399 
TRACE [remote-connection][Management   ][d2d47…][initial][WebSocket(xxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com:443)] 4/6. received SignRequest control message.     log.ts:399 
TRACE [remote-connection][Management   ][d2d47…][initial][WebSocket(xxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com:443)] 5/6. sending ConnectionTypeRequest control message.  log.ts:439   
ERR [remote-connection][Management   ][d2d47…][initial][WebSocket(xxxxxxxxxx-dot-us-central1.dataproc.googleusercontent.com:443)] received error control message when negotiating connection. Error:    log.ts:439   
ERR Error: Connection error: Malformed second message
    at H (remoteAgentConnection.ts:783:17)
    at u.value (remoteAgentConnection.ts:326:17)
    at a.B (event.ts:1211:13)
    at a.fire (event.ts:1242:9)
    at n.fire (ipc.net.ts:650:19)
    at b.z (ipc.net.ts:1022:28)
    at u.value (ipc.net.ts:876:72)
    at a.B (event.ts:1211:13)
    at a.fire (event.ts:1242:9)
    at h.acceptChunk (ipc.net.ts:394:21)

On Console (code-server logs)

user@codeserver-test-m:~$ code-server --bind-addr 127.0.0.1:8080 --verbose --auth none
[2024-11-04T12:40:34.393Z] debug parent:10764 spawned child process 10782
[2024-11-04T12:40:34.758Z] debug child:10782 initiating handshake
[2024-11-04T12:40:34.762Z] debug parent:10764 got message {"message":{"type":"handshake"}}
[2024-11-04T12:40:34.764Z] debug child:10782 got message {"message":{"type":"handshake","args":{"bind-addr":"127.0.0.1:8080","auth":"none","password":"<redacted>","config":"/home/user/.config/code-server/config.yaml","verbose":true,"user-data-dir":"/home/user/.local/share/code-server","extensions-dir":"/home/user/.local/share/code-server/extensions","session-socket":"/home/user/.local/share/code-server/code-server-ipc.sock","log":"trace","host":"127.0.0.1","port":8080,"proxy-domain":[],"_":[],"usingEnvPassword":false,"usingEnvHashedPassword":false}}}
[2024-11-04T12:40:34.765Z] info  code-server 4.91.0 fb3e3e1546d571e9973e86482bcd925c1918ec27
[2024-11-04T12:40:34.765Z] info  Using user-data-dir /home/user/.local/share/code-server
[2024-11-04T12:40:34.765Z] debug Using extensions-dir /home/user/.local/share/code-server/extensions
[2024-11-04T12:40:34.787Z] info  Using config file /home/user/.config/code-server/config.yaml
[2024-11-04T12:40:34.787Z] info  HTTP server listening on http://127.0.0.1:8080/
[2024-11-04T12:40:34.787Z] info    - Authentication is disabled
[2024-11-04T12:40:34.787Z] info    - Not serving HTTPS
[2024-11-04T12:40:34.787Z] info  Session server listening on /home/user/.local/share/code-server/code-server-ipc.sock

....
….

[12:45:02] [127.0.0.1][6b8b0d5b] Malformed second message

...

Component gateway logs

user@codeserver-test-m:~$ /usr/bin/proxy-forwarding-agent             -proxy https://us-central1.dataproc.cloud.google.com/tun/m/<a-hex-string>/             -host localhost:8080             -backend xxxxxxxxxx                    -session-cookie-name=_xsrf -shim-path websocket-shim 
2024/11/04 13:47:42 Skipping metric handler initialization due to empty arguments.
2024/11/04 13:49:19 Websocket connection to the server "ws://localhost:8080/stable-090e0fad76152d6a0c10903a3bbf8a83d09e93d0?reconnectionToken=b5d11bcd-da5c-4e94-8b6a-8badae78dfe3&reconnection=false&skipWebSocketFrames=false" established for session: 1
2024/11/04 13:49:55 Websocket failure: failed to read a websocket message from the server: websocket: close 1006 (abnormal closure): unexpected EOF

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions