ServiceMesh 2:控制面和資料面的職責(圖文總結)

Hello-Brand發表於2024-09-30

ServiceMesh系列

1 Service Mesh介紹

之前的章節我們詳細介紹了ServiceMesh的基礎知識.
ServiceMesh 是最新一代的微服務架構,作為一個基礎設施層,能夠與業務解耦,並解決複雜網路拓撲下微服務與微服務之間的通訊。其實現形態一般為輕量級網路代理,並與應用SideCar部署,同時對業務應用透明。
image

2 Istio介紹

ServiceMesh 是一種強大微服務架構,但並不是一個架構產品,比較受歡迎的ServiceMesh產品有Istio、Linkerd和Consul Connect等

其中的Istio 是最受歡迎、最強大、最值得信賴的服務網格。 Istio 由 Google、IBM 和 Lyft 於 2016 年創立,是雲原生計算基金會的一個畢業專案, 與 Kubernetes 和 Prometheus 等專案並列。

Istio 可確保雲原生和分散式系統具有彈性,幫助現代企業在保持連線和保護的同時跨不同平臺維護其工作負載。 它啟用安全和治理控制,包括 mTLS 加密、策略管理和訪問控制、 支援網路功能,例如金絲雀部署、A/B 測試、負載平衡、故障恢復, 並增加對整個資產流量的可觀察性。

Istio 並不侷限於單個叢集、網路或執行時的邊界——在 Kubernetes 或 VM、多雲、混合或本地上執行的服務都可以包含在單個網格中。

Istio 經過精心設計,具有可擴充套件性,並受到貢獻者和合作夥伴的廣泛生態系統的支援, 它為各種用例提供打包的整合和分發。您可以獨立安裝 Istio,也可以選擇由提供基於 Istio 的解決方案的商業供應商提供的託管支援。

image

官方網站:https://istio.io/latest/

3 Istio部署邏輯

Istio 服務網格在部署邏輯上分為資料平面控制平面

  • 資料平面是一組代理,用於調解和控制微服務之間的所有網路通訊。 它們還收集和報告所有網格流量的可觀測資料。
  • 控制平面管理和配置資料平面中的代理。

Istio 支援兩種主要的資料平面模式:
1. Sidecar 模式, 它會與您在叢集中啟動的每個 Pod 一起部署一個 Envoy 代理,或者與在虛擬機器上執行的服務一同執行。
2. Ambient 模式, 使用每個節點的四層代理,並且可選地使用每個名稱空間的 Envoy 代理來實現七層功能。

4 Istio架構圖

Istio架構圖如下:
image

它提供瞭如下功能:

  • 針對HTTP,gRPC,WebSocket和TCP協議提供負載均衡;
  • 精細的流量控制,比如A/B測試,金絲雀部署等;
  • 模組化的外掛設計,可以透過API進行訪問,頻率限制等;
  • 全自動的請求遙測,包括請求的追蹤,監控和日誌;
  • 強大的安全功能,比如認證,授權,加密等;

總之: DiscoveryConfigurationCertificates

4.1 控制面

控制面負責服務治理,比如路由規則,流量規則(異常重試、超時重試、超時保護、限流、熔斷),安全策略等,是服務網格的控制核心,透過控制面,可以配置服務網格中各個元件的行為。

為了結構化控制面的功能,Istio 將其分為PilotMixerCitadel 等元件,其各個部分對應的功能:

  • Pilot:負責服務發現,負載均衡,路由規則等,不過Pilot不提供服務註冊,只提供標準化的介面,可以方便的對接到各個服務註冊中心,比如Eureka,Etcd等,然後透過服務發現控制Envoy的動態轉發能力;
  • Mixer:負責訪問控制,策略執行等,在最初的Istio的架構設計中,Mixer是中心化的元件,由於Mixer提供了各種訪問控制策略,所以Mixer的負載壓力比較大,發起請求之前做一次邏輯檢查,請求結束後還需要上報處理,Mixer接收的請求至少漲了原始請求的2倍。為了解決這個問題,Mixer增加了快取的功能,邏輯處理和上報都由Mixer快取完成,這樣Mixer的負載壓力就能緩解;
  • Citadel:負責安全功能,比如認證授權等,比如那些服務安全級別比較高,需要對請求做單獨的加密處理或者角色控制,Istio 透過引入Citadel元件,將安全能力透明化;

4.2 資料面

可以看到架構圖上,每個服務都有一個sidecar,也就是 Envoy,這個就是資料面,負責服務間通訊和負載均衡。
所有進入服務的請求都經過 Envoy,然後根據路由規則轉發到相應的服務,所以 Envoy 被稱為服務網格的入口。
Envoy 架構圖如下:
image

Envoy包括幾個部分:

  • listeners:監聽器,負責監聽埠,接收請求,比如上述的配置檔案中監聽10000埠;
  • filter Chains:過濾器鏈,可以在配置檔案配置對於請求的處理鏈路,可以在任何一個套接字上,按我們的需要去拼接多個過濾器,來實現對流量的、不同功能的處理,比如上述的配置檔案中的過濾器鏈,在監聽器上新增了 HttpConnectionManager 過濾器,這個過濾器負責解析HTTP協議;
  • cluster defintios:設定轉發到下游的upsteam server,比如上述配置檔案中的cluster defintios,設定轉發到xxx域名上

Envoy提供了xDS API標準(x-discovery service),也就是服務發現服務 ,Envoy透過xDS API獲取配置資訊,然後根據配置資訊進行轉發,包括幾個型別,分別是:EDS(endpoint discovery service),LDS(listener discovery service)和CDS(cluster discovery service),對應實現節點服務發現,監聽器服務發現和叢集服務發現。

4.3 控制面和資料面互動過程

整個交付過程分為3步驟:管理員使用控制面進行策略配置、策略下發資料面、資料面策略生效。

4.3.1 配置 istioctl、kubectl , 呼叫k8s api 的過程

image

4.3.2 Pilot透過xDS 介面進行策略下發

image

4.3.3 流量策略的執行過程

image

5 總結

  • Service Mesh是新一代的微服務架構
  • Istio 是ServiceMesh的一種實現架構,主要包含資料面和控制面,他們的互動步驟如下:
    • 控制面支撐策略配置
    • 策略下發至資料面
    • 資料面策略生效並實現流量治理

相關文章