云原生系列「五」我为啥又看上了serviceMesh?
上一篇文章,說到為什么不看好服務網格,核心是沒有強大的運維監控以及性能問題,那么lstio的出現讓那個我們看到了一線曙光。因為實際生產活動中,各種運營上報、https證書各種對接、各種監控指標采集、流控策略下發,往往十分耗散開發人員的精力,使得我們無法專注于業務開發,為什么說大公司拉通多,就是這么來的。那么我想lstio就是為了來解決這種問題的。據說lstio的代理能力和已經和nginx差不多,不過沒經過太多生產實踐,還可以觀望下。畢竟
服務網格是一個專用的基礎設施層,旨在“在微服務架構中實現可靠、快速和安全的服務間調用”。它不是一個“服務”的網格,而是一個“代理”的網格,服務可以插入這個代理,從而使網絡抽象化。在典型的服務網格中,這些代理作為一個?sidecar(邊車)被注入到每個服務部署中。服務不直接通過網絡調用服務,而是調用它們本地的?sidecar?代理,而?sidecar?代理又代表服務管理請求,從而封裝了服務間通信的復雜性。相互連接的?sidecar?代理集實現了所謂的數據平面,這與用于配置代理和收集指標的服務網格組件(控制平面)形成對比。
關于sidecar我們在下一篇文章中來介紹。
總而言之,Service Mesh?的基礎設施層主要分為兩部分:
- 控制平面
- 數據平面
當前流行的兩款開源服務網格?Istio?和 Linkerd 實際上都是這種構造;接下來我們通過介紹lstio來進一步了解這種基礎設施:
使用Istio實施服務網格
盡管有其他幾種服務網格,但最受歡迎的是Istio。我們將使用Istio探索云原生應用程序的Service Mesh架構。
如以上各節所述,在微服務體系結構中, Istio通過形成基礎結構層來實現此目的,以連接,保護和控制分布式服務之間的通信。Istio 在每個服務旁邊部署一個 Istio代理(稱為Istio sidecar),而該服務本身的代碼更改幾乎很少或沒有。所有服務間流量都定向到Istio代理,該代理使用策略控制服務間通信,同時實施部署,故障注入和斷路器的基本策略。
Istio的核心能力
- 流量管理:這是 Istio 的最基本的功能。
- 策略控制:通過 Mixer 組件和各種適配器來實現,實現訪問控制系統、遙測捕獲、配額管理和計費等。
- 可觀測性:通過 Mixer 來實現。
- 安全認證:Citadel 組件做密鑰和證書管理
核心Istio組件
?從 2017 年 5 月發布以來,Istio?經歷了四個重要的版本和由此劃分的三個發展階段。在不到三年的產品迭代過程中,出現了兩次重大的架構變動。我們來簡要分析一下這個變遷歷程。
- 0.1 版本:2017 年 5 月發布。作為第二代?Service Mesh?的開創者,宣告了?Istio?的誕生,也燃起了網格市場的硝煙與戰火。
- 1.0 版本:發布于 2018 年 7 月,對外宣傳生產環境可用。從 0.1 到 1.0 版本,開發時間經歷了一年多,但持續的發布了多個 0.x 版本,這一階段處于快速迭代期。
- 1.1 版本:發布于 2019 年 3 月,號稱企業級可用的版本。一個小的版本號變化居然耗費了半年之久,其主要原因是出現了第一次架構重構,這一階段算是調整期。
- 1.5 版本:發布于 2020 年 3 月,再次進行架構的重建,將多組件整合為單體形態的 istiod。從 1.1 到 1.5 版本的一年中,Istio?開始遵循季節性發布,進入了產品的穩定發展期
雖然又變成了單體,但是從職責劃分上我們還是可以從組件化去分析:?
Istio的控制平面和Envoy的數據平面共同構成了一個引人注目的服務網格實現。兩者都擁有蓬勃發展和充滿活力的社區,并且面向下一代服務架構。Istio是獨立于平臺的,可運行于各種環境中,包括跨云、內部部署、Kubernetes、Mesos等。你可以在Kubernetes 上部署Istio或在具有Consul的Nomad上部署。Istio目前支持在Kubernetes上部署的服務、使用Consul注冊的服務以及在虛擬機上部署的服務。
控制平面
控制平面部分包括了Pilot、Mixer、Citadel和Galley四個組件
- Pilot
? Istio的Pilot組件用于管理流量,可以控制服務之間的流量流動和API調用,通過Pilot可以更好地了解流量,以便在問題出現之前發現問題。這使得調用更加可靠、網絡更加強健,即使遇到不利條件也能讓應用穩如磐石。借助Istio的Pilot,你能夠配置熔斷器、超時和重試等服務級屬性,并設置常見的連續部署任務,如金絲雀發布、A/B測試和基于百分比拆分流量的分階段發布。Pilot為Envoy代理提供服務發現功能,為智能路由和彈性能力(如超時、重試、熔斷器等)提供流量管理功能。Pilot將控制流量行為的高級路由規則轉換為特定于Envoy代理的配置,并在運行時將它們傳播到Envoy。此外,Istio提供了強大的開箱即用故障恢復功能,包括超時、支持超時預算和變量抖動的重試機制、發往上游服務的并發連接和請求數限制、對負載均衡池中的每個成員進行的定期主動運行狀況檢查,以及被動運行狀況檢查。
? Pilot將平臺特定的服務發現機制抽象化并將其合成為標準格式,符合數據平面API的任何Sidecar都可以使用這種標準格式。這種松散耦合使得Istio能夠在多種環境下運行(例如Kubernetes、Consul、Nomad),同時可保持用于流量管理的操作界面相同。Pilot中的adapter機制可以適配各種服務發現組件(Eureka、Consul、Kubenetes),最好的是Kubernetes
- Mixer
? Istio的Mixer組件提供策略控制和遙測收集功能,將Istio的其余部分與各個后端基礎設施后端的實現細節隔離開來。Mixer是一個獨立于平臺的組件,負責在服務網格上執行訪問控制和使用策略,并從Envoy代理和其他服務收集遙測數據。代理提取請求級屬性,發送到Mixer進行評估。
? Mixer中包括一個靈活的插件模型,使其能夠接入到各種主機環境和后端基礎設施,從這些細節中抽象出Envoy代理和Istio管理的服務。利用Mixer,你可以精細控制網格和后端基礎設施后端之間的所有交互。
- Citadel
? Istio Citadel安全功能提供強大的身份驗證功能、強大的策略、透明的TLS加密以及用于保護服務和數據的身份驗證、授權和審計(AAA)工具,Envoy可以終止或向網格中的服務發起TLS流量。為此,Citadel需要支持創建、簽署和輪換證書。Istio Citadel提供特定于應用程序的證書,可用于建立雙向TLS以保護服務之間的流量。
控制平面主要是對數據平面組件的管理和維護,因此形成了Istio Service Mesh最重要的層。
- Galley
Galley用于驗證用戶編寫的Istio API配置。隨著時間的推移,Galley將接管Istio獲取配置、處理和分配組件的頂級責任。它負責將其他的Istio組件與從底層平臺(例如Kubernetes)獲取用戶配置的細節中隔離開來。
數據平面
摘要?Istio使用Envoy代理作為默認的開箱即用服務代理,這些Envoy代理與參與服務網格的所有應用程序實例一起運行,但不在同一個容器進程中,形成了服務網格的數據平面。只要應用程序想要與其他服務通信,就會通過服務代理Envoy進行。由此可見,Envoy代理是數據平面和整個服務網格架構中的關鍵組成部分。
Envoy代理
? Envoy最初是由Lyft開發的,用于解決構建分布式系統時出現的一些復雜的網絡問題。它于2016年9月作為開源項目提供,一年后加入了云原生計算基金會(CNCF)。Envoy是用C++語言實現的,具有很高的性能,更重要的是,它在高負載運行時也非常穩定和可靠。網絡對應用程序來說應該是透明的,當網絡和應用程序出現問題時,應該很容易確定問題的根源。正是基于這樣的一種設計理念,將Envoy設計為一個面向服務架構的七層代理和通信總線。
? 首先,Envoy是一種代理,在網絡體系架構中扮演著中介的角色,可以為網絡中的流量管理添加額外的功能,包括提供安全性、隱私保護或策略等。在服務間調用的場景中,代理可以為客戶端隱藏服務后端的拓撲細節,簡化交互的復雜性,并保護后端服務不會過載。例如,后端服務實際上是運行的一組相同實例,每個實例能夠處理一定量的負載。
? 其次,Envoy中的集群(Cluster)本質上是指Envoy連接到的邏輯上相同的一組上游主機。那么客戶端如何知道在與后端服務交互時要使用哪個實例或IP地址?Envoy作為代理起到了路由選擇的作用,通過服務發現(SDS,Service Discovery Service),Envoy代理發現集群中的所有成員,然后通過主動健康檢查來確定集群成員的健康狀態,并根據健康狀態,通過負載均衡策略決定將請求路由到哪個集群成員。而在Envoy代理處理跨服務實例的負載均衡過程中,客戶端不需要知道實際部署的任何細節。
Istio組件功能及相互協作方式
Istio 的主要組件及其相互關系大致如圖所示摘自《云原生服務網格Istio》
找了很多資料,但是偶然發現了社區,開源里面的力量太強大,感恩這個時代:
這本書給你總結的明明白白:
Pilot · Istio Handbook - Istio 服務網格進階實戰 by ServiceMesher(服務網格社區)
更多有用:
Istio:服務發現和Pilot的架構機制_琦彥-CSDN博客_istio服務注冊與發現
華為云講解:2. Istio Pilot 與服務發現_張成基-CSDN博客_istio 服務發現
總結
以上是生活随笔為你收集整理的云原生系列「五」我为啥又看上了serviceMesh?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云原生系列「四」我为啥不看好Servic
- 下一篇: 计算机IO系列「一」零拷贝技术