背景:公司的后端同事在代码调试过程中需要上传一个文件,调用的websocket接口

了解同事需求和现象

浏览器上传文件一直卡主,通过浏览器调试模式发现无法正常获取websocket的连接 websocket的接口访问可以通过wscat命令(需单独安装)测试。 浏览器访问报错如下: WebSocket connection to ‘ws://*********’ faile Error during WebSocket handshake: Unexpected response code: 200

命令测试:/usr/local/node/bin/wscat -c ws://10.111.189.187:8101/aad-server/webSocket/113

不能访问

猜测引起原因以及应对方式

流量入口没有兼容ws协议访问 如nginx未配置ws协议支持 nginx反向代理要配置一些参数 来达到转发 websocket请求

解决方案

由于k8s集群入口是通过边缘路由ngress nginx来管理的会存在如下的坑

需要额外的配置进行协议转换, 需要在能配置在 ingress的 annotations中添加额外配置如下:

proxy_set_header Upgrade "websocket";

proxy_set_header Connection "Upgrade";

其次,由于我们访问pod里面的路劲存在变化,需要通过rewrite进行改下,规则注意括号(我弄的时候少扩了一个左斜线开始就不能正常访问)。

应用该ingress

kubectl apply -f websocket-ingress.yaml

测试链接服务

总结

websocket 使用的场景比较少,就是对环境有一定的要求,配置比较麻烦点;而rewrite使用较多,更多详情请见官网https://kubernetes.github.io/ingress-nginx/examples/rewrite/

更多关于kubernetes和运维相关的知识,请前往博客主页。

相关文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。