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

ALB配置下SpringBoot应用WebSocket服务报Invalid HTTP upgrade(404)错误排查求助

解决EKS ALB下SpringBoot WebSocket的404升级错误

针对你遇到的WebSocket服务报Invalid HTTP upgrade 404错误的问题,结合你的环境(aws-load-balancer-controller v2.3.0、K8s 1.19 eks.7),我整理了以下排查和解决步骤:

1. 确认Ingress路径匹配规则

404错误首先要怀疑路径映射问题。检查你的ingress.yaml中WebSocket对应的路径配置:

  • 如果使用pathType: Exact,要确保前端请求的wss://xxx.xx.xx.com:443/xx/xx/xx/xx路径和Ingress中定义的完全一致,包括末尾的斜杠、上下文路径等细节。
  • 建议对WebSocket路径使用pathType: Prefix(如果你的端点是子路径),避免精确匹配导致的路径不匹配问题。示例配置:
paths:
  - path: /xx/xx/xx/xx
    pathType: Prefix
    backend:
      service:
        name: your-springboot-service
        port:
          number: 8080

2. 添加WebSocket支持的Ingress注解

ALB需要特定注解来允许HTTP升级到WebSocket协议,确保你的Ingress包含以下关键注解:

  • alb.ingress.kubernetes.io/backend-protocol: HTTP:必须设置为HTTP(即使ALB用HTTPS监听,后端服务通常是HTTP端口,ALB会负责SSL终止后转发HTTP请求到后端,包括WebSocket升级请求)。
  • 确保没有安全组或WAF规则拦截Upgrade和Connection请求头,这两个头是WebSocket升级的必要条件。

核心注解示例:

annotations:
  alb.ingress.kubernetes.io/scheme: internet-facing
  alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
  alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:xxx:xxx:certificate/xxx
  alb.ingress.kubernetes.io/ssl-redirect: '443'
  alb.ingress.kubernetes.io/backend-protocol: HTTP
  alb.ingress.kubernetes.io/healthcheck-path: /actuator/health # 你的REST健康检查路径

3. 验证SpringBoot WebSocket配置

检查你的SpringBoot应用是否正确配置了WebSocket端点:

  • 确认@ServerEndpoint注解的路径和前端请求的路径完全一致,包括应用的上下文路径(如果设置了server.servlet.context-path)。比如如果上下文路径是/api,那么端点应该是@ServerEndpoint("/api/xx/xx/xx/xx")。
  • 确保应用中已经启用了WebSocket支持,比如添加了@EnableWebSocket或@EnableWebSocketMessageBroker注解(根据你的WebSocket类型选择)。

4. 检查ALB目标组配置

通过AWS控制台查看ALB对应的目标组:

  • 确认目标组的协议是HTTP(不是HTTPS),端口和你的SpringBoot服务端口一致(比如8080)。
  • 确认目标组的健康检查状态正常(REST服务正常说明健康检查没问题,但可以确认下目标组是否正确关联了所有Pod)。

5. 查看ALB访问日志

开启ALB的访问日志(在AWS控制台的ALB配置中开启,日志存放在S3),查看WebSocket请求的详细记录:

  • 检查请求的path是否和Ingress配置一致,状态码是否为404(确认是路径问题还是升级失败)。
  • 检查请求头中是否包含Upgrade: websocket和Connection: Upgrade,这些头是WebSocket升级必须的,ALB应该正确转发这些头到后端。

6. 考虑控制器版本兼容性

虽然v2.3.0支持K8s 1.19,但如果以上配置都没问题,可以尝试升级aws-load-balancer-controller到v2.4.x或更高版本(兼容K8s 1.19的版本),因为旧版本可能存在WebSocket转发的已知bug。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:42:28