kubernetes 中 label的作用_Kubernetes生产环境的16条建议
Kubernetes是用于構建高度可擴展系統的強大工具。結果,許多公司已經開始或正在計劃使用它來協調生產服務。不幸的是,像大多數強大的技術一樣,Kubernetes也很復雜。我們整理了以下清單,以幫助你生產環境最佳實踐Kubernetes。
容器最佳實踐
Kubernetes提供了一種編排容器化服務的方法,因此,如果您沒有按順序實踐你的容器,那么集群一開始就不會處于良好狀態。請按照以下提示開始。
1、使用精簡基礎鏡像
what:容器是內置在系統鏡像中的應用程序堆棧。從業務邏輯到內核的所有內容都打包在一起。最小的鏡像會占用盡可能多的OS,并迫使您顯式添加所需的任何組件。
why:僅在您的容器中包括要使用的軟件,同時具有性能和安全性方面的好處。磁盤上的字節數更少,復制鏡像的網絡流量更少,并且潛在的攻擊者無法訪問的工具也更少。
how:Alpine Linux是一個流行的選擇,并具有廣泛的支持。
2、使用提供最佳正常運行時間的注冊表
what:注冊表是鏡像的存儲庫,使這些鏡像可供下載和啟動。在指定部署配置時,您需要指定從何處獲取路徑為 / :的鏡像:
why:您的集群需要鏡像去運行。
how:大多數云提供商都提供私有鏡像注冊表服務:Google提供Google容器注冊表,AWS提供Amazon ECR,Microsoft提供Azure容器注冊表。
仔細調研,并選擇提供最佳正常運行時間的私人注冊表。由于您的群集將依靠您的注冊表來啟動軟件的較新版本,因此任何停機時間都將阻止對正在運行的服務進行更新。
3、使用ImagePullSecrets對您的注冊表進行身份驗證
what:ImagePullSecrets是Kubernetes對象,可讓您的群集通過注冊表進行身份驗證,因此注冊表可以選擇誰可以下載鏡像。
why:如果您的注冊表足夠公開,可以讓集群從中提取鏡像,則表明注冊表足夠公開,需要身份驗證。
how:Kubernetes網站在配置ImagePullSecrets方面有很好的演練,該示例使用Docker作為示例注冊表。
管理你的集群
微服務本質上是一團糟。使用微服務的許多好處來自在服務級別上強制職責分離,有效地為后端的各個組件創建了抽象。一些很好的例子是運行與業務邏輯分離的數據庫,運行軟件的單獨開發和生產版本,或分離出水平可伸縮的流程。
具有不同服務執行不同職責的陰暗面是,它們不能被平等對待。值得慶幸的是,Kubernetes為您提供了許多解決此問題的工具。
4、使用命名空間隔離環境
what:命名空間是Kubernetes中最基本,最強大的分組機制。它們幾乎像虛擬集群一樣工作。默認情況下,Kubernetes中的大多數對象僅限于一次影響單個名稱空間。
why:大多數對象都是在命名空間范圍內定義的,因此您必須使用命名空間。鑒于它們提供了強大的隔離性,因此它們非常適合隔離具有不同目的的環境,例如用戶服務的生產環境和嚴格用于測試的環境,或者分離支持單個應用程序的不同服務堆棧,例如保持安全解決方案的工作負載與您自己的應用程序分開。一個好的經驗法則是按資源分配劃分名稱空間:如果兩組微服務將需要不同的資源池,請將它們放在單獨的名稱空間中。
how:它是大多數對象類型的元數據的一部分:
請注意,您應該始終創建自己的名稱空間,而不要依賴“默認”名稱空間。Kubernetes的默認設置通常會為開發人員優化以最小的摩擦,這通常意味著甚至放棄最基本的安全措施。
5、通過Labels 管理您的集群
what:Labels是組織集群的最基本且可擴展的方法。它們允許您創建用于分隔Kubernetes對象的任意key:value對。例如,您可以創建一個標簽密鑰,將處理敏感信息的服務與不處理敏感信息的服務區分開。
why:如前所述,Kubernetes使用標簽進行組織,但更具體地說,它們用于選擇。這意味著,當您想給Kubernetes對象引用某個命名空間中的一組對象時(例如告訴網絡策略允許哪些服務相互通信),請使用它們的標簽。由于它們代表了這種開放式組織類型,因此請盡最大努力使事情簡單化,并且僅在需要選擇權的地方創建標簽。
how:標簽是一個簡單的規范字段,您可以將其添加到YAML文件中:
6、使用注釋來跟蹤重要的系統更改等
what:注釋是可以附加到pod的任意鍵值元數據,就像標簽一樣。但是,Kubernetes不會讀取或處理批注,因此圍繞您可以和不能使用批注進行注釋的規則相當寬松,并且不能用于選擇。
why:它們可幫助您跟蹤容器化應用程序的某些重要功能,例如版本號或首次啟動的日期和時間。僅在Kubernetes的上下文中,注釋是一種無能為力的構造,但是當用于跟蹤重要的系統更改時,注釋可以成為開發人員和運營團隊的資產。
how:注釋是類似于標簽的規格字段。
讓你的集群更加安全
好了,您已經建立了集群并按所需方式組織了-現在呢?好吧,接下來是要確保一些安全。您可能會花費一生的時間來學習,但仍未發現有人可以侵入您系統的所有方式。博客文章的內容空間要比一生少得多,因此您必須滿足一些強烈的建議。
7、使用RBAC實施訪問控制
what:RBAC(基于角色的訪問控制)使您可以控制誰可以查看或修改群集的不同方面。
why:如果要遵循最小特權原則,則需要設置RBAC來限制群集用戶和部署能夠執行的操作。
how:如果要設置自己的集群(即不使用托管的Kube服務),請確保使用''--authorization-mode = Node,RBAC“啟動您的kube apiserver。如果使用托管的Kubernetes例如,您可以通過查詢用于啟動kube apiserver的命令來檢查它是否設置為使用RBAC。唯一通用的檢查方法是在kubectl cluster-info dump的輸出中查找“ --authorization-mode ...”。
RBAC打開后,您需要更改默認權限以適合您的需求。Kubernetes項目站點在此處提供了有關設置角色和RoleBindings的演練。托管的Kubernetes服務需要啟用RBAC的自定義步驟-請參閱Google的GKE指南或Amazon的AKS指南。
8、使用Pod安全策略防止危險行為
what:Pod安全策略是一種資源,非常類似于Deployment或Role,可以通過kubectl以相同的方式創建和更新。每個都有一個標志集合,可用來防止集群中特定的不安全行為。
why:如果創建Kubernetes的人認為限制這些行為足夠重要,可以創建一個特殊的對象來處理它,那么它們很重要。
how:讓他們工作可能會令人沮喪。我建議啟動并運行RBAC,然后在此處查看Kubernetes項目的指南。在我看來,最重要的使用是防止特權容器和對主機文件系統的寫訪問,因為它們代表了容器抽象中一些較泄漏的部分。
9、使用網絡策略實施網絡控制/防火墻
what:網絡策略是允許您明確聲明允許哪些流量的對象,而Kubernetes將阻止所有其他不符合標準的流量。
why:限制群集中的網絡流量是一項基本且重要的安全措施。默認情況下,Kubernetes啟用所有服務之間的開放式通信。保留此“默認開放”配置意味著與Internet連接的服務與存儲敏感信息的數據庫僅一步之遙。
how:有一篇文章寫的很好,具體詳情查看這里。
10、使用Secrets來存儲和管理必要的敏感信息
what:Secrets是您如何在Kubernetes中存儲敏感數據,包括密碼,證書和令牌。
why:無論您是實施TLS還是限制訪問,您的服務都可能需要相互認證,與其他第三方服務或您的用戶進行認證。
how:Kubernetes項目在此處提供了指南。一個關鍵建議:避免將機密作為環境變量加載,因為在您的環境中擁有機密數據通常是不安全的。相反,將機密裝入容器中的只讀卷中-您可以在本 Use Secrets中找到一個示例。
11、使用鏡像掃描識別和修復鏡像漏洞
what:掃描儀檢查鏡像中安裝的組件。從操作系統到應用程序堆棧的所有內容。掃描程序對于找出鏡像所包含的軟件版本中存在哪些漏洞非常有用。
why:漏洞一直在流行的開源軟件包中發現。一些著名的例子是Heartbleed和Shellshock。您將想知道這些漏洞在系統中的什么位置,以便您知道哪些鏡像可能需要更新。
how:掃描儀是基礎設施中相當常見的部分-大多數云提供商都提供了產品。如果您想自己托管一些東西,那么開源Clair項目是一個受歡迎的選擇。
保持集群穩定
Kubernetes代表很高的技術棧。您擁有在嵌入式內核上運行的應用程序,在VM中運行的應用程序(在某些情況下甚至在裸機上),以及Kubernetes自己的服務共享硬件??紤]到所有這些因素,在物理和虛擬領域中很多事情都會出錯,因此盡可能降低開發周期的風險非常重要。Kubernetes周圍的生態系統已經開發了一系列最佳實踐,以使事情盡可能保持一致。
12、遵循CI / CD方法
what:持續集成/持續部署是一種過程哲學。相信對代碼庫進行的每次修改都應增加增量值,并準備投入生產。因此,如果代碼庫中的某些內容發生了更改,則可能要啟動服務的新版本,以運行測試。
why:遵循CI / CD可以幫助您的工程團隊在日常工作中牢記質量。如果出現問題,修復問題將成為整個團隊的當務之急,因為此后依賴于已分解的提交的所有更改也將被分解。
how:由于云部署軟件的興起,CI / CD越來越流行。因此,您可以從托管或自托管的眾多出色產品中進行選擇。如果您的團隊比較小,我建議您采用托管路線,因為節省的時間和精力絕對值得您付出額外的費用。
13、使用Canary方法進行更新
what:Canary是一種將服務更改從代碼庫中的提交帶給用戶的方法。您啟動了一個運行最新版本的新實例,然后將用戶緩慢遷移到新實例,從而逐漸獲得了對更新的信心,而不是一次全部交換。
why:無論您的單元測試和集成測試有多廣泛,它們都無法完全模擬生產中的運行-總是有可能某些功能無法按預期運行。使用金絲雀可以限制用戶接觸這些問題。
how:Kubernetes的可擴展性提供了許多途徑來逐步推出服務更新。最直接的方法是創建一個單獨的部署,與當前正在運行的實例共享一個負載平衡器。這個想法是您擴展新的部署,同時縮減舊的部署,直到所有正在運行的實例都是新版本。
14、實施監控并將其與SIEM集成
what:監視意味著跟蹤和記錄您的服務正在做什么。
why:讓我們面對現實吧-不管您的開發人員多么出色,無論您的安全專家如何努力地發揮他們的聰明才智,事情都會出錯。當他們這樣做時,您將想知道發生了什么,以確保您不會兩次犯相同的錯誤。
how:成功監視服務有兩個步驟-需要對代碼進行檢測,并且需要將該檢測的輸出饋送到某個地方以進行存儲,檢索和分析。執行檢測的方式在很大程度上取決于您的工具鏈,但是快速的網絡搜索應該可以讓您有所作為。就存儲輸出而言,除非您有專門知識或需求,否則我建議使用托管SIEM(例如Splunk或Sumo Logic)-根據我的經驗,DIY始終是與任何存儲相關的期望時間和精力的10倍。
深度建議
一旦集群達到一定規模后,您將發現手動執行所有最佳做法將變得不再可行,結果將給系統的安全性和穩定性帶來挑戰。超過此閾值后,請考慮以下主題:
15、使用服務網格管理服務間通信
what:服務網格是管理服務間通信的一種方法,可以有效地創建在實施服務時使用的虛擬網絡。
why:使用服務網格可以減輕管理群集的一些較繁瑣的方面,例如確保對通信進行正確的加密。
how:根據您對服務網格的選擇,啟動和運行的復雜性可能千差萬別。作為最常用的服務網格,Istio似乎正在蓬勃發展,并且您的配置過程將在很大程度上取決于您的工作負載。
一個警告:如果您需要采用一個服務網格,請盡早采用它而不是稍后采用它-逐漸改變集群中的通信樣式可能會非常痛苦。
16、使用準入控制器解鎖Kubernetes中的高級功能
what:準入控制器是一種很好的萬能工具,可用于管理集群中發生的一切。它們允許您設置Kubernetes在啟動時將參考的Webhook。它們有兩種形式:變異和驗證。突變準入控制器會在部署啟動之前更改其配置。驗證準入控制器會與您的webhook一致,以允許啟動給定的部署。
why:它們的用例廣泛且數量眾多–它們提供了一種通過自行開發的邏輯和限制來迭代地提高集群穩定性的好方法。
how:查看有關如何開始使用Admission Controllers的指南。
之前,給大家發過三份Java面試寶典,這次新增了一份,目前總共是四份面試寶典,相信在跳槽前一個月按照面試寶典準備準備,基本沒大問題。
《java面試寶典5.0》(初中級)
《350道Java面試題:整理自100+公司》(中高級)
《資深java面試寶典-視頻版》(資深)
《Java[BAT]面試必備》(資深)
分別適用于初中級,中高級,資深級工程師的面試復習。
內容包含java基礎、javaweb、mysql性能優化、JVM、鎖、百萬并發、消息隊列,高性能緩存、反射、Spring全家桶原理、微服務、Zookeeper、數據結構、限流熔斷降級等等。
獲取方式:點“在看”,V信關注上述單號并回復?【面試】即可領取,更多精彩陸續奉上。
看到這里,證明有所收獲
必須點個在看支持呀,喵
總結
以上是生活随笔為你收集整理的kubernetes 中 label的作用_Kubernetes生产环境的16条建议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win10界面如何恢复桌面
- 下一篇: 从事IT行业需要的职业技能有哪些