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

Kubernetes集群迁移后Nginx-Ingress WebSocket配置问题咨询

Kubernetes Nginx-Ingress 配置WebSocket解决方案

核心结论

通过Helm安装的官方ingress-nginx/ingress-nginx完全支持WebSocket,你的问题出在混用了不同Ingress控制器的注释——当前配置同时使用了官方nginx-ingress的nginx.ingress.kubernetes.io/*注释和NGINX官方控制器的nginx.org/*注释,导致WebSocket相关配置不生效。

问题分析

你用helm install ingress-nginx ingress-nginx/ingress-nginx安装的是kubernetes社区维护的ingress-nginx控制器,而nginx.org/websocket-services、nginx.org/lb-method这类注释属于NGINX官方发布的独立Ingress控制器,两者注释体系不兼容,所以你的WebSocket配置等于未生效。

修正后的Ingress配置

替换成以下配置,移除无效注释,补充正确的WebSocket支持配置:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: production-server
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "route"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    # 替代原nginx.org/lb-method,实现ip_hash负载均衡
    nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr"
    # 调整长连接超时时间,WebSocket需要更长超时避免连接被断开
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "10s"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600s"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600s"
    # 官方nginx-ingress的WebSocket服务指定注释
    nginx.ingress.kubernetes.io/websocket-services: "production-server"
spec:
  rules:
  - host: test.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: production-server
            port:
              number: 8000
  tls:
  - secretName: production-cert
    hosts:
      - test.example.com

关键修改点说明

  • 移除所有nginx.org/*注释:这类注释对当前安装的控制器无效,直接删除即可
  • 替换负载均衡策略注释:如果需要ip_hash效果,用nginx.ingress.kubernetes.io/upstream-hash-by: "$remote_addr"替代原注释
  • 延长代理超时时间:WebSocket是长连接,原10s超时会导致连接被主动断开,调整为3600s(1小时)或根据业务需求设置更长时间
  • 使用正确的WebSocket注释:nginx.ingress.kubernetes.io/websocket-services指定处理WebSocket请求的后端服务,确保Ingress正确转发握手请求

应用修正后的配置:

kubectl apply -f 你的Ingress配置文件名.yaml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:54:18