我正在尝试将socket.io集成到部署在Google Kubernetes Engine上的应用程序中。在本地开发,一切都很好。但是一旦部署,当我的套接字尝试连接时,我将不断收到可怕的400响应。我已经在SO和其他网站上搜索了几天,但没有找到能解决我问题的任何信息。
不幸的是,该体系结构是由不再在我们公司工作的开发人员建立的,而且我当然不是Kubernetes或GKE专家,所以我不确定我是否正确设置了一切。
这里是设置:
我们有5个应用程序pod,可为分布在5个云节点(GCE虚拟机实例)上的应用程序提供服务
我们正在使用nginx入口控制器(https://github.com/kubernetes/ingress-nginx)创建负载均衡器以在节点之间分配流量
这是我到目前为止尝试过的:
nginx.ingress.kubernetes.io/affinity: "cookie"
nginx.ingress.kubernetes.io/session-cookie-hash: "sha1"
nginx.ingress.kubernetes.io/session-cookie-name: "route"
sessionAffinity: ClientIP
添加到入口引用的后端服务这些措施似乎没有什么区别,我仍然收到400的回复。如果有人处理过类似的情况或有任何建议将我指向正确的方向,我将非常感激!
答案 0 :(得分:0)
我猜您现在可能已经找到了答案,但是您必须在入口处添加注释,以指定将提供websocket升级的服务。看起来像这样:
# web socket support
nginx.org/websocket-services: "(your-websocket-service)"
答案 1 :(得分:0)
我只是使用与我们使用socket.io相同的配置来设置ngin入口。
这是我的入口配置
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: core-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.org/websocket-services : "app-test"
nginx.ingress.kubernetes.io/rewrite-target: /
certmanager.k8s.io/cluster-issuer: core-prod
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/websocket-services : "socket-service"
nginx.ingress.kubernetes.io/proxy-send-timeout: "1800"
nginx.ingress.kubernetes.io/proxy-read-timeout: "1800"
spec:
tls:
- hosts:
- <domain>
secretName: core-prod
rules:
- host: <domain>
http:
paths:
- backend:
serviceName: service-name
servicePort: 80
我也遇到了同样的问题,因此添加了proxy-send-timeout
和proxy-read-timeout
。