socket.io在kubernetes上的实践和一些坑

1.背景

前端有一个node服务,加了新功能,是websocket通信,用的是socket.io框架。当pod数量是1个时是正常,当有多个pod,就会出现400(session unkown)问题。原因很简单,因为流量随机分发给pod,这就需要会话保持了。

2.尝试解决

  • svc sessionAffinity配置成ClientIP。经过测试还是会出现流量随机分发的问题
  • 通过ingress-nginx-controller的cookie保持会话。kubernetes.github.io/ingress-ngi… 但是测试的时候还是会出现分发流量
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/affinity-mode: "persistent"

3.解决

  • 首先可以看下websocket是啥www.zhihu.com/question/20…
  • 开发后面直接改为websocket协议请求,没有先http请求,然后升级成websocket协议,后续还在测试,不知道在pod数缩增,更新时会不会出现错误
  • 其实官方也有Redis adapter方法 socket.io/docs/v3/usi…