DevOps團(tuán)隊(duì)在急于利用云原生應(yīng)用開發(fā)和Kubernetes等工具之后,現(xiàn)在需要考慮更多。在許多情況下,DevOps采用Jenkins等早期的持續(xù)集成/持續(xù)部署(CI/CD)管道工具,現(xiàn)在試圖將它們運(yùn)用于之前不適合的云原生場景。
云原生將開發(fā)者拉到基礎(chǔ)設(shè)施相關(guān)操作上,目前的CD工具無法幫助恢復(fù)開發(fā)者在改用微服務(wù)架構(gòu)之前曾擁有的應(yīng)用級上下文,為部署后應(yīng)用軟件的開發(fā)工作流程和可觀察性增添了復(fù)雜性。DevOps團(tuán)隊(duì)在應(yīng)用軟件策略管理方面也面臨新挑戰(zhàn),尤其在嚴(yán)格監(jiān)管的行業(yè),因?yàn)樗鼈冊谡{(diào)整流程,以便在云原生環(huán)境建立信任和安全。與此同時(shí),DevOps需要重新評估自動化方法和消除人為錯(cuò)誤的策略,因?yàn)樵坪蚄ubernetes部署重新面臨非常乏味的手動工作。
以下是DevOps需仔細(xì)考慮戰(zhàn)略(宜早不宜遲)的三個(gè)方面,為云原生2.0未來做好準(zhǔn)備,從而使云原生環(huán)境能夠更有效地得到運(yùn)用。
1.具有更高互操作性和可組合性的CI/CD
考慮到現(xiàn)有的選擇范圍不斷擴(kuò)大,在云原生2.0環(huán)境下,選擇和實(shí)施CI/CD工具變得更令人關(guān)注,但這也是一個(gè)戰(zhàn)略性挑戰(zhàn)。一些工具在開發(fā)管道早期提供了優(yōu)勢,另一些在末期提供了優(yōu)勢。從CI到CD到發(fā)布自動化(RA),DevOps團(tuán)隊(duì)需要檢查潛在的工具以及如何將它們拼湊在一起,以組建一條優(yōu)雅和諧的管道。遺憾的是,正如許多DevOps團(tuán)隊(duì)所熟知,這說起來容易做起來難。一些端到端解決方案還會帶來鎖定現(xiàn)象及其他不良方面,一些同類中優(yōu)秀的零散解決方案可能無法很好地兼容。
我希望和預(yù)測,在不久的將來,會出現(xiàn)更高的互操作性。作為云原生2.0的一部分,以至于CI、CD、RA甚至面向治理和合規(guī)的解決方案都完全即插即用。到時(shí),DevOps就能為特定需求選擇最合適的解決方案,然后它會發(fā)揮作用。
眼下,在我們等待這個(gè)即插即用愿景到來之際,可組合性是DevOps應(yīng)在將來物色的解決方案應(yīng)具有的一個(gè)至關(guān)重要的方面。管道組件輕松交互的能力簡化了無數(shù)使用場景以及關(guān)鍵的安全和合規(guī)問題。跨云原生管道實(shí)施策略驅(qū)動的限制需要帶來廣泛可組合性的DevOps工具鏈。幸好,許多CI/CD系統(tǒng)在這方面做得很好:讓擴(kuò)展和插件可以使跨管道的可組合性成為現(xiàn)實(shí)。
2.利用應(yīng)用策略管理
必須針對整個(gè)應(yīng)用開發(fā)和部署生命周期制定策略,以確保遵循重要的安全和治理規(guī)則。不能跳過任何可能引入漏洞的步驟。對于在云原生環(huán)境工作的DevOps團(tuán)隊(duì)來說,實(shí)施這些策略因Kubernetes及其替代方案的高度復(fù)雜性而變得愈加困難。
作為一種策略,DevOps應(yīng)利用這種工具和框架:1)使開發(fā)者免受Kubernetes復(fù)雜性的影響,2)保護(hù)他們免受風(fēng)險(xiǎn)。比如說,如果您將構(gòu)建映像部署到Docker存儲庫(比如Docker Hub),它包含用于檢測和報(bào)告漏洞及其他安全故障的工具。內(nèi)部源代碼掃描可以識別合并請求中的漏洞。工具還應(yīng)該支持跨團(tuán)隊(duì)的協(xié)作和關(guān)鍵知識的共享。從結(jié)構(gòu)上來講,將DevSecOps嵌入到開發(fā)團(tuán)隊(duì)中、處理安全問題(作為常規(guī)流程的一部分)是明智的。
鑒于相鄰的DevSecOps和工具能夠?qū)Ω渡蒏ubernetes對象和維護(hù)環(huán)境之類的挑戰(zhàn),開發(fā)者可以專注于代碼和解決業(yè)務(wù)問題。這就是他們想要做的,這也是他們的目的。還應(yīng)該使用擁有強(qiáng)大應(yīng)用框架的工具來定義和實(shí)施DevSecOps控制的策略,這些策略會自動禁止危險(xiǎn)活動和錯(cuò)誤。有了合適的應(yīng)用策略管理框架,如果開發(fā)者誤嘗試部署受污染的映像,他們就無法這么做。此類框架可以實(shí)施安全策略和資源限制,啟用或禁用安全掃描,管理CVE被標(biāo)記還是被忽略,以及控制團(tuán)隊(duì)對整個(gè)云原生環(huán)境中的Kubernetes和服務(wù)的訪問。
3.兼顧自動化和審計(jì)
應(yīng)用開發(fā)中的人為錯(cuò)誤會降低生產(chǎn)力。通常更大的擔(dān)憂是加大安全和合規(guī)風(fēng)險(xiǎn)。自動化和審計(jì)存在有趣的關(guān)系:自動化減少人為錯(cuò)誤,而審計(jì)讓人可以解決自動化造成的錯(cuò)誤。
有點(diǎn)出人意料的是,云原生環(huán)境促使人們回到非常手動的流程,從而使新的自動化對于開發(fā)者生產(chǎn)力變得更重要。比如說,原始Kubernetes及其Helm圖表和YAML文件需要大量的腳本和手動部署工作。(從本人使用Kubernetes的情況來看,我認(rèn)為如果每次我在編寫YAML文件出錯(cuò)時(shí)都往罐子里投入一美元,我會塞滿好幾只罐子。)抽取掉開發(fā)者不關(guān)心的Kubernetes的具體細(xì)節(jié)的自動化很受歡迎。
自動化最適合帶來預(yù)期結(jié)果的可重復(fù)任務(wù),比如掃描安全問題、檢查代碼使用安全且經(jīng)過驗(yàn)證的庫等。有效的自動化不是一勞永逸的自動化——它需要監(jiān)督和維護(hù)。比如說,自動化系統(tǒng)可能會標(biāo)記實(shí)際上無害的CVE,需要人來判斷以完善系統(tǒng)。完全有可能使不可信的不良流程實(shí)行自動化,因此最終只會帶來更多問題。正確的策略是,先開發(fā)值得信賴的手動系統(tǒng),然后根據(jù)需要實(shí)現(xiàn)自動化。
通過利用可組合的CI/CD解決方案和謹(jǐn)慎的策略,使安全簡化的應(yīng)用開發(fā)實(shí)現(xiàn)自動化,DevOps可以最大限度地減少云原生環(huán)境的挑戰(zhàn),同時(shí)讓開發(fā)者可以提高創(chuàng)造力和生產(chǎn)力。