使用nginx ingress在GKE上使用socket.io

问题描述 投票:0回答:2

我正在尝试将socket.io集成到部署在Google Kubernetes Engine上的应用程序中。在当地发展,一切都很好。但是一旦部署,当我的套接字试图连接时,我不断得到可怕的400响应。我已经在SO和其他网站上搜索了几天,我没有发现任何可以修复我的问题。

不幸的是,这个架构是由一个不再在我们公司的开发人员建立的,我当然不是Kubernetes或GKE专家,所以我绝对不确定我是否已经正确设置了所有内容。

这是设置:

  • 我们有5个app 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响应。如果有人处理过类似的情况或有任何建议指出我正确的方向,我会非常非常感激!

nginx socket.io kubernetes google-kubernetes-engine
2个回答
0
投票

我猜你现在可能已经找到了答案,但你必须在你的入口添加一个注释来指定哪个服务将提供websocket升级。它看起来像这样:

# web socket support
nginx.org/websocket-services: "(your-websocket-service)"

0
投票

我只是使用相同的配置设置ngin ingress,我们正在使用socket.io。

这是我的入口配置

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-timeoutproxy-read-timeout

© www.soinside.com 2019 - 2024. All rights reserved.