Live stream doesn't work when put behind reverse proxy
I have set up Skyvern on Kubernetes behind reverse proxy for TLS. Everything works correctly (workflows, artifacts etc) with one exception - Live stream. It's always:
Considering that it's only component utilizing WebSocket, it's most likely WebSocket issue. No errors in browser's console or container's console.
Skyvern version 0.2.5
Other applications that utilize websockets on same setup works correctly.
I have the same issue trying to use Skyvern using Kubeadm. The streams doesn't work at all, there's no screenshot but navigating through the PVC, I was able to find the files. Seems that the Ingress controller is not able to let pass the WSS (websocket) communication or something similar. I am using the version 2.11.
This is an example of my ingress.yaml file:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: skyvern-ingress
namespace: skyvern
annotations:
cert-manager.io/cluster-issuer: HIDDEN
nginx.ingress.kubernetes.io/proxy-body-size: 100m
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
nginx.ingress.kubernetes.io/proxy-read-timeout: "1800"
nginx.ingress.kubernetes.io/proxy-send-timeout: "1800"
spec:
ingressClassName: nginx
rules:
- host: skyvern.contoso.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: skyvern-backend
port:
number: 8000
- path: /artifacts
pathType: Prefix
backend:
service:
name: skyvern-frontend
port:
number: 9090
- path: /
pathType: Prefix
backend:
service:
name: skyvern-frontend
port:
number: 8080
tls:
- hosts:
- skyvern.contoso.com
secretName: skyvern.contoso.com-tls
After apply the last image version, the streaming was showing a black screen instead an error or wait message. After a bit of trial and error, I was able to detect the problem.
Solution: Seems that the /artifacts configured into the ingress configuration should be /artifact. With this modification the screenshots and recordings started to work as excepted.