Edit: I tried scaling down to 1 instance and it still didn't work. Seems the connection to redis is not working as inteded. Removing redis and running instance, signalr is up and running again.
I am trying to get SignalR / Websockets to work on my cluster. It works locally with Redis as scaleout for my apps. But when I run it online i get the following error: "No Connection with that ID". The app is online here: https://server.topswagcode.com/Home/Chat
I have tried lots of different stuff with enabling websockets, trying to apply stickysessions etc. But doesn't seem to work. Hope someone might have an idea.
my service, deployment and ingress looks like the following:
Service:
apiVersion: v1
kind: Service
metadata:
name: dotnet-service
annotations:
# Enable sticky sessions for Traefik
traefik.ingress.kubernetes.io/affinity: "true"
# Optional: Set the cookie name used for sticky sessions
traefik.ingress.kubernetes.io/session-cookie-name: "sticky-sess-id"
spec:
selector:
app: dotnet
ports:
- protocol: TCP
port: 8080
Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: dotnet-deployment
spec:
replicas: 3
selector:
matchLabels:
app: dotnet
template:
metadata:
labels:
app: dotnet
spec:
containers:
- name: dotnet
image: ######
ports:
- containerPort: 8080
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: connectionstring
valueFrom:
secretKeyRef:
name: postgresssecret
key: connectionstring
Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-production
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/affinity: "true"
traefik.ingress.kubernetes.io/websocket: "true"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/session-cookie-name: "stickyCookie"
traefik.ingress.kubernetes.io/websocket-endpoints: "/chat"
traefik.ingress.kubernetes.io/router.middlewares: default-redirect-https@kubernetescrd
labels:
app: dotnet
name: dotnet
namespace: default
spec:
rules:
- host: server.topswagcode.com # Change by your domain
http:
paths:
- backend:
service:
name: dotnet-service
port:
number: 8080
path: /
pathType: Prefix
tls:
- hosts:
- server.topswagcode.com # Change by your domain
secretName: server-topswagcode-com-tls
I got it up and running after adding:
traefik.ingress.kubernetes.io/service.sticky.cookie: "true"
traefik.ingress.kubernetes.io/service.sticky.cookie.name: cookie
traefik.ingress.kubernetes.io/service.sticky.cookie.secure: "true"
to the service yaml