【问题标题】:SignalR Websocket via K8S ingressSignalR Websocket 通过 K8S 入口
【发布时间】:2020-05-14 03:01:14
【问题描述】:

我有一个简单的 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: /*

还有一个 HTML 客户端试图通过入口调用 SignalR 服务器方法? 但是由于某种原因,这个调用是否被忽略了?

我在某处读到 Http 被入口剥离?从而无法识别呼叫? 有什么办法可以避免这种情况吗?或者解决这个问题?

我在上面尝试了我在 SE 中找到的不同帖子,但这似乎不适用于我的情况..

【问题讨论】:

  • 我们可能需要更多详细信息才能为您提供帮助,但在此之前:您见过this documentation吗?

标签: kubernetes signalr nginx-ingress


【解决方案1】:

要使 SignalR 正常工作(以及通常用于 WebSockets),您应该启用 Sticky Sessions

在入口工作负载定义中添加注解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: /*

【讨论】:

  • 似乎问题是由不同的方式引起的 - 我使用了不正确的 SignalR 库
  • 您的问题解决了吗?您需要更多帮助吗?
猜你喜欢
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 2019-12-03
  • 2021-03-04
  • 2020-07-06
  • 1970-01-01
相关资源
最近更新 更多