1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Service Mesh開源實(shí)現(xiàn)之Istio架構(gòu)概覽

        共 4164字,需瀏覽 9分鐘

         ·

        2021-11-07 01:00


        在之前關(guān)于Service Mesh(服務(wù)網(wǎng)格)的系列文章中,我們從實(shí)戰(zhàn)的角度分享了一些關(guān)于Istio的入門安裝、服務(wù)發(fā)現(xiàn)、熔斷限流流量管理(灰度發(fā)布)等細(xì)節(jié)方面的內(nèi)容(可參考文末推薦閱讀)。


        今天的文章將從更宏觀的概念架構(gòu)入手,來全面介紹Istio這一最著名的服務(wù)網(wǎng)格開源解決方案,以求從整體上將Istio實(shí)現(xiàn)服務(wù)網(wǎng)格的核心原理闡述清楚!



        Istio中的關(guān)鍵概念


        要學(xué)習(xí)Istio需要先明確以下幾個(gè)關(guān)鍵術(shù)語。


        1.容器/容器鏡像


        進(jìn)入到云原生時(shí)代(不了解云原生的概念可以參考《什么是云原生?》)的服務(wù)網(wǎng)格架構(gòu),應(yīng)用的發(fā)布、部署都是圍繞Kubernetes為代表的容器基礎(chǔ)設(shè)施展開的。這就需要對(duì)容器容器鏡像的概念有清晰的理解。


        實(shí)際上,容器的普及要?dú)w功于Docker技術(shù)的流行,而從本質(zhì)上說容器就是運(yùn)行在操作系統(tǒng)中的,受資源隔離限制的一組進(jìn)程,也稱為“容器運(yùn)行時(shí)”。它可以將用戶打包的代碼及其所賴的關(guān)系完整的還原出來。通過容器化運(yùn)行的應(yīng)用程序,可以更快、更可靠地運(yùn)行,而不受具體計(jì)算環(huán)境的影響。


        容器鏡像,是容器化的重要介質(zhì)和載體。從形式上來說,它就是一個(gè)輕量級(jí)的、獨(dú)立的、可執(zhí)行的軟件包文件,包括了運(yùn)行應(yīng)用程序所需要的一切:代碼、工具、系統(tǒng)庫及各種設(shè)置。


        容器技術(shù)的出現(xiàn),徹底顛覆了應(yīng)用構(gòu)建、發(fā)布及運(yùn)行的方式,目前已經(jīng)成為服務(wù)端應(yīng)用發(fā)布的事實(shí)標(biāo)準(zhǔn)。后續(xù)要聊到的Istio服務(wù)網(wǎng)格技術(shù),無論是“網(wǎng)格基礎(chǔ)組件”還是“應(yīng)用程序”,都是以容器的方式運(yùn)行在Kubernetes容器平臺(tái)之上的。


        2.微服務(wù)


        微服務(wù)是一種架構(gòu)風(fēng)格,它將一個(gè)龐大的單體服務(wù)拆分為一組松散耦合的微服務(wù)集合,該微服務(wù)集合提供了與單個(gè)單體應(yīng)用相同的功能。但微服務(wù)可以獨(dú)立于其他服務(wù)進(jìn)行獨(dú)立的開發(fā)和部署。此外,微服務(wù)是圍繞業(yè)務(wù)能力組織的,可以由較小的團(tuán)隊(duì)擁有,因此,在開發(fā)/部署上能夠?qū)崿F(xiàn)更小、更獨(dú)立的迭代。


        目前主要的微服務(wù)架構(gòu)解決方案,以Spring Cloud為代表的微服務(wù)架構(gòu)體系是主流;但隨著云原生技術(shù)概念的流行,以Istio為代表的Service Mesh(服務(wù)網(wǎng)格)微服務(wù)架構(gòu)方案也在逐步得到推廣。


        3.控制平面


        在以Spring Cloud為代表的傳統(tǒng)微服務(wù)架構(gòu)中,應(yīng)用本身與服務(wù)治理邏輯是耦合在一起的。而在Service Mesh(服務(wù)網(wǎng)格)方案中,服務(wù)治理規(guī)則的管理、服務(wù)治理行為應(yīng)用本身都是互相獨(dú)立,這就使得應(yīng)用可以專注于業(yè)務(wù),而服務(wù)治理邏輯則完全可以抽離出來由運(yùn)維團(tuán)隊(duì)進(jìn)行統(tǒng)一的管理。


        像這種專門負(fù)責(zé)服務(wù)治理規(guī)則管理的邏輯或組件,在Service Mesh(服務(wù)網(wǎng)格)架構(gòu)中就叫做“控制平面“。“控制平面”主要由API和工具組成,用于管理服務(wù)治理行為(數(shù)據(jù)平面)。服務(wù)網(wǎng)格運(yùn)維人員可以操控控制平面,以配置服務(wù)網(wǎng)格中的數(shù)據(jù)平面行為。例如,將流量配置作用于控制平面——翻譯配置并將其推送到數(shù)據(jù)平面。


        4.數(shù)據(jù)平面


        在Service Mesh(服務(wù)網(wǎng)格)中,數(shù)據(jù)平面就是具體實(shí)現(xiàn)服務(wù)治理行為的代理。在Istio中數(shù)據(jù)平面由負(fù)責(zé)路由、負(fù)載均衡、服務(wù)發(fā)現(xiàn)、健康檢查和授權(quán)/認(rèn)證的Envoy代理組成。這些代理在每個(gè)服務(wù)實(shí)例的旁邊運(yùn)行(在k8s中,與應(yīng)用容器運(yùn)行在同一個(gè)Pod),攔截所有傳入和傳出的用戶流量,并在這一過程中根據(jù)控制平面下發(fā)的服務(wù)治理規(guī)則進(jìn)行流量管理。


        5.Envoy


        在Istio中,數(shù)據(jù)平面就是由Envoy代理實(shí)現(xiàn)的。它是一個(gè)現(xiàn)代的、高性能邊緣的小型L7代理。Envoy是為大型現(xiàn)代微服務(wù)架構(gòu)設(shè)計(jì)的,可以與Nginx和HAProxy等負(fù)載均衡器相匹配。


        6.代理


        在網(wǎng)絡(luò)中,代理是一個(gè)中間服務(wù)器,位于客戶端和服務(wù)端之間,可以管理請(qǐng)求和響應(yīng)。在Istio服務(wù)網(wǎng)格情況下,代理(Envoy)運(yùn)行在每個(gè)應(yīng)用實(shí)例的前面。當(dāng)向應(yīng)用程序發(fā)起請(qǐng)求時(shí),代理(Envoy)會(huì)攔截該請(qǐng)求,并將其轉(zhuǎn)發(fā)給應(yīng)用程序?qū)嵗?。同樣地,?dāng)應(yīng)用程序?qū)嵗噲D發(fā)出請(qǐng)求時(shí),代理(Envoy)也會(huì)攔截出站請(qǐng)求并將其發(fā)送到目的地。


        由于代理(Envoy)攔截了所有請(qǐng)求,所以它可以修改請(qǐng)求,從而實(shí)現(xiàn)流量路由、故障注入、授權(quán)等功能


        7.L7代理


        L7(第7層)代理在OSI模型的應(yīng)用層工作。在這一層,代理可以處理每個(gè)請(qǐng)求的內(nèi)容。例如Http就是一個(gè)流行的L7協(xié)議。因?yàn)榭梢栽L問請(qǐng)求的數(shù)據(jù),所以L7代理(Envoy)就可以根據(jù)請(qǐng)求的內(nèi)容(URL、Cookies等)做出負(fù)載均衡的決定。



        Istio的架構(gòu)及模塊組成


        Service Mesh(服務(wù)網(wǎng)格)的架構(gòu)方式為我們提供了一種統(tǒng)一的方式來連接、保護(hù)和觀察微服務(wù)。網(wǎng)格內(nèi)的代理(如Envoy)可以捕獲網(wǎng)格內(nèi)所有的通信請(qǐng)求和指標(biāo)——每一次失敗或成功的調(diào)用、重試或超時(shí)的請(qǐng)求都可以被捕獲,并被可視化和報(bào)警。


        這種將通信邏輯從業(yè)務(wù)和應(yīng)用邏輯中分離出來的架構(gòu)方式,可以使開發(fā)人員專注于業(yè)務(wù)邏輯,而服務(wù)網(wǎng)格運(yùn)維人員則專注于服務(wù)網(wǎng)格配置。


        前面通過對(duì)幾個(gè)關(guān)鍵術(shù)語的解釋,以及對(duì)服務(wù)網(wǎng)格架構(gòu)好處的介紹,相信大家或多或少理解了什么是服務(wù)網(wǎng)格。接下來將重點(diǎn)介紹Istio這一開源的服務(wù)網(wǎng)格實(shí)現(xiàn)。


        從宏觀上看,Istio主要支持以下功能:


        1.流量管理


        流量管理是Istio最核心的功能,通過配置,可以控制服務(wù)之間的流量——例如設(shè)置斷路器、超時(shí)或重試等服務(wù)治理機(jī)制,在Istio中都可以通過簡(jiǎn)單的配置改變來完成。


        2.可觀察性


        Istio可以通過跟蹤、監(jiān)控和記錄服務(wù)間的請(qǐng)求來更好地實(shí)現(xiàn)對(duì)服務(wù)的監(jiān)控,方便我們了解服務(wù)運(yùn)行情況,并及時(shí)發(fā)現(xiàn)和修復(fù)問題。


        3.安全性


        Istio可以在代理層面來管理認(rèn)證、授權(quán)和通訊的加密,而無需對(duì)應(yīng)用本身造成侵入。而這些安全配置操作只需要通過快速的配置變更即可完成。


        接下來,我們看下Istio的架構(gòu)組成。如下圖所示:



        如上圖所示,Istio實(shí)現(xiàn)服務(wù)網(wǎng)格,仍然遵循了將組件分離成“控制平面”和“數(shù)據(jù)平面”這一常見的分布式系統(tǒng)構(gòu)建模式。


        Istio中的數(shù)據(jù)平面由Envoy代理組成,控制服務(wù)之間的通信。Envoy是一個(gè)用C++開發(fā)的高性能代理。Istio將Enovy代理作為一個(gè)sidecar容器注入到應(yīng)用容器的旁邊,然后攔截該服務(wù)的所有入站和出站流量。而這些注入應(yīng)用容器旁邊的Enovy代理組合在一起就構(gòu)成了Istio服務(wù)網(wǎng)格的數(shù)據(jù)平面。


        Istiod是Istio的控制平面組件,主要提供服務(wù)發(fā)現(xiàn)、配置和證書管理等功能。Istiod采用YAML文件格式來編寫流量控制規(guī)則,并將其轉(zhuǎn)換為Envoy的可操作配置,之后通過xDS協(xié)議將配置傳播給網(wǎng)格中的所有sidecar代理。


        Istiod主要由Pilot、Citadel、Galley這三個(gè)組件組成。其中Pilot抽象了特定平臺(tái)的服務(wù)發(fā)現(xiàn)機(jī)制(如Kubernetes、Consul或VM),并將其轉(zhuǎn)換為可以被sidecar使用的標(biāo)準(zhǔn)格式。Citadel則是Istio的核心安全組件,實(shí)現(xiàn)證書授權(quán)、證書生成,實(shí)現(xiàn)數(shù)據(jù)平面中sidecar代理之間的mTLS安全通信。


        而Galley則主要服務(wù)配置管理,包括驗(yàn)證配置信息的格式和內(nèi)容正確性,并將這些配置信息提供給Pilot等其他控制平面組件使用。



        Istio的流量管理實(shí)現(xiàn)


        流量管理是Istio服務(wù)網(wǎng)格的核心能力。在《如何在Service Mesh微服務(wù)架構(gòu)中實(shí)現(xiàn)金絲雀發(fā)布?這篇文章中,我們通過Istio的流量管理功能,演示了在服務(wù)網(wǎng)格中實(shí)現(xiàn)灰度發(fā)布的具體方法。接下來,將從原理層面來總結(jié)下Istio實(shí)現(xiàn)流量管理的核心邏輯。


        Istio流量管理示意圖如下:



        如上圖所示,要在Istio服務(wù)網(wǎng)格中實(shí)現(xiàn)流量管理,需要通過VirtualService(虛擬服務(wù))DestinationRule(路由規(guī)則)資源來管理流量路由規(guī)則。


        而具體的路由規(guī)則流量的執(zhí)行由Istio網(wǎng)關(guān)資源來實(shí)現(xiàn)。其中Ingress Gateway(入口網(wǎng)關(guān))Egress Gateway(出口網(wǎng)關(guān))是Istio服務(wù)網(wǎng)格組件的一部分,這兩個(gè)網(wǎng)關(guān)都運(yùn)行著一個(gè)Envoy代理實(shí)例,它們?cè)诜?wù)網(wǎng)格的邊緣作為負(fù)載均衡器運(yùn)行,入口網(wǎng)關(guān)接收入站連接,而出口網(wǎng)關(guān)則接收從集群出去的連接。


        需要注意,這里理解入口網(wǎng)關(guān)和出口網(wǎng)關(guān)的概念不要狹義的理解為就是Istio服務(wù)網(wǎng)格的邊緣入口和出口。對(duì)于Istio服務(wù)網(wǎng)格來說除了外部流量的進(jìn)出可以通過VitrualService(虛擬服務(wù))關(guān)聯(lián)Gateway(網(wǎng)關(guān)資源)來實(shí)現(xiàn)流量路由外,網(wǎng)格之間也可以通過該方式來實(shí)現(xiàn)流量的路由。


        所以,在使用Istio服務(wù)網(wǎng)格來實(shí)現(xiàn)微服務(wù)的流量管理時(shí),可以根據(jù)場(chǎng)景來分別創(chuàng)建針對(duì)外部流量的Gateway+VirtualService資源,以及針對(duì)具體微服務(wù)網(wǎng)格間流量的Gateway+VirtualService資源,并通過VitrualService隨時(shí)修改相應(yīng)的路由規(guī)則。


        而對(duì)于Gateway網(wǎng)格資源的創(chuàng)建來說,則根據(jù)是控制入口流量還是出口流量來選擇關(guān)聯(lián)Ingress Gateway(入口網(wǎng)關(guān))還是Egress Gateway(出口網(wǎng)關(guān))。


        如果上述描述暫時(shí)還未能讓你完全理解Istio服務(wù)網(wǎng)格的流量管理方式,那么可以根據(jù)《如何在Service Mesh微服務(wù)架構(gòu)中實(shí)現(xiàn)金絲雀發(fā)布?》這篇文章中演示的具體的例子進(jìn)行體會(huì)。



        后記


        以上內(nèi)容就是對(duì)Istio服務(wù)網(wǎng)格實(shí)現(xiàn)流量管理核心邏輯的簡(jiǎn)單介紹,也是為了方便大家理解之前文章中的一些操作。雖然目前以Istio服務(wù)網(wǎng)格架構(gòu)還沒有完全替代Spring Cloud微服務(wù)體系,但服務(wù)網(wǎng)格這種將控制平面和數(shù)據(jù)平面分離的架構(gòu)思想,將是未來微服務(wù)架構(gòu)的主流。



        —————END—————



        推薦閱讀

        干貨|如何步入Service Mesh微服務(wù)架構(gòu)時(shí)代

        實(shí)戰(zhàn)|Service Mesh微服務(wù)架構(gòu)實(shí)現(xiàn)服務(wù)間gRPC通信

        再見Nacos,我要玩Service Mesh了!

        玩轉(zhuǎn)Service Mesh微服務(wù)熔斷、限流騷操作

        利用阿里云免費(fèi)鏡像倉庫,實(shí)現(xiàn)微服務(wù)的k8s部署

        如何在Service Mesh微服務(wù)架構(gòu)中實(shí)現(xiàn)金絲雀發(fā)布?

        瀏覽 42
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            欧美老妇性爱 | 色小妹在线视频 | 娇妻呻吟哭泣反抗挣扎着 | 制服大香蕉 | 色偷偷AV一区二区三区 | 欧美骚穴 | 大香蕉久久久久 | 尤物小视频 | 无码在线高清 | 久久色欲 |