【问题标题】:Using socket.io on GKE with nginx ingress在 GKE 上使用带有 nginx 入口的 socket.io
【发布时间】:2018-12-13 22:28:39
【问题描述】:

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

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

设置如下:

  • 我们有 5 个应用程序 pod,它们为分布在 5 个云节点(GCE vm 实例)上的应用程序提供服务

  • 我们正在使用 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


    【解决方案1】:

    我只是用与我们使用 socket.io 的相同配置来设置 ngin ingress。

    这是我的入口配置

    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

    【讨论】:

    • @FadiQuader 很高兴听到这个消息:)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-09-17
      • 1970-01-01
      • 2023-03-21
      • 2020-10-05
      • 2015-05-16
      • 2020-02-26
      • 2019-01-12
      • 2019-03-24
      • 2021-01-19
      相关资源
      最近更新 更多