I should note that this only seems to happen (frequently) with VNC connections.
I have RDP connection, and an SSH connection to the same host as the VNC
connection that does not seem to time out, at least not within the 30-40
minutes of testing I’ve done, just the VNC connection, which can happen
anywhere between 5-10 minutes after starting the connection.
From: Justin Gauthier
Reply-To: "user@guacamole.apache.org"
Date: Tuesday, August 20, 2019 at 9:29 PM
To: "user@guacamole.apache.org"
Subject: Guacamole websockets issues
Hello,
I am running Guacamole in Kubernetes (using this helm chart
https://github.com/Just-Insane/apache-guacamole-helm-chart). I am using the
nginx ingress for ingress into the Guacamole frontend. Which uses Guacamole
1.0.0 docker container.
I am getting some websocket timeout errors:
01:11:08.155 [http-nio-8080-exec-10] INFO o.a.g.tunnel.TunnelRequestService -
User "justin" connected to connection "2".
01:11:08.234 [http-nio-8080-exec-1] INFO o.a.g.tunnel.TunnelRequestService -
User "justin" disconnected from connection "2". Duration: 78 milliseconds
Exception in thread "Thread-166" java.lang.IllegalStateException: Message will
not be sent because the WebSocket session has been closed
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:424)
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:309)
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:250)
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:191)
at
org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37)
at
org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint.sendInstruction(GuacamoleWebSocketTunnelEndpoint.java:152)
at
org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint.access$200(GuacamoleWebSocketTunnelEndpoint.java:53)
at
org.apache.guacamole.websocket.GuacamoleWebSocketTunnelEndpoint$2.run(GuacamoleWebSocketTunnelEndpoint.java:253)
The nginx ingress does support websockets by default, but their timeouts are
set to 60 seconds.
https://kubernetes.github.io/ingress-nginx/user-guide/miscellaneous/#websockets
which I have resolved, by setting the timeouts on both suggested options to
3600.
There does not seem to be any specific reason (or time duration) after which
the connection is closed, and there is nothing that would cause the connection
between the guacamole frontend and guacd to close prematurely.
When the connection fails, clicking the reconnect button on the prompt
sometimes succeeds, however it usually fails. I have noticed that doing a hard
reload of the tab seems to fix the issue for a little while.
Experience tells me that this is likely going to be an issue with the nginx
setup, but if anyone else has other suggestions, I am interested in hearing
them.
Thanks,
Justin