通过 K8S Ingress 连接 SignalR

问题描述 投票:0回答:3

我正在尝试公开托管在 Kubernetes (Azure) pod 中的 SignalR 中心。基本上,身份验证和握手步骤工作正常,但是当我触发某些操作时,通过 k8s Ingress 连接的所有客户端都不会收到消息。有没有人遇到过这个问题或者只是通过 Kubernetes - Ingress 共享 SignalR 集线器?

ingress.yml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: endpoints
  annotations:
    kubernetes.io/ingress.class: addon-http-application-routing
    ingress.kubernetes.io/ssl-redirect: "false"  
    nginx.ingress.kubernetes.io/ssl-redirect: "false"  
    nginx.org/websocket-services: "myservice"
spec:
  rules:
  - host: api.[MY-DOMAIN].com
    http:
      paths:
      - backend:
          serviceName: myservice
          servicePort: 80
        path: /myservice
asp.net-core kubernetes signalr azure-aks
3个回答
12
投票

尝试:

annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/affinity: cookie
    nginx.ingress.kubernetes.io/session-cookie-hash: sha1
    nginx.ingress.kubernetes.io/session-cookie-name: REALTIMESERVERID

我不久前写了一个示例项目,如果您想要一个工作示例:DenisBiondic/RealTimeMicroservices

顺便说一句,考虑使用 Azure SignalR 服务,它应该可以消除许多令人头痛的问题(也在上面的示例中)。


1
投票

不熟悉 SignalR,但可能有一些事情。

  1. nginx Ingress 可能会剥离 SignalR 需要的一些 http 标头。您熟悉 SignalR 应该接收的 http 标头吗?
  2. 身份验证后,SignalR hub 是否有可能尝试使用 TLS?我发现您在端口 80 上运行该程序,但没有使用 TLS。您必须进行如下配置:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: endpoints
      annotations:
        kubernetes.io/ingress.class: addon-http-application-routing
        ingress.kubernetes.io/ssl-redirect: "false"  <== you may need to remove
        nginx.ingress.kubernetes.io/ssl-redirect: "false"   <== you may need to remove
        nginx.org/websocket-services: "myservice"
    spec:
      rules:
      - host: api.[MY-DOMAIN].com
        http:
          paths:
          - backend:
              serviceName: myservice
              servicePort: 80
            path: /myservice
      tls:
        - secretName: <your-tls-certs>
    

希望有帮助!


0
投票

那么 TLS 终止又如何呢?我的 NGNIX 入口正在侦听端口 443 并转发到 signalR pod 上的 TCP 端口 8888。这行得通吗?

© www.soinside.com 2019 - 2024. All rights reserved.