I have an application API that works on Server-Sent Events (SSE, https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events).
It’s hosted in Managed kubernetes and exposed directly through Managed loadbalancer.
The Requests fail with “502 Bad Gateway”, “upstream connect error or disconnect/reset before headers. reset reason: protocol error”, although backend API shows 200 OK in logs.
As server-sent events are nothing but long-standing HTTP requests, there are ways to achieve it via increasing LoadBalancer <-> BackEnd SSE API HTTP connection timeout period.
I don’t see this option in DO LB though.
Ex. A workaround on GCP: https://stackoverflow.com/questions/44729212/running-a-https-sse-server-over-kubernetes-ingress-and-google-cloud-platform
These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.
Personally Solved by using Nginx Controller.
LoadBalance <- TCP -> Nginx Controller <- HTTP with timeout -> SSE API
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sse-api
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-read-timeout: "21600"
nginx.ingress.kubernetes.io/eventsource: "true"
Click below to sign up and get $100 of credit to try our products over 60 days!