【问题标题】:Kubernetes nginx ingress proxy pass to websocketKubernetes nginx 入口代理传递到 websocket
【发布时间】:2018-06-11 22:54:48
【问题描述】:

我们正在使用 unicorn 和 websocket 运行 rails 应用程序。 我们使用 AWS ELB 作为入口 SSL 在 ELB 上终止并将流量转发到应用程序。

Nginx 入口将流量路由到在端口 8080 上运行 unicorn/puma 的 Web 应用。

应用程序可以运行,但我们的 websocket 响应为 200 而不是 101。我们已启用 CORS 并在入口中使用了所需的注释。

这是用于入口控制器服务的注释

service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: '*'
service.beta.kubernetes.io/aws-load-balancer-ssl-cert::arn:aws:iam::xxx:server-certificate/staging
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https

当我们将 aws 负载均衡器协议用作 tcp 并将负载均衡器端口用作 443 时,它会在无限重定向循环中失败。

以下是入口中使用的注解:

nginx.ingress.kubernetes.io/service-upstream: true      
nginx.ingress.kubernetes.io/cors-allow-methods: "PUT, GET, POST, OPTIONS"
nginx.ingress.kubernetes.io/cors-allow-headers: "DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type"
nginx.ingress.kubernetes.io/cors-allow-origin: "*"
nginx.ingress.kubernetes.io/cors-allow-credentials: "true"
ingress.kubernetes.io/force-ssl-redirect: "true"

我们之前使用的没有入口的示例 nginx 配置是 here

如何让 websockets 与带有 AWS ELB 的 nginx 入口控制器一起工作?

【问题讨论】:

    标签: amazon-web-services nginx websocket kubernetes docker-ingress


    【解决方案1】:

    是否可以不使用 CORS 进行尝试?

    握手的一部分是客户端必须至少发送这些标头:

    Sec-WebSocket-Key
    Sec-WebSocket-Version
    

    也许还有别的。看https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#The_WebSocket_Handshake

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-28
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 2016-11-15
      • 2020-02-27
      • 2020-08-14
      相关资源
      最近更新 更多