獨家 K8S漏洞報告 近期bug fix解讀

2022-07-17 08:15:11 字數 2302 閱讀 1926

安全漏洞cve-2019-1002100

3月2日,kubernetes社群公布了乙個中等程度的安全漏洞cve-2019-1002100。

該漏洞最早由carl henrik lunde發現,並於2月25日在kubernetes發布issue(#74534)。根據描述,具有patch許可權的使用者可以通過傳送乙個精心構造的patch請求來消耗apiserver的資源,最終會導致apiserver無法響應其他請求。

kubernetes宣布這是乙個中等嚴重程度的漏洞,並且很快發布了修復的版本,包括v1.11.8、v1.12.6、v1.13.4,大家可以公升級到對應的版本以修復此漏洞。

當然,如果不想公升級kubernetes版本的話,也可以規避掉這個問題。只給可信任的使用者發放patch許可權就行了。

scheduler相關bug fix分析

隨著kubernetes的成熟,集群規模也越來越大,而在大規模集群中,scheduler似乎越來越成為整個集群的瓶頸。近期的bug fix都有不少是scheduler相關的問題。下面就根據這段時間scheduler相關的bug fix,分析大規模集群中排程器可能出問題的地方。

#72754 修復

unscheduleable pod過多可能的排程問題

該問題的背景是#71486這個issue。加入大規模集群存在很多暫時不能排程的pod,當有事件更新時,scheduler會將這些pod放到active佇列重新進行排程,而新加入的pod也會進入這個佇列。這就會導致這個佇列過大,這個佇列本身是按照pod優先順序排列,這樣新加入的pod可能會排到同優先順序的其他不可排程的pod之後。

由於經常會有事件觸發unscheduleable的pod重新排程,這就可能會導致有些pod一直排不到。

針對這個問題的修復方式就是修改優先順序佇列的排序邏輯,這個過程也經過了兩輪優化,最終版本是:

預設按照pod優先順序排序

pod優先順序相同的話使用pod的podtimestamp排序,時間越早,優先順序越高。

而podtimestamp根據pod生命週期的不同會選擇不同的時間標籤:

#73296 防止pod排程到not ready的節點

該問題由issue#72129提出,因為scheduler排程時不再關心node狀態(只根據node上的taint排程),而新建立的node雖然狀態為not ready,但是沒有被打上notready的taint,scheduler可能在節點ready之前就把pod排程到not ready的節點上,這顯然不是我們期望的行為。

該bug fix對這個問題的解決方法是,新增乙個名為nodetaint的admission controller,這樣在節點建立時就會給節點新增乙個taint,從而無差別的給新建立的node新增notready的taint。

#73454 新增協程定時

將不可排程的pod移動到active佇列

scheduler之前的邏輯,是通過事件觸發不可排程的pod移動到active佇列重新排程。

這個邏輯在大部分場景下沒什麼問題,但是在大規模集群中,有可能出現有新的事件觸發,但是scheduler沒有及時同步這個事件,pod根據之前的資訊放入不可排程的佇列。而這時候事件已經發生過了,不會觸發它重新排程。

這就有一定的概率導致pod可以被排程,但是放到了不可排程佇列,又在很長一段事件不會重試。

本bug fix是通過新增乙個協程,以1min為間隔,將不可排程佇列中的pod放到active佇列重新排程。

kubernetes 1.13.2-1.13.4 

bug fix資料分析

本週更新1/11-3/4期間的相關bug fix資料,正好是1.13.2-1.13.4兩個版本間的資料。

總體來說,這兩個版本更新的內容並不多,總共也才36條bug fix,去第三方雲提供商相關的、test相關的,則只有20+條。其中比較嚴重的bug就更稀缺了。可見kubernetes核心元件已經愈趨穩定。

另外前幾天社群公布了乙個不大不小的漏洞,具體上文已經分析過了。大家可以根據自己的情況決定是否公升級到最新版本。

#72754   #73296   #73454   #73562   #73909   #74102

最後,關於具體資料,還是檢視圖表吧:

近期bug fix資料分析:

K8S漏洞報告主要bugfix彙總

k8s近期漏洞詳解 kubernetes儀錶盤漏洞 cve 2018 18264 因為這一漏洞,使用者可以 跳過 登入過程獲得儀錶盤所使用的自定義tls證書。如果您已將kubernetes儀錶盤配置為需要登入並將其配置為使用自定義tls證書,那麼這一漏洞會影響到您。具體來說,該漏洞的運作原理是 首先...

K8s部署prometheus監控K8s細節

prometheus 一些配置檔案可以再github上找到。部署 root kube prometheus manifests 目錄下所有檔案 部署 root kube prometheus manifests setup 目錄下所有檔案 要注意的是自己要建立乙個工作空間 如果報錯執行下面語句 部署...

k8s 多租戶 k8s 基礎介紹

備註 1 每乙個pod裡執行著乙個特殊的容器 pause容器,其他容器都是業務容器,這些業務容器共享pause容器的網路棧和volume 邏輯卷 掛載卷。因此他們之間的通訊和資料交換更為高效。2 k8s設計了pod物件,將每個服務程序包裝到相應的pod中,使其成為pod中執行的乙個容器 contai...