二、Istio原理&架構


摘要 從架構設計上來看,Istio服務網格在邏輯上分為控制平面和數據平面兩部分。其中,控制平面Pilot負責管理和配置代理來路由流量,並配置Mixer以實施策略和收集遙測數據;數據平面由一組以Sidecar方式部署的智能代理(Envoy)組成,這些代理可以調節和控制微服務及Mixer之間所有的網絡通信。

1、Istio整體架構拓撲

2、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),同時可保持用於流量管理的操作界面相同。

  • Mixer

  Istio的Mixer組件提供策略控制和遙測收集功能,將Istio的其余部分與各個后端基礎設施后端的實現細節隔離開來。Mixer是一個獨立於平台的組件,負責在服務網格上執行訪問控制和使用策略,並從Envoy代理和其他服務收集遙測數據。代理提取請求級屬性,發送到Mixer進行評估。

  Mixer中包括一個靈活的插件模型,使其能夠接入到各種主機環境和后端基礎設施,從這些細節中抽象出Envoy代理和Istio管理的服務。利用Mixer,你可以精細控制網格和后端基礎設施后端之間的所有交互。

  • Citadel

  Istio Citadel安全功能提供強大的身份驗證功能、強大的策略、透明的TLS加密以及用於保護服務和數據的身份驗證、授權和審計(AAA)工具,Envoy可以終止或向網格中的服務發起TLS流量。為此,Citadel需要支持創建、簽署和輪換證書。Istio Citadel提供特定於應用程序的證書,可用於建立雙向TLS以保護服務之間的流量。

  借助Istio Citadel,確保只能從經過嚴格身份驗證和授權的客戶端訪問包含敏感數據的服務。Citadel通過內置身份和憑證管理提供了強大的服務間和最終用戶身份驗證。可用於升級服務網格中未加密的流量,並為運維人員提供基於服務標識而不是網絡控制的強制執行策略的能力。Istio的配置策略在服務器端配置平台身份驗證,但不在客戶端強制實施該策略,同時允許你指定服務的身份驗證要求。Istio的密鑰管理系統可自動生成、分發、輪換與撤銷密鑰和證書。

  • Galley

Galley用於驗證用戶編寫的Istio API配置。隨着時間的推移,Galley將接管Istio獲取配置、處理和分配組件的頂級責任。它負責將其他的Istio組件與從底層平台(例如Kubernetes)獲取用戶配置的細節中隔離開來。

3Istio數據平面介紹

摘要 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代理處理跨服務實例的負載均衡過程中,客戶端不需要知道實際部署的任何細節。

4、Istio組件功能及相互協作方式

Istio 的主要組件及其相互關系大致如圖所示摘自《雲原生服務網格Istio》

結合上圖我們來理解Istio的各組件的功能及相互之間的協作方式。

  1. 自動注入:在創建應用程序時自動注入 Sidecar代理Envoy程序。在 Kubernetes中創建 Pod時,Kube-apiserver調用控制面組件的 Sidecar-Injector服務,自動修改應用程序的描述信息並注入Sidecar。在 真正創建Pod時,在創建業務容器的Pod中同時創建Sidecar容器。

  2. 流量攔截:在 Pod 初始化時設置 iptables 規則,基於配置的iptables規則攔截業務容器的Inbound流量和Outbound流量到Sidecar上。而應用程序感知不到Sidecar的存在,還以原本的方式 進行互相訪問。上圖中,流出frontend服務的流量會被 frontend服務側的 Envoy攔截,而當流量到達forecast容器時,Inbound流量被forecast 服務側的Envoy攔截。

  3. 服務發現:服務發起方的 Envoy 調用控制面組件 Pilot 的服務發現接口獲取目標服務的實例列表。上圖中,frontend 服務側的 Envoy 通過 Pilot 的服務發現接口得到forecast服務各個實例的地址。

  4. 負載均衡:服務發起方的Envoy根據配置的負載均衡策略選擇服務實例,並連接對應的實例地址。上圖中,數據面的各個Envoy從Pilot中獲取forecast服務的負載均衡配置,並執行負載均衡動作。

  5. 流量治理:Envoy 從 Pilot 中獲取配置的流量規則,在攔截到 Inbound 流量和Outbound 流量時執行治理邏輯。上圖中, frontend 服務側的 Envoy 從 Pilot 中獲取流量治理規則,並根據該流量治理規則將不同特征的流量分發到forecast服務的v1或v2版本。

  6. 訪問安全:在服務間訪問時通過雙方的Envoy進行雙向認證和通道加密,並基於服務的身份進行授權管理。上圖中,Pilot下發安全相關配置,在frontend服務和forecast服務的Envoy上自動加載證書和密鑰來實現雙向認證,其中的證書和密鑰由另一個管理面組件 Citadel維護。

  7. 服務監測:在服務間通信時,通信雙方的Envoy都會連接管理面組件Mixer上報訪問數據,並通過Mixer將數據轉發給對應的監控后端。上圖中,frontend服務對forecast服務的訪問監控指標、日志和調用鏈都可以通過這種方式收集到對應的監控后端。

  8. 策略執行:在進行服務訪問時,通過Mixer連接后端服務來控制服務間的訪問,判斷對訪問是放行還是拒絕。上圖中,Mixer 后端可以對接一個限流服務對從frontend服務到forecast服務的訪問進行速率控制等操作。

  9. 外部訪問:在網格的入口處有一個Envoy扮演入口網關的角 色。上圖中,外部服務通過Gateway訪問入口服務 frontend,對 frontend服務的負載均衡和一些流量治理策略都在這個Gateway上執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM