天天看點

ingress nginx遇到502錯誤,connect() failed (113 Host is unreachable) while connecting to upstream

1.背景

  之前碰到過​​ingress nginx遇到502錯誤,(113 No route to host) while connecting to upstream​​的問題,于是按照以上方式将ingress更新至1.30。

  但是今天發現,釋出容器後,老的報錯沒有碰上,這裡出現一個相同的代碼,但是不一樣的報錯提示。

  出現的場景是,因為業務需要測試更改時間,時間更改後在使用ntp同步回去,pod就無法通路,出現connect() failed (113 Host is unreachable) while connecting to upstream報錯。

  更新至1.30之後。無法通路的情況還存在,隻是nignx的報錯日志内容有點小改變,但是網頁的報錯還是相同。

ingress nginx遇到502錯誤,connect() failed (113 Host is unreachable) while connecting to upstream

2.原因

  以下描述一下整個排錯的過程。

  1.這裡首先檢視最後端pod的IP為以下:172.16.0.98

ingress nginx遇到502錯誤,connect() failed (113 Host is unreachable) while connecting to upstream

  然後使用浏覽器通路網址,結果為502

  

ingress nginx遇到502錯誤,connect() failed (113 Host is unreachable) while connecting to upstream

  2.檢視ingress日志的,發現ingress-nginx upstreamhost的IP為172.16.0.90,此IP為更新之前的pod IP。

ingress nginx遇到502錯誤,connect() failed (113 Host is unreachable) while connecting to upstream

  3.檢視ingress-nginx的連接配接,發現也是向老的pod發起的請求。該pod都已經不存在了。

ingress nginx遇到502錯誤,connect() failed (113 Host is unreachable) while connecting to upstream

  到這裡,問題定位到了,還是之前的bug,在更改pod時間後,然後将時間還原,然後釋出版本後,老的pod消失,新的pod出現,ingress還是會将請求轉發至老的pod,導緻出現以上錯誤,網頁傳回502.

4.解決方式(臨時)

  上一篇案例中與騰訊雲聯調懷疑是ingress儲存了已經不存在的pod連接配接,将請求轉發到已經删除掉的pod上去,是以這次直接删除ingress然後自動拉起一個問題臨時得到解決。

  至于最終解決辦法,還是沒有改變。在删除ingress控制器之後,ingress-nginx控制器的日志正常。

ingress nginx遇到502錯誤,connect() failed (113 Host is unreachable) while connecting to upstream
ingress nginx遇到502錯誤,connect() failed (113 Host is unreachable) while connecting to upstream

  

後記:想過嘗試重置pod的網卡或者清空TCP緩存,但是由于是pod,無法做到這些操作,至于最終解決方案,目前正在調研中。

作者:​​小家電維修​​

轉世燕還故榻,為你銜來二月的花。

繼續閱讀