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

Google Kubernetes中Nginx Ingress的WebSocket粘性会话问题

Google Kubernetes环境下WebSocket粘性会话问题排查与解决

问题核心结论

Ingress与部署不在同一命名空间是导致配置失效的关键原因之一:Nginx Ingress的会话亲和注解依赖于正确关联后端Service,若Ingress和目标Service分属不同命名空间,且未在Ingress配置中明确指定Service的命名空间,Ingress无法正确绑定到后端服务,会话亲和规则根本不会生效,自然不会生成粘性Cookie。此外,WebSocket场景还需额外配置Ingress的WebSocket支持规则。

具体解决步骤

1. 修正Ingress与Service的跨命名空间关联

在Ingress配置中明确指定后端Service的命名空间,确保Ingress能正确找到目标服务。同时添加WebSocket必需的支持注解:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: your-ws-ingress
  namespace: ingress-ns # 你的Ingress所在命名空间
  annotations:
    # 会话亲和核心配置
    nginx.ingress.kubernetes.io/affinity: "cookie"
    nginx.ingress.kubernetes.io/session-cookie-name: "ws-sticky-cookie"
    nginx.ingress.kubernetes.io/session-cookie-expires: "172800"
    nginx.ingress.kubernetes.io/session-cookie-max-age: "172800"
    # WebSocket支持必需配置
    nginx.ingress.kubernetes.io/websocket-services: "service-ns/your-ws-service"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
spec:
  rules:
  - host: your-domain.com
    http:
      paths:
      - path: /ws
        pathType: Prefix
        backend:
          service:
            name: your-ws-service
            namespace: service-ns # 明确指定后端Service的命名空间
            port:
              number: 80

2. 优化Service的会话亲和配置

给后端Service补充会话亲和规则,与Ingress配置形成双重保障:

apiVersion: v1
kind: Service
metadata:
  name: your-ws-service
  namespace: service-ns # 与Pod/部署同命名空间
spec:
  selector:
    app: your-ws-app
  ports:
  - port: 80
    targetPort: 8080
  sessionAffinity: ClientIP
  sessionAffinityConfig:
    clientIP:
      timeoutSeconds: 172800

3. 验证配置生效

  • 重新应用配置文件:kubectl apply -f ingress.yaml -f service.yaml
  • 检查Ingress控制器日志,确认无服务关联错误:kubectl logs -n ingress-nginx deployment/ingress-nginx-controller
  • 打开浏览器开发者工具,在Application -> Cookies中查看是否生成指定名称的粘性Cookie
  • 发起WebSocket连接,通过Pod日志验证请求是否固定到同一实例

额外注意事项

  • 若使用GKE原生Ingress(而非开源Nginx Ingress),需改用GKE专属配置:通过cloud.google.com/backend-config注解关联BackendConfig资源,在BackendConfig中开启会话亲和
  • 确保Nginx Ingress Controller版本不低于v0.29.0,旧版本对跨命名空间Service支持不完善

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:09:50