nginx-ingress Websocket Connection

I had an issue with minio web console that, it stuck at “Loading” message while viewing “Object Browser”. Another issue with portainer that shell console closed immediately. They all sound to me due to the same exact issue. I figured out with help of Browser developer tools, that it logs very same message in the console.

WebSocket connection failed: Error during WebSocket handshake: Unexpected response code: 400

Solution

Adding following annotations to ingress resource did the trick.

    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.org/websocket-services: <name of service object>

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
    nginx.org/websocket-services: portainer
  labels:
    app.kubernetes.io/name: portainer
  name: portainer
  namespace: portainer
spec:
  ingressClassName: default
  rules:
  - host: portainer.otuken.io
    http:
      paths:
      - backend:
          service:
            name: portainer
            port:
              number: 9000
        path: /
        pathType: Prefix
status:
  loadBalancer: {}
Written by

yilgo

Scribbles of a Platform Engineer