1. 程式人生 > >Kubernetes安全三步談:如何監控與控制Kubernetes中的資源消耗問題

Kubernetes安全三步談:如何監控與控制Kubernetes中的資源消耗問題

或許很多人可能認為資源消耗並非安全問題,但實際上不合理的資源消耗會讓黑客有可乘之機,來攻擊K8s的元件。本文將介紹如何處理資源消耗或noisy neighbor問題,包括如何管理Pods中的資源以及管理專案和資源配額等。


本文是關於Kubernetes安全系列三篇文章中的最後一篇。在第一篇文章中,我們分享瞭如何確保企業的Kubernetes叢集免受外部攻擊;第二篇文章介紹了三種保護Kubernetes免受內部威脅的方法。在本文中,我們將介紹如何處理資源消耗或noisy neighbor問題。

對於那些設定了多租戶Kubernetes叢集的叢集管理員而言,他們十分關注和擔心的一個問題是,如何防止共同租戶成為“noisy neighbor”,即一個壟斷了CPU、記憶體、儲存和其他資源的人。Noisy neighbor會對共享基礎設施的其他使用者資源的效能產生極壞的影響。

如此一來,跟蹤Kubernetes容器和Pod的資源使用情況,對叢集管理而言非常重要,因為它不僅可以保持容器編排系統處於最佳執行狀態,降低運維成本,還可以加強Kubernetes的整體安全狀況。

一些運維團隊可能不認為資源消耗是一種重要的安全問題,至少沒有保護Kubernetes免受內部和外部網路攻擊重要。但這種觀點是不正確的。因為厲害的黑客會利用功能不良的基礎設施,來找到攻擊Kubernetes元件的方法。

“安全不僅僅是‘不要闖進我的房子’,而是‘我怎麼能讓我的房子一直保持良好的執行狀態’,”Rancher Labs的高階解決方案架構師Adrian Goins表示。

運維團隊需要最大限度地利用Kubernetes Pods(一組具有共享儲存和網路資源的一個或多個容器)所消耗的資源,以確保每個使用者都能擁有最佳效能,並且能監控成本分配的使用情況。“使用等於成本,”Goins說,“因為Kubernetes資源都是執行在AWS、谷歌雲、阿里雲等等雲提供商的底層計算基礎設施上,一切資源消耗都以為著金錢成本。即使叢集是在資料中心的裸機上執行,過多的使用也會花費硬體、電力和其他資源。”

預設情況下,配置容器時,對其可以使用的資源量沒有任何限制。如果容器不能高效執行,部署容器的組織必將支付超額費用。值得慶幸的是,Kubernetes具有幫助運維團隊管理和優化Kubernetes資源利用能力的功能。

管理Pods中的資源

當管理員定義Pod時,他們可以選擇指定每個容器需要多少CPU和記憶體(RAM)。當容器指定了資源請求時,排程程式可以更好地決定將Pod放在哪個節點上。根據Kubernetes的文件,當容器指定了限制時,可以按指定的方式處理節點上的資源爭用。

預設情況下,Kubernetes叢集中的所有資源都是在預設的名稱空間中建立的。名稱空間是一種邏輯地將叢集資源進行分組的方法,包括用於指定資源配額的選項。

管理員可以在名稱空間上設定資源限制或配額,為在名稱空間中執行的工作負載或應用程式分配一定量的CPU、RAM或儲存——Kubernetes叢集中的三個資源。“如果在名稱空間中啟動另一個資源會超出預設的配額,那麼任何新資源都無法啟動,”Goins指出。

“當你應用了資源配額時,意味著你強制在該名稱空間中執行的所有內容為其自身設定資源限制。限制有兩種型別:預留,和最大限制,”Goins解釋說。例如,通過預留,管理員可以讓Kubernetes叢集為WordPress站點分配128 MB的RAM。對於部署的每個WordPress Pod,伺服器本身將保證128 MB的RAM。因此,如果管理員將資源請求與1GB的資源配額相結合,則使用者只能在超過其限制之前執行八個WordPress Pod。在那之後,他們將無法再使用RAM了。

資源限制的第二部分是最大限度。管理員可以預留128 MB的資源請求和最多256 MB的RAM。“如果Pod超過256 MB的RAM使用量,Kubernetes會殺死它並重新啟動它,”Goins說。“如此以來,使用者可以免受失控過程和noisy neighbor的影響。”

專案和資源配額

像Rancher這樣的平臺,旨在通過提供直觀的介面和集中管理任務(如全域性層的角色描述)來簡化Kubernetes的管理。

正如前一篇關於內部威脅防護的文章所述,Rancher包含一個有助於減輕叢集管理負擔的“專案(Project)”資源,來超越名稱空間。在Rancher中,Project允許管理員將多個名稱空間作為單個實體進行管理。因此,Rancher可以將資源配額應用於Projects。

在標準Kubernetes部署中,資源配額只能應用於單獨的名稱空間。但是,管理員無法通過單次操作,同時將配額應用於名稱空間。資源配額必須經過多次操作。

然而在Rancher中,管理員可以將資源配額應用於Project,然後將配額傳播到每個名稱空間。然後,Kubernetes會使用本機版本的資源配額,來強制執行管理員限制。如果管理員希望更改特定名稱空間的配額,則可以覆蓋以前的配額。

強化和優化Kubernetes

毋庸置疑,Kubernetes已成為容器編排的標準,這也促使大多數雲和虛擬化供應商將其作為標準基礎架構來提供。但是,對與Kubernetes環境相關的安全問題的普遍缺乏認識,可能會使各種元件暴露於來自網路叢集內外的攻擊中。

本系列文章的上兩篇中提供了一些可行的步驟,來告訴大家如何通過使用Kubernetes功能和容器管理解決方案(如Rancher),來加強Kubernetes對外部和內部網路威脅的防範。企業應通過基於角色的訪問控制(RBAC)和強身份驗證從外部保護Kubernetes API訪問。對於內部人員保護,由於Kubernetes叢集是多使用者,因此組織需要通過RBAC、邏輯隔離和NetworkPolicies來保護交叉通訊。

為了防止其他租戶壟斷CPU、記憶體、儲存和其他資源從而拖累整個叢集的效能,Kubernetes提供資源限制和配額等功能,以幫助運維團隊管理和優化Kubernetes資源利用功能。最後,除了可用的預設設定之外,業界還有一些非常有效的工具可以幫助使用者完成Kubernetes叢集的管理和保護。例如像Rancher這樣的平臺就是一種高度優化的容器管理解決方案,專為將多個叢集部署到生產環境中的組織而構建,企業使用者可以更輕鬆地管理和執行各地的Kubernetes。它可以保護Kubernetes叢集免受外部黑客威脅、內部隱患