kubernetes - SignalR Websocket 通过 K8S 入口
问题描述
我有一个简单的 SignalR 客户端服务器设置,其中我的服务器由运行在 kubernetes 集群中的 Web 应用程序组成,通过入口控制器公开服务,如下所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
# Enable PROXY protocol
service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"
name: coreapilocal-ingress
spec:
rules:
- host: coreapilocal.localhost
http:
paths:
- backend:
serviceName: coreapilocal-service
servicePort: 80
path: /
- backend:
serviceName: coreapilocal-service
servicePort: 80
path: /*
以及试图通过入口调用 SignalR Server 方法的 HTML 客户端?但是由于某种原因,这个调用是否被忽略了?
我在某处读到 Http 被入口剥夺了?从而无法识别呼叫?有什么办法可以避免这种情况吗?或者解决这个问题?
我在上面尝试了我在 SE 中找到的不同帖子,但这在我的情况下似乎不起作用..
解决方案
要使 SignalR 正常工作(以及通常用于 WebSockets),您应该启用粘性会话
将注解添加nginx.ingress.kubernetes.io/affinity: "cookie"
到入口工作负载定义中:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
# Enable PROXY protocol
service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"
nginx.ingress.kubernetes.io/affinity: "cookie"
name: coreapilocal-ingress
spec:
rules:
- host: coreapilocal.localhost
http:
paths:
- backend:
serviceName: coreapilocal-service
servicePort: 80
path: /
- backend:
serviceName: coreapilocal-service
servicePort: 80
path: /*
推荐阅读
- emacs - 如何显示单个文件中的所有 TODO 项
- java - 使用 FreeMarker 处理深层嵌套的复杂 xml
- php - 我想通过附近的过滤器和距离的限制从mysql数据库中获取行
- powerbi - Power BI Desktop - 默认为天的相对日期切片器
- polyfills - 为什么交叉点观察器不适用于所有浏览器?如果交叉点观察器不可用,是否可以使用 polyfill
- c++ - 在另一个类的成员函数中使用仿函数
- javascript - 根据angularjs中的类名过滤数据
- c# - 如何使用 C# 使用 Selenium WebDriver 知道 URL 是否存在?
- reactjs - 如何调试 React jest 酶测试用例
- react-native - React Native FlatList onViewableItemsChanged 返回不正确的项目集