• 微服务
  • Nginx Ingress Controller高延时问题

ks:kubesphere3.0
nginx-ingress-controller:0.24.1
通过应用路由创建的ingress,http服务的Waiting时长达到了5s,而通过NodePort暴露的Service表现正常,查看了nginx controller的日志,没发现什么异常,且配置都是默认配置,还请帮忙给点排查思路

  • zealzhangz 觉得很赞
  • 经过排查,发现是跨网段路由转发时,偶发性的丢包问题导致的,看来还是方向错了

  1. Ingress Controller本质上是一个Nginx Server,可以直接把它的配置文件导出来看下:

如:

kubectl -n kubesphere-controls-system exec kubesphere-router-project-demo-66bf8578c8-mrps5 -- cat /etc/nginx/nginx.conf >nginx.conf

检查下配置文件:

	## start server productpage.project-demo.192.168.0.4.nip.io
        server {
                server_name productpage.project-demo.192.168.0.4.nip.io ;

                listen 80;

                set $proxy_upstream_name "-";
                set $pass_access_scheme $scheme;
                set $pass_server_port $server_port;
                set $best_http_host $http_host;
                set $pass_port $pass_server_port;

                location / {

                        set $namespace      "project-demo";
                        set $ingress_name   "bookinfo-ingress";
                        set $service_name   "productpage";
                        set $service_port   "9080";
                        set $location_path  "/";
rewrite_by_lua_block {
                                lua_ingress.rewrite({
                                        force_ssl_redirect = false,
                                        use_port_in_redirects = false,
                                })
                                balancer.rewrite()
                                plugins.run()
                        }

                        header_filter_by_lua_block {

                                plugins.run()
                        }
                        body_filter_by_lua_block {

                        }

                        log_by_lua_block {

                                balancer.log()

                                monitor.call()

                                plugins.run()
                        }

                        port_in_redirect off;

                        set $proxy_upstream_name    "project-demo-productpage-9080";
                        set $proxy_host             $proxy_upstream_name;

                        client_max_body_size                    1m;

                        proxy_set_header Host                   "productpage.project-demo.svc.cluster.local";

                        # Pass the extracted client certificate to the backend
  1. 检查下你的Pod资源使用情况:
]# kubectl -n kubesphere-controls-system top  po
NAME                                      CPU(cores)   MEMORY(bytes)
kubesphere-router-test-56bd997cbf-qt97n   23m          179Mi
  1. 检查node资源情况:
kubectl top nodes
  1. 部署应用示例对比下,有没有可能是应用本身反应的问题:

看了下nginx controller的日志,后端接口upstream response time时间正常,在6ms左右,看来是回包的时候被阻塞了,猜测是istio sidecar导致的,返回时走iptables,导致回包慢了?

你把这个去掉,就可以不走istio-proxy,你再测下

关掉应用治理以后,我没办法进行灰度发布,这个比较尴尬

这个不是关掉应用治理,这个关掉,你仍然可以使用灰度发布,这个是Tracing的功能。

    zackzhang 我是3.0版本,之前没有这个问题,这个问题是两天前突然出现的

    zackzhang 刚才看了下,nginx处理的很快,回包太慢,应该是回包的时候走的本机路由,我排查下iptables看看

    通过抓包宿主机上的calico网络接口,发现收包回包正常,应该是envoy转发包的时候出了点问题

    7 天 后

    经过排查,发现是跨网段路由转发时,偶发性的丢包问题导致的,看来还是方向错了

      3 年 后