一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - 服務器知識 - 線上 K8s Ingress 訪問故障排查思路(看這一篇就夠了)

線上 K8s Ingress 訪問故障排查思路(看這一篇就夠了)

2022-02-25 21:34高效運維 服務器知識

本文主要為大家介紹線上 K8s Ingress 訪問故障排查思路,有需要的朋友可以參考下

具體現象

應用遷移至我們的 PaaS 平臺后會出現偶發性的502問題,錯誤見圖片:

線上 K8s Ingress 訪問故障排查思路(看這一篇就夠了)

相比于程序的請求量,錯誤肯定是比較少的,但是錯誤一直在發生,會影響調用方的代碼,需要檢查下問題原因。

為啥只看到了POST請求

讀者肯定會說, 你們 ELK 過濾字段里面寫的是POST,所以肯定只有POST請求,其實不是這樣的,GET請求也會有502,只是Nginx會對GET請求進行重試,產生類似如下的日志:

線上 K8s Ingress 訪問故障排查思路(看這一篇就夠了)

重試機制是Nginx默認的: proxy_next_upstreamhttp://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next_upstream

因為GET方法會被認為是冪等的, 所以當一個upstream出現502的時候, nginx會再次嘗試. 對于我們的問題, 主要想確認為什么有502, 只看POST請求就足夠了, 兩者的原因應該是一致的。

網絡拓撲結構

網絡請求流入集群時, 對于我們集群的結構:

線上 K8s Ingress 訪問故障排查思路(看這一篇就夠了)

用戶請求=>Nginx=>Ingress =>uwsgi 

不要問為什么有了 Ingress 還有 Nginx。這是歷史原因,有些工作暫時需要由 Nginx 承擔。

統計排查

基于我們對于Nginx和Ingress的錯誤請求統計,發現兩者中的502錯誤是想等的,說明問題一定是出現在Ingress<=>uwsgi之中。

抓包

這個并不是最先想到的方案,因為我們用了很多統計方法也沒總結出來規律,最后只能寄希望于抓包了…該請求日志如下:

線上 K8s Ingress 訪問故障排查思路(看這一篇就夠了)

抓包結果如下:

線上 K8s Ingress 訪問故障排查思路(看這一篇就夠了)

從抓包情況來看,當前的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錯誤。

線上 K8s Ingress 訪問故障排查思路(看這一篇就夠了)

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上的錯誤, 對于多個中轉的請求, 這樣的排查能比較快的確定鏈路的錯誤位置。

原文地址:https://mp.weixin.qq.com/s?__biz=MzA4Nzg5Nzc5OA==&mid=2651709948&idx=1&sn=763290e0a9b200590ccb027365cf8581&chksm=8bcb2255bcbcab43ac47848f87c7e729ad3f2f581dedde28e525f6844e581bf55c0c2a401591&mpshare=1&scene=1&srcid=0225zNlPJ2YjqAMcG0IadRAO&sharer_sharetime=1645757468303&sharer_shareid=5761a132c631c04ee637ab2d8bf8bed3&exportkey=A9Nx9FH6C1e2Nb6qt2kLdsk%3D&acctmode=0&pass_ticket=wbfVZP4iDrbYpkPrZ%2BBcfb9twJEGRi%2BDVaJbK6x8bijIFM1hebDvyG0wxbhV18Jt&wx_header=0#rd

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 高清一级做a爱免费视 | 金莲一级淫片aaaaaa | 小小水蜜桃视频高清在线播放 | 久久大胆视频 | 色吧欧美 | 色综合天天综合中文网 | 羞羞影院午夜男女爽爽影院网站 | 国产综合成人亚洲区 | 国产九九视频在线观看 | 亚州vs欧州vs日 | 免费看www | 青青青国产精品国产精品久久久久 | 成人一区二区丝袜美腿 | 日本不卡视频免费的 | 黄动漫车车好快的车车双女主 | 高清色黄毛片一级毛片 | 亚洲精品视频免费在线观看 | 水多多www视频在线观看高清 | 欧美成人aaaa免费高清 | 日韩理论片在线看免费观看 | 免费被靠视频动漫 | 亚洲 制服 欧美 中文字幕 | 99热资源 | 久久久久久久99精品免费观看 | 国产成+人+亚洲+欧美综合 | 国产ay | 午夜伦伦电影理论片大片 | 日韩人成| 6080伦理久久精品亚洲 | 国产在线步兵一区二区三区 | 国产精品视频第一页 | 欧美黑人换爱交换乱理伦片 | 欧美在线视频一区 | 男人j放进女人的p视频免费 | 99热最新在线观看 | 女黑人尺寸bbb | 欧美一区二区三区四区在线观看 | 欧美3d怪物交videos网站 | 亚洲精品一二三四区 | 免费观看欧美成人h | 538免费精品视频搬运工 |