Asp.net-Core
SignalR 通過 K8S Ingress 連接
我正在嘗試公開託管在 Kubernetes (Azure) pod 中的 SignalR 集線器。基本上,身份驗證和握手步驟工作正常,但是當我觸發某些操作時,所有通過 k8s Ingress 連接的客戶端都不會收到消息。有沒有人遇到過這個問題,或者只是通過 Kubernetes - Ingress 共享了 SignalR 集線器?
入口.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
嘗試:
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 服務,它應該會消除許多令人頭疼的問題(也在上面的範例中)。
不熟悉 SignalR,但可能有幾件事。
- nginx Ingress 可能正在剝離 SignalR 需要的一些 http 標頭。您熟悉 SignalR 應該接收的 http 標頭嗎?
- 進行身份驗證後,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>希望能幫助到你!