当前位置: 首页 > news >正文

云环境K8s集群WebSocket连接失败解决方案

云环境K8s集群WebSocket连接失败解决方案

一、问题描述

在云环境(如华为云)的K8s集群中部署WebSocket服务(Java后端+Vue前端+Python客户端)时,遇到**无法连接或握手失败(400 Bad Request)**问题,具体表现为:

  • Python客户端日志显示:Handshake status 400
  • Java后端日志无WebSocket连接记录;
  • 浏览器开发者工具显示:WebSocket请求未升级为101状态(仍为HTTP 400)。

二、核心问题分析

WebSocket连接需要特殊的协议升级流程(从HTTP到WebSocket),而云环境中的Nginx-Ingress(K8s ingress controller)和**云负载均衡器(ELB)**默认未配置这些流程,导致:

  1. 协议头未传递UpgradeConnection头未从客户端转发到后端服务;
  2. 超时时间过短:Nginx-Ingress默认60秒超时,断开长连接;
  3. 跨域限制:后端服务未允许客户端的Origin(如https://example.com)。

三、分步解决方案

1. K8s Ingress配置:解决Nginx转发问题

需要的知识

  • Ingress是K8s的“智能路由”,本质是Nginx集群;
  • WebSocket需要UpgradeConnection头传递。

修改ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: example-service-namenamespace: example-autoannotations:# 1. WebSocket必需:转发Upgrade和Connection头nginx.ingress.kubernetes.io/proxy-set-header: |Upgrade $http_upgrade;Connection $connection_upgrade;# 2. WebSocket必需:HTTP/1.1(之前已修正)nginx.ingress.kubernetes.io/proxy-http-version: "1.1"# 3. 超时设置(WebSocket长连接需要)nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"# 4. 路径重写:将/gcyiams/ws转发到Java服务的/ws端点(因context-path=/gcyiams,实际后端路径是/gcyiams/
http://www.xdnf.cn/news/1231417.html

相关文章:

  • 【REACT18.x】使用vite创建的项目无法启动,报错TypeError: crypto.hash is not a function解决方法
  • 基于 LightGBM 的二手车价格预测
  • GaussDB having 的用法
  • 图像加密学习日志————论文学习DAY4
  • 分布式事务----spring操作多个数据库,事务以及事务回滚还有用吗
  • 机械臂的轨迹生成的多种方案
  • Jupyter notebook如何显示行号?
  • MFC 实现托盘图标菜单图标功能
  • NCV8402ASTT1G自保护N沟道功率MOSFET安森美/ONSEMI 过流过温保护汽车级驱动NCV8402ASTT1
  • 从基础功能到自主决策, Agent 开发进阶路怎么走?
  • 【计算机网络】Socket网络编程
  • Android 15 限制APK包手动安装但不限制自升级的实现方案
  • 断路器瞬时跳闸曲线数据获取方式
  • Javaweb————Apache Tomcat服务器介绍及Windows,Linux,MAC三种系统搭建Apache Tomcat
  • 嵌入式第十八课!!数据结构篇入门及单向链表
  • Oracle 11gR2 Clusterware应知应会
  • IDM下载失败排查
  • 704. 二分查找
  • 市政污水厂变频器联网改造方案-profibus转ethernet ip网关(通俗版)
  • CommonJS和ES6 Modules区别
  • python:以支持向量机(SVM)为例,通过调整正则化参数C和核函数类型来控制欠拟合和过拟合
  • Autosar Nm-网管报文PNC停发后无法休眠问题排查
  • 区分「尊重」和「顺从」
  • 简化理解I2C总线
  • Android13文件管理USB音乐无专辑图片显示的是同目录其他图片
  • 【Django】-6- 登录用户身份鉴权
  • Piriority_queue
  • Java多线程入门-基础概念与线程操作
  • JVM中年轻代、老年代、永久代(或元空间)、Eden区和Survivor区概念介绍
  • ART数据库索引结构--ART,The adaptive radix tree论文细读