
還有其他開源和托管服務(wù)網(wǎng)格可供選擇,比如Istio、Linkerd和KongMesh。

為什么使用服務(wù)網(wǎng)格?
我們使用服務(wù)網(wǎng)格的主要目的之一是,在內(nèi)部pod服務(wù)之間獲得相互傳輸層安全(mTLS)以確保安全。另外,使用服務(wù)網(wǎng)格具有諸多好處,因?yàn)樗试S工作負(fù)載在多個(gè)Kubernetes集群之間聯(lián)系,或者運(yùn)行連接到Kubernetes的標(biāo)準(zhǔn)裸機(jī)應(yīng)用程序。它提供跟蹤、記錄pod之間的連接,可以將連接端點(diǎn)健康指標(biāo)輸出到Prometheus。
該圖顯示了在實(shí)施服務(wù)網(wǎng)格之前工作負(fù)載的樣子。在左邊的示例中,團(tuán)隊(duì)花費(fèi)時(shí)間構(gòu)建管道而不是構(gòu)建產(chǎn)品或服務(wù),通用功能在服務(wù)之間加以復(fù)制,存在不一致的安全性和可觀察性實(shí)踐,還存在毫無可見性的黑盒實(shí)現(xiàn)。
在右邊,在實(shí)現(xiàn)服務(wù)網(wǎng)格之后,同一個(gè)團(tuán)隊(duì)可以致力于構(gòu)建產(chǎn)品和服務(wù)。他們能夠構(gòu)建可擴(kuò)展的高效分布式架構(gòu),可觀察性在多個(gè)平臺(tái)上保持一致,更容易實(shí)施安全和合規(guī)最佳實(shí)踐。

Kuma服務(wù)網(wǎng)格架構(gòu)的工作原理
將應(yīng)用程序pod的套接字通信從明文轉(zhuǎn)移到mTLS的神奇之處在于Kuma控制平面、邊車(sidecar)和Kuma容器網(wǎng)絡(luò)接口(CNI)。當(dāng)開發(fā)人員合并一些更改、為應(yīng)用程序添加新服務(wù)時(shí),Kuma透明地檢測(cè)和注入所需的位,跨自己的網(wǎng)絡(luò)數(shù)據(jù)平面自動(dòng)代理流量。
Kuma服務(wù)網(wǎng)格包括三大組件:
KumaCNI:這個(gè)CNI插件可以根據(jù)注釋來識(shí)別帶有邊車的用戶應(yīng)用程序pod,以設(shè)置流量重定向。它在pod生命周期的網(wǎng)絡(luò)設(shè)置階段完成這項(xiàng)設(shè)置,此時(shí)每個(gè)pod通過名為mutatingwebhook的進(jìn)程在Kubernetes中進(jìn)行調(diào)度。
Kuma-sidecar:它在每個(gè)暴露服務(wù)的實(shí)例上運(yùn)行。這些服務(wù)將所有連接性和可觀察性問題委托給進(jìn)程外的運(yùn)行時(shí)環(huán)境,該運(yùn)行時(shí)環(huán)境將位于每個(gè)請(qǐng)求的執(zhí)行路徑上。它代理所有出站連接,并接受所有入站連接。當(dāng)然,它還會(huì)在運(yùn)行時(shí)執(zhí)行流量策略,比如路由或日志。如果使用這種方法,開發(fā)人員不必操心加密連接,可以完全專注于服務(wù)和應(yīng)用程序上。它被稱為邊車代理,因?yàn)樗窃谕粋€(gè)pod上的服務(wù)進(jìn)程旁邊運(yùn)行的另一個(gè)容器。每個(gè)運(yùn)行的服務(wù)實(shí)例都會(huì)有一個(gè)邊車代理實(shí)例;又由于所有出入請(qǐng)求及其數(shù)據(jù)始終通過邊車代理來傳輸,這又叫Kuma數(shù)據(jù)平面(DP),因?yàn)樗挥诰W(wǎng)絡(luò)數(shù)據(jù)路徑上。
Kuma控制平面(kuma-cp):這是一個(gè)用GoLang編寫的分布式可執(zhí)行文件,可以在Kubernetes上運(yùn)行,頒發(fā)數(shù)據(jù)平面證書,并在KubernetesAPI內(nèi)協(xié)調(diào)數(shù)據(jù)平面(DP)狀態(tài)。您可以使用Kuma自定義資源定義(CRD)來配置Kuma設(shè)置和策略,邊車自動(dòng)從控制平面獲取更改。
結(jié)語
現(xiàn)在的服務(wù)網(wǎng)格拓?fù)浣Y(jié)構(gòu)酷似1990年代和2000年代的企業(yè)服務(wù)總線(ESB)架構(gòu)。無需像ESB架構(gòu)那樣根據(jù)業(yè)務(wù)策略沿路由引導(dǎo)代理流量,有了網(wǎng)格,您可以自由地連接應(yīng)用程序,網(wǎng)格自上而下管理路由和策略。
在我看來,ESB架構(gòu)在業(yè)界沒有更流行的最大原因是它必須滿足整體式代碼庫需求以及經(jīng)常遇到的最終的依賴項(xiàng)管理問題。您會(huì)有數(shù)十個(gè)項(xiàng)目共享依賴項(xiàng)以管理ESB上的對(duì)象,這成了軟件管理的一大難題。
服務(wù)網(wǎng)格技術(shù)通過與代碼保持分離來減輕復(fù)雜度。它讓開發(fā)人員可以將安全性、可靠性和可觀察性的復(fù)雜性從應(yīng)用程序堆棧轉(zhuǎn)移出來,將其作為基礎(chǔ)設(shè)施環(huán)境的一部分。
原文標(biāo)題:??ImplementingaSecureServiceMesh??,作者:JonathanKelley