You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes集群中SignalR/WebSockets对接Traefik故障排查求助

问题:Kubernetes中SignalR使用Redis状态存储出现「No Connection with that ID」错误

我正尝试在Kubernetes集群中实现SignalR/WebSockets功能,本地环境下用Redis做应用横向扩展的状态存储完全正常,但部署到线上集群后就弹出「No Connection with that ID」错误。应用访问地址:https://server.topswagcode.com/Home/Chat。

已经试过启用WebSockets、配置会话粘性这些方案,都没解决问题。补充信息:

  • 将实例缩容至1个后问题仍未解决,似乎Redis连接未按预期工作
  • 移除Redis后单实例运行时,SignalR可正常工作

现有配置文件

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

排查思路

  • Redis连接与配置验证

    • 进入应用Pod内部,执行redis-cli -h <redis-host> ping或telnet <redis-host> 6379,确认网络连通性
    • 检查应用的Redis连接字符串是否正确,包括密码、端口、数据库索引、集群模式(若使用Redis集群)是否与线上环境匹配
    • 查看Redis服务日志,排查是否存在连接拒绝、认证失败、内存不足导致键值被淘汰的异常记录
  • SignalR Redis背板配置检查

    • 确认应用中SignalR的Redis背板是否配置了唯一的频道前缀,避免与其他应用的SignalR实例冲突
    • 检查Redis是否开启持久化(RDB/AOF),防止Redis重启后SignalR连接状态丢失
    • 验证Redis内存使用率,若内存不足会自动清理键值,导致连接状态无法同步
  • Kubernetes配置修正

    • 统一Service和Ingress的会话Cookie名称:当前Service使用sticky-sess-id,Ingress使用stickyCookie,需改为相同名称,确保Traefik的粘性会话生效
    • 核对Ingress的WebSocket端点配置:确认traefik.ingress.kubernetes.io/websocket-endpoints的值与SignalR Hub的实际路径一致(默认SignalR路径为/hub,需匹配你的Chat Hub路径)
    • 检查Deployment的环境变量:当前配置仅注入了PostgreSQL连接串,确认Redis连接串是否已通过环境变量或Secret正确注入到Pod中
    • 查看应用Pod的日志,搜索SignalR相关错误,比如Redis连接失败、背板初始化异常的日志信息
  • SignalR协议与调试

    • 在浏览器开发者工具的Network面板中,观察SignalR的握手请求、WebSocket连接的状态,排查是否存在4xx/5xx错误
    • 启用SignalR的Debug级别日志,查看连接建立、消息转发的详细过程,确认Redis背板是否正确同步连接状态

内容的提问来源于stack exchange,提问作者Kiksen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:14:54