本篇文章要來探討 Kubernetes/Docker 一些關於 connection timeout 的事情,文章非常長,這邊幫大家重點整理
1. 跟我之前分享的 DNS timeout 問題類似,都會踩到 Kernel 的 race condition,都是 __ip_conntrack_confirm 這個人丟掉大家封包的
2. 本文著重於怎麼發現這個問題,如何減緩這個問題。對於喜歡研究細節的人值得一看。
3. 2017年底作者團隊開始將服務遷移到 Kubernetes (v1.8), Flannel(1.9.0),開始發現團隊中基於 Scala 的應用程式出現封包 timeout 的問題,這導致部分請求回應都延遲1-3秒
4. 決定認真調查網路問題,經由研究與錄製封包後發現 TCP 重送(SYN)的現象,該現象導致第一個封包會特別慢
5. 接下來要縮小範圍,使用環境中的一個VM作為基底,上面安裝 docker,開始觀察相關的網路流量與封包,發現可以重製這個行為,第一個封包從容器出去後,宿主機上面的真實網卡卻看不到,直到下次第二個封包就可以。藉由這個行為他們判斷,問題出在VM上,跟底層其餘硬體架構無關,藉此縮小問題範圍。
6. 介紹 iptalbes + SNAT + conntrack
7. 問題發生在 Kernel 裡面針對 SNAT 去選擇對外 source IP 時會出錯,因為(1)挑選一個適當的 source port, (2)將該紀錄寫到 conntrack 這兩個步驟中間會有落差,因此如果兩個封包同時進入(1),選到一樣的結果,後續要跑(2)就會有一個人寫不進去,導致封包被丟棄
8. 一種解決方法是告訴 kernel 請隨機幫我挑選對外的 source port, 這樣就算大家同時執行(1),有很大的機會會挑到不同的 source port,藉此減少衝突的機會。
9. iptables 執行 --masquerate 的時候可以下 --random-fully 這個參數
10. 團隊當時客製化 Flannel 來解決這個問題
註: 對 SNAT 有興趣瞭解的可以參考我之前撰寫的 SNAT Kernel 原始碼閱讀文章
https://www.hwchiu.com/iptables-masquerade.html
https://www.hwchiu.com/iptables-masquerade-handson.html
https://tech.xing.com/a-reason-for-unexplained-connection-timeouts-on-kubernetes-docker-abd041cf7e02
網卡 ip衝突 在 ip 與自己的無線網卡衝突??? - Mobile01 的推薦與評價
你是在有線網卡上設定固定IP?IP衝突不代表是你那台電腦上有無線網卡,而是同樣在使用同台AP的其他無線網卡導致的,而且既然已經有AP了,你設固定IP的 ... ... <看更多>
網卡 ip衝突 在 網路概論(二) - Jonny Huang 的學習筆記 的推薦與評價
從介面清單可以看到一個沒有MAC 位址的介面卡 Software Loopback Interface 1 ,其實它是一張軟體虛擬的迴環網路卡(Loopback Adaptor),對應的IP 位址 ... ... <看更多>
網卡 ip衝突 在 [問題]無線網卡與家用網路衝突- 看板MH 的推薦與評價
目前情況是這樣的
我用的網卡是久森GWUS300minis
可以連上x-link 也看得到隊友 可是很快就斷線
我發現只要無線網路一與psp連線 家裡用的寬頻就會斷線(有開網路共用的情況下)
網際網路閘道的圖示會立刻消失不見
只要沒開網路共用 家中網路就可正常使用 但是就看不到隊友
目前租的房子 房東是用那種ip分享器給整棟使用的 所以平常的設定是自動抓取ip
是不是因為開啟了網路共用緣故 所以使寬頻沒辦法正常使用?
因為看網路的教學是久森網卡要設定ip為192.168.0.1
會不會與家中的ip相衝?
請問有什麼解決的辦法嗎?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.169.41.135
... <看更多>