【问题标题】:SignalR connection via K8S IngressSignalR 通过 K8S Ingress 连接
【发布时间】:2019-02-24 02:03:18
【问题描述】:

我正在尝试公开托管在 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


    【解决方案1】:

    试试:

    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 服务,它应该会消除许多令人头疼的问题(也在上面的示例中)。

    【讨论】:

      【解决方案2】:

      不熟悉 SignalR,但可能有几件事。

      1. nginx Ingress 可能正在剥离 SignalR 需要的一些 http 标头。您是否熟悉 SignalR 应该接收的 http 标头?
      2. 身份验证后,SignalR 集线器是否有可能尝试使用 TLS?我看到你在没有 TLS 的端口 80 上运行它。您必须配置如下内容:

        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>
        

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-14
        • 1970-01-01
        • 1970-01-01
        • 2021-12-14
        • 2015-06-16
        • 2021-10-18
        • 2019-07-29
        • 2020-11-06
        相关资源
        最近更新 更多