最近跟大家分享一個 2020 年初左右的問題,這個問題的徵狀使用者透過 service 去存取相關服務時,會一直遲遲連接不上,直到 63 秒後服務才會通。
這個問題有兩種類型,一個是 63 秒後服務會通,一個則是 1 秒後會通,兩個背後的原因都一樣,這邊就來稍微簡介一下這個問題
# 發生條件
1. 使用 VXLAN 作為底層 Overlay Network,最常見的就是 Flannel 這套 CNI
2. Kubernetes 的版本不能太舊,至少要 1.16 以後,不過目前這個問題已經修復,所以現在要撞到除非特別指定版本
3. 使用的 Linux Kernel 版本也不能太新,目前該問題已經修復於大部分的 upstream
# 發生原因
1. VXLAN 本身是一個基於 UDP 的封裝協議,有一個已知的 bug 會使得其 checksum 發生錯誤,導致封包不會被遠端接收方給接收
2. kube-proxy 內關於 iptables 的設定沒有妥善,導致 VXLAN 封包會進行二次 SNAT
3. 第二次的 SNAT 就會觸發(1) 的 bug(當然還有其他條件,但是那些條件也剛好符合)
,最後導致封包的 checksum 不同,因此送到遠方就被拒絕
4. 底層的 TCP 建立連線時,會不停地嘗試,每次失敗都會等待更多時間,分別是1,2,4,8,16,32秒
5. 五次都失敗後, TCP 就會觸發重傳機制,下一次的重傳就不會進入到第二次的 SNAT,因此封包就不會踩到問題,因此通過
# 解決方法
1. 基本上這個問題要踩到要各方一起努力才會踩到,也因此修復方式也是多元化
2. Kernel 本身修復了關於 UDP 封裝的 Checksum 計算
3. Kubernetes 這邊則是針對 kube-proxy 進行強化,其使用的 iptables 規則會避免二次 SNAT 的情況
# 其他問題
1. 為什麼 TCP 重送後就不會踩到二次 SNAT? 這部分我看了相關的 issue 以及諸多文章都沒有看到解釋,都在探討 SNAT 後產生的 checksum,至於為什麼 TCP 重送後就通則是一個謎底
2. 為了解決這個謎體,我特別指定 kubernetes 版本並且重新編譯 Ubuntu 的 Linux Kernel 版本,盼望從 Kernel 中來觀察並且理解這個問題,目前已經有一些初步的進度。之後完成後會在撰寫文章跟大家分享這個問題
這個問題我認為非常有趣,也許自己的環境剛好沒有踩到,但是可以透過觀察不同的 issue 來研究各式各樣問題,也藉由這些過程來學習
相關 PR: https://github.com/kubernetes/kubernetes/pull/92035
「為什麼 ubuntu」的推薦目錄:
- 關於為什麼 ubuntu 在 矽谷牛的耕田筆記 Facebook 的最佳解答
- 關於為什麼 ubuntu 在 夏瑜塔羅 Facebook 的最佳貼文
- 關於為什麼 ubuntu 在 純靠北工程師 Facebook 的最佳解答
- 關於為什麼 ubuntu 在 [問卦] Ubuntu 為什麼不買下Linux Mint? - 看板Gossiping 的評價
- 關於為什麼 ubuntu 在 可以請問一下為什麼安裝完ubuntu要重新啟動時都會卡住(我 ... 的評價
- 關於為什麼 ubuntu 在 請問為什麼安裝好Ubuntu LTS 20.04之後會這樣呢? - Mobile01 的評價
- 關於為什麼 ubuntu 在 如何找到gnome-control-center 的PO檔- Ubuntu 問答集 的評價
- 關於為什麼 ubuntu 在 Facebook Messenger 於Ubuntu Linux 中文輸入會被清空問題 的評價
- 關於為什麼 ubuntu 在 [Ubuntu][Linux][教學] 安裝設定#02. [跨平台] 於 ... - YouTube 的評價
- 關於為什麼 ubuntu 在 Why is Git always asking for my password? - GitHub Docs 的評價
為什麼 ubuntu 在 夏瑜塔羅 Facebook 的最佳貼文
《The play book》
烏班圖是一種崇高的生活方式!
(祖魯語:Ubuntu,/uːˈbʊntuː/ oo-BUUN-too),又來自南部非洲班圖語,意思是「施人人道」、「樂於分享」、「仁」。
如果別人不會過得好,那我也不會過得好。
如果有人過得好,那我絕對也會過得很好!
當大家都在流行某一種語言、某一種生活方式或者有一種信仰,相對的被遺忘的記憶也就越來越多。我們不是要反向思考而是要學會如何在古老的文化當中找到自我的靈魂,靈魂永遠沒有結束的時候,但如果你照別人的方式去引導你自己,當這個人不在了那你也就迷失了。
所以要記取那些讓你尊敬的、那些讓你崇拜的人,他們的生活中旨是什麼...然後努力的傳承下去!
《the play book 》是今年Netfilx上的影集。每一個規則都很震撼人心,於是我常常反思為什麼人在工作的時候會突然之間沒有的動力可是那些足球員、運動員,這麼長的時間準備、只是為了「一場比賽」,有了這場還有下一場,那一種熱情到底從何而來?
於是乎我好像找到了一個非常實際的答案!去看這部影片吧。也或許找個時間應該好好的來分享這部影片的精髓。
為什麼 ubuntu 在 純靠北工程師 Facebook 的最佳解答
#純靠北工程師3u2
----------
今天同事問我為什麼 Windows 10 升到 2004 後 WSL2 GitLab 推不上去,除錯了半天發現要更新 intel Wi-fi 驅動= =|||
https://github.com/microsoft/WSL/issues/4253
https://stackoverflow.com/questions/56946336/ubuntu-wsl2-git-getting-the-remote-end-hung-up-unexpectedly-on-large-repos
----------
🗳️ [群眾審核] https://kaobei.engineer/cards/review
👉 [GitHub Repo] https://github.com/init-engineer/init.engineer
📢 [匿名發文] https://kaobei.engineer/cards/create
🥙 [全平台留言] https://kaobei.engineer/cards/show/4970
為什麼 ubuntu 在 可以請問一下為什麼安裝完ubuntu要重新啟動時都會卡住(我 ... 的推薦與評價
可以請問一下為什麼安裝完ubuntu要重新啟動時都會卡住(我本身有裝win10) ... 你有辦法拍照嗎如果有出現帶有Ubuntu logo 的關機畫面可以按Esc 讓它顯示關機時的訊息有 ... ... <看更多>
為什麼 ubuntu 在 請問為什麼安裝好Ubuntu LTS 20.04之後會這樣呢? - Mobile01 的推薦與評價
請問為什麼安裝好Ubuntu LTS 20.04之後會這樣呢? - ??...(Acer 第1頁) ... <看更多>
為什麼 ubuntu 在 [問卦] Ubuntu 為什麼不買下Linux Mint? - 看板Gossiping 的推薦與評價