部署的websocket无法通过ingress边界路由

来源:6-7 istio服务治理演示

懒虫小子

2019-03-29

我的环境

  • k8s部署环境: 本地虚拟机搭建的集群,1 master + 2 nodes
  • k8s版本: v1.14.0,昨天被我升级为:v1.14.0
  • k8scni插件: weaveflannel
  • LoadBalancer Provider: metallb
  • Ingress: k8s 维护的ingress-nginx 和nginx社区维护的ingress-nginx都尝试过

存在问题

wssocket通过ingress路由进行握手。
wssocket无法通过ingress路由进行握手。

如果通过service暴露出的ip和端口进行握手是没有问题的,如下下图:

1

如果将service type的设置的类型设置为:NodePort,通过映射的ip和端口就无法进行握手,如下图:

2

通过 nginx-ingress 进行握手也是不行的,如下图:

3

nginx的配置文件如下:

# configuration for default/wsservice-ingress

upstream default-wsservice-ingress-wsservice.dev.ifoc.com-wsservice-96 {
        random two least_conn;

        server 10.46.0.5:96 max_fails=1 fail_timeout=10s;

}


server {


        listen 80;






        server_tokens on;

        server_name wsservice.dev.ifoc.com;






        location / {


                proxy_http_version 1.1;

                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;

                proxy_connect_timeout 60s;
                proxy_read_timeout 60s;
                client_max_body_size 1m;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Host $host;
                proxy_set_header X-Forwarded-Port $server_port;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_buffering on;

                proxy_pass http://default-wsservice-ingress-wsservice.dev.ifoc.com-wsservice-96;


        }


}

请问老师,这个可能是什么原因造成的,怎么处理?

如何建立握手

ws://ip:port/v1/releaseeval?flightId=1232

老师可以参考我的部署的应用:
https://gitee.com/liuhll2/wsservice-k8s-deploy

写回答

1回答

tonybai

2019-03-29

你好,通过nodeport无法建立ws connection,挺意外的。你试试在nodeport情况下,telnet 这个service,看连接是否通!在有ingress的情况下,查看一下ingress-controller的访问日志(nginx的access日志),看看能否查出写蛛丝马迹。

0
0

Kubernetes实战 高可用集群搭建,配置,运维与应用

以生产为目标,原理+操作, Kubernetes结合典型云原生应用

794 学习 · 196 问题

查看课程