通过 K8S Ingress 连接 SignalR
SignalR connection via K8S Ingress
我正在尝试公开托管在 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
不熟悉 SignalR,但可能有一些问题。
- nginx Ingress 可能正在剥离 SignalR 需要的一些 http headers。您是否熟悉 SignalR 应该接收的 http headers?
验证后,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>
希望对您有所帮助!
尝试:
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 服务,它应该可以消除许多令人头疼的问题(也在上面的示例中)。
我正在尝试公开托管在 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
不熟悉 SignalR,但可能有一些问题。
- nginx Ingress 可能正在剥离 SignalR 需要的一些 http headers。您是否熟悉 SignalR 应该接收的 http headers?
验证后,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>
希望对您有所帮助!
尝试:
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 服务,它应该可以消除许多令人头疼的问题(也在上面的示例中)。