背景:公司的后端同事在代码调试过程中需要上传一个文件,调用的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/
文章来源:https://www.toymoban.com/news/detail-736950.html
更多关于kubernetes和运维相关的知识,请前往博客主页。文章来源地址https://www.toymoban.com/news/detail-736950.html
到了这里,关于【kubernetes系列】k8s ingress配置websocket支持的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!