您现在的位置是:亿华云 > IT科技类资讯
线上 K8s Ingress 访问故障排查思路,看这一篇就够了
亿华云2025-10-04 03:34:16【IT科技类资讯】5人已围观
简介具体现象应用迁移至我们的 PaaS 平台后会出现偶发性的502问题,错误见图片:相比于程序的请求量,错误肯定是比较少的,但是错误一直在发生,会影响调用方的代码,需要检查下问题原因。为啥只看到了POST
应用迁移至我们的线上 PaaS 平台后会出现偶发性的502问题,错误见图片:
相比于程序的问故请求量,错误肯定是障排比较少的,但是查思错误一直在发生,会影响调用方的篇够代码,需要检查下问题原因。线上
为啥只看到了POST请求读者肯定会说,问故 你们 ELK 过滤字段里面写的是POST,所以肯定只有POST请求,障排其实不是查思这样的,GET请求也会有502,篇够只是线上Nginx会对GET请求进行重试,产生类似如下的问故日志:
重试机制是Nginx默认的: proxy_next_upstreamhttp://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream
因为GET方法会被认为是幂等的, 所以当一个upstream出现502的时候, nginx会再次尝试. 对于我们的问题, 主要想确认为什么有502, 只看POST请求就足够了, 两者的原因应该是一致的源码下载。
网络拓扑结构网络请求流入集群时,障排 对于我们集群的结构:
用户请求=>Nginx=>Ingress =>uwsgi
不要问为什么有了 Ingress 还有 Nginx。这是查思历史原因,有些工作暂时需要由 Nginx 承担。篇够
统计排查基于我们对于Nginx和Ingress的错误请求统计,发现两者中的502错误是想等的,说明问题一定是出现在Ingress<=>uwsgi之中。
抓包这个并不是最先想到的方案,因为我们用了很多统计方法也没总结出来规律,最后只能寄希望于抓包了…该请求日志如下:
抓包结果如下:
从抓包情况来看,当前的tcp连接被复用了,由于Ingress中使用了HTTP1.1协议,会在一次tcp连接中尝试发送第二个HTTP请求,但是uwsgi没有支持http1.1,所以在第二个请求根本不会被处理,直接拒绝了。所以在Ingress看来,这个请求失败了, 因此返回了502. 由于GET请求会重试, 但POST请求无法重试, 所以访问统计中出现了POST请求502的问题。
Ingress配置学习Ingress中, 默认对upstream使用的http版本为1.1, 但是云服务器我们的uwsgi使用的是http-socket, 而非http11-socket, 我们Ingress中使用了与后端不同的协议, 出现了意料之外的502错误。
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#proxy-http-version
因为Nginx默认是1.0, 但是切换到Ingress中默认变成了1.1, 而我们没有统一, 解决方案是强制指定Ingress中使用的http协议版本。
{ % if keepalive_enable is sameas true %}
nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
{ % else %}
nginx.ingress.kubernetes.io/proxy-http-version: "1.0"
{ % endif %}
如果有大佬看到了,可以简单讲讲Ingress会在什么时候复用http1.1的连接,以及为什么Ingress不复用每一个连接,这样问题会尽快的暴露,这些问题我没有继续深究了。毕竟你换个语言比如Golang就没有这个问题了,这个是uwsgi专属错误。
总结有关这个502问题的排查, 我个人觉得, 最后抓包一次性解决问题其实没什么特别的, 抓了就能发现问题, 不抓就发现不了。
我是希望给大家一个启发, 对于一整条链路, 如何来排查故障: 我们这里既使用了Nginx, 又使用了Ingress, 在排查时, 需要首先检查两者的错误数量, 如果确认错误基本一致, 那就说明错误与Nginx没有关系, 需要检查Ingres上的错误, 对于多个中转的请求, 这样的排查能比较快的确定链路的错误位置。源码库
很赞哦!(6)
相关文章
- .net 适用于从事Internet相关的网络服务的机构或公司
- 10月份Github热门的JavaScript开源项目
- 聊聊 Python 办公自动化之一 Excel
- Java中return和finally到底哪个先执行
- 只要我们做的是从目前的市场情况选择域名,从简单易记,从个性特征上,我们就可以找到一个好域名进行注册。域名注册进行域名记录和解析以及绑定网站后,客户可以通过URL登录您的网站。
- 有了这12款Idea插件后,室友再也不叫我小白了
- 程序员必知的几种软件架构模式
- 哦!这该死的 C 语言
- 当投资者经过第二阶段的认真学习之后又充满了信心,认为自己可以在市场上叱咤风云地大干一场了。但没想到“看花容易绣花难”,由于对理论知识不会灵活运用.从而失去灵活应变的本能,就经常会出现小赢大亏的局面,结果往往仍以失败告终。这使投资者很是困惑和痛苦,不知该如何办,甚至开始怀疑这个市场是不是不适合自己。在这种情况下,有的人选择了放弃,但有的意志坚定者则决定做最后的尝试。
- 精通编程:自我挑战,解决一系列前端难题