隨著開(kāi)發(fā)人員和應(yīng)用程序團(tuán)隊(duì)選擇容器和Kubernetes作為構(gòu)建、部署、運(yùn)行和擴(kuò)展應(yīng)用程序的首選技術(shù),越來(lái)越多的數(shù)據(jù)應(yīng)用程序每天都會(huì)登陸Kubernetes。越來(lái)越多的獨(dú)立軟件供應(yīng)商(ISV)將其應(yīng)用程序打包成容器分發(fā)到Kubernetes上運(yùn)行,在所有垂直行業(yè)中大量使用這些應(yīng)用程序。許多這樣的應(yīng)用程序都是業(yè)務(wù)關(guān)鍵型的,其中斷可能會(huì)導(dǎo)致嚴(yán)重的收入、生產(chǎn)率和聲譽(yù)損失。
當(dāng)企業(yè)意識(shí)到保護(hù)其Kubernetes應(yīng)用程序的業(yè)務(wù)需求時(shí),他們轉(zhuǎn)而使用市場(chǎng)上可用的開(kāi)源或商業(yè)解決方案。保護(hù)Kubernetes應(yīng)用程序通常需要在發(fā)生災(zāi)難、網(wǎng)絡(luò)攻擊、惡意或意外用戶錯(cuò)誤后恢復(fù)應(yīng)用程序:
——在同一集群內(nèi)
——同一地區(qū)的不同集群
——區(qū)域/地理上的獨(dú)立集群
應(yīng)用這些解決方案來(lái)保護(hù)和移動(dòng)Kubernetes應(yīng)用程序通常不會(huì)一蹴而就。Kubernetes(使用自定義資源定義)的靈活性和可擴(kuò)展性使其在開(kāi)發(fā)人員中非常流行,這使得保護(hù)Kubernetes應(yīng)用程序變得更加困難,因?yàn)闆](méi)有標(biāo)準(zhǔn)的方法來(lái)確定災(zāi)難后需要備份什么才能成功恢復(fù)。
現(xiàn)實(shí)世界中的Kubernetes應(yīng)用程序是雪花
由于沒(méi)有一個(gè)定義應(yīng)用程序組成部分的標(biāo)準(zhǔn)Kubernetes規(guī)范,因此確定要備份和克隆哪些資源的問(wèn)題尤其具有挑戰(zhàn)性。因此,專注于Kubernetes應(yīng)用程序保護(hù)(提供備份/恢復(fù)和災(zāi)難恢復(fù)(DR))的解決方案會(huì)假設(shè)開(kāi)發(fā)人員將如何構(gòu)建其應(yīng)用程序,并盡最大努力找出實(shí)際應(yīng)用程序的組成部分,以及如何最好地保護(hù)它。
這種方法可以實(shí)現(xiàn)Kubernetes應(yīng)用程序發(fā)現(xiàn)過(guò)程的自動(dòng)化。在高度動(dòng)態(tài)的Kubernetes環(huán)境中,自動(dòng)化應(yīng)用程序發(fā)現(xiàn)過(guò)程是可取的。然而,自動(dòng)發(fā)現(xiàn)通常只適用于應(yīng)用程序簡(jiǎn)單且僅限于命名空間的一部分情況。如果應(yīng)用程序跨越多個(gè)命名空間,具有集群范圍的資源,和/或使用外部完全管理的數(shù)據(jù)庫(kù)、數(shù)據(jù)存儲(chǔ)或消息服務(wù),那么提供的過(guò)于簡(jiǎn)單的應(yīng)用程序發(fā)現(xiàn)和隨后的應(yīng)用程序保護(hù)功能不足以保護(hù)大多數(shù)Kubernetes工作負(fù)載。
Kubernetes應(yīng)用程序的構(gòu)成
大多數(shù)真實(shí)世界的Kubernetes應(yīng)用程序都不符合開(kāi)發(fā)人員開(kāi)發(fā)和部署Kubernetes應(yīng)用程序所遵循的標(biāo)準(zhǔn)配方。開(kāi)發(fā)人員如何定義Kubernetes應(yīng)用程序可以是以下內(nèi)容的組合(不是詳盡的列表):
App=1..1個(gè)命名空間中有N個(gè)資源
App=1..N個(gè)命名空間
App=1..N個(gè)命名空間+1..N個(gè)集群范圍的資源
App=1..N個(gè)資源位于1..N個(gè)命名空間+1..N個(gè)集群范圍的資源
App=1..N個(gè)資源位于1..N個(gè)命名空間+1..N個(gè)集群范圍的資源+外部資源(例如,公共云中的完全管理的數(shù)據(jù)庫(kù))
如上所述,使用命名空間作為應(yīng)用程序分隔符并不能涵蓋開(kāi)發(fā)人員定義其Kubernetes應(yīng)用程序的所有不同方式。自動(dòng)推斷構(gòu)成Kubernetes應(yīng)用程序的所有組件也可能導(dǎo)致識(shí)別Kubernetes應(yīng)用程序資源的失誤。
使用用戶輸入的自定義應(yīng)用程序定義
為了有效地備份和恢復(fù)應(yīng)用程序,用戶必須能夠指定Kubernetes應(yīng)用程序的組成部分,該應(yīng)用程序提供關(guān)鍵的“服務(wù)”,必須確保其業(yè)務(wù)連續(xù)性。理想情況下,應(yīng)該讓用戶有機(jī)會(huì)使用Kubernetes原生機(jī)制定義其應(yīng)用程序,或者允許用戶定義符合上面列舉的應(yīng)用程序定義模式的自定義應(yīng)用程序。
在某些情況下,同樣重要的是確定應(yīng)該從應(yīng)用程序定義中排除的資源,因?yàn)檫@些資源在目標(biāo)/目標(biāo)集群或命名空間中可能不相關(guān),從而阻止成功恢復(fù)。一個(gè)有效的Kubernetes應(yīng)用程序保護(hù)解決方案必須為用戶提供指定這些詳細(xì)信息的能力,或者智能地促進(jìn)發(fā)現(xiàn)此類復(fù)雜的應(yīng)用程序。一旦用所有必要的資源定義了一個(gè)應(yīng)用程序,保護(hù)應(yīng)用程序就不再是猜測(cè)了,從而得到更可預(yù)測(cè)的結(jié)果。
鉤子,還是鉤子
多年來(lái),企業(yè)備份軟件一直使用鉤子或前置腳本/后置腳本,使用戶可以插入自定義操作來(lái)執(zhí)行應(yīng)用程序一致性備份,例如在拍攝快照以將內(nèi)存中的表刷新到磁盤之前停止數(shù)據(jù)庫(kù)。使用“執(zhí)行鉤子”插入自定義操作的能力在Kubernetes應(yīng)用程序中有了全新的含義??深A(yù)測(cè)地控制Kubernetes應(yīng)用程序的端到端備份和恢復(fù),以在恢復(fù)后實(shí)現(xiàn)成功的應(yīng)用程序?qū)嵗?,通常需要在備份前后以及恢?fù)前后對(duì)組成Kubernetes應(yīng)用程序的多個(gè)資源執(zhí)行自定義操作。
備份恢復(fù)工作流期間Kubernetes中的執(zhí)行鉤子可用于實(shí)現(xiàn)許多目標(biāo),如在備份/恢復(fù)之前或之后動(dòng)態(tài)應(yīng)用網(wǎng)絡(luò)安全策略,在克隆之前更改入口控制器的注冊(cè)路徑,刷新IP地址,以及其他特定于應(yīng)用程序的自定義操作。Kubernetes應(yīng)用程序保護(hù)解決方案必須允許具有執(zhí)行鉤子的備份/災(zāi)難恢復(fù)工作流的可擴(kuò)展性,使用執(zhí)行鉤子可以插入特定于應(yīng)用程序的自定義操作。
不備份和恢復(fù)的內(nèi)容
確定哪些應(yīng)用程序資源需要保護(hù)至關(guān)重要,但哪些不需要備份和/或恢復(fù)也同樣重要。這是因?yàn)槟承┵Y源(如秘密、IP地址和節(jié)點(diǎn)端口)在目標(biāo)集群中可能與災(zāi)難恢復(fù)無(wú)關(guān)。對(duì)組成Kubernetes應(yīng)用程序的所有資源進(jìn)行大容量備份,然后進(jìn)行后續(xù)恢復(fù),可能會(huì)導(dǎo)致錯(cuò)誤的恢復(fù),因?yàn)槟繕?biāo)集群中的資源子集完全無(wú)效。從概念上講,通常有兩種方法來(lái)解決這種情況。
——使用過(guò)濾器排除備份或恢復(fù)在目標(biāo)集群中沒(méi)有意義的特定資源,使Kubernetes或operator(部署和管理Kubernetes應(yīng)用程序的流行設(shè)計(jì)模式)能夠重新創(chuàng)建這些資源。
——在資源到達(dá)目標(biāo)集群之前進(jìn)行轉(zhuǎn)換。
Kubernetes應(yīng)用程序保護(hù)解決方案必須允許用戶執(zhí)行上述所有操作,以確保恢復(fù)后的應(yīng)用程序行為正確。
總結(jié)
隨著企業(yè)意識(shí)到需要保護(hù)其Kubernetes應(yīng)用程序,在大規(guī)模采用這些解決方案之前,評(píng)估其可定制性和可擴(kuò)展性非常重要。提供一套最佳實(shí)踐也很重要,它可以指導(dǎo)開(kāi)發(fā)人員在設(shè)計(jì)Kubernetes應(yīng)用程序時(shí)遵循一套方法,包括推薦一套他們利用的標(biāo)準(zhǔn)集群內(nèi)和外部服務(wù),以便在關(guān)鍵業(yè)務(wù)Kubernetes應(yīng)用程序在企業(yè)中無(wú)處不在時(shí)更容易保護(hù)它們。
原文鏈接:
https://thenewstack.io/kubernetes-apps-are-snowflakes-find-an-extensible-protection-framework/