我正在尝试公开托管在 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
尝试:
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,但可能有一些事情。
身份验证后,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>
希望有帮助!
那么 TLS 终止又如何呢?我的 NGNIX 入口正在侦听端口 443 并转发到 signalR pod 上的 TCP 端口 8888。这行得通吗?