或許不少人可能認爲資源消耗並不是安全問題,但實際上不合理的資源消耗會讓黑客有可乘之機,來攻擊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的文檔,當容器指定了限制時,能夠按指定的方式處理節點上的資源爭用。blog
默認狀況下,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集羣免受外部黑客威脅、內部隱患甚至noisy neighbor。