Envoy代理轉發(fā)與xDS映射關系
引言
Envoy作為Istio默認數(shù)據(jù)面代理,它的工作流程是怎么樣的?本文通過示例運行,走查其運行流程,以及xDS協(xié)議映射。
一、xDS
xDS 協(xié)議是“X Discovery Service”的簡寫,這里的“X”表示它不是指具體的某個協(xié)議,是一組基于不同數(shù)據(jù)源的服務發(fā)現(xiàn)協(xié)議的總稱,包括 CDS、LDS、EDS、RDS等。在Istio架構中,基于xDS協(xié)議提供了標準的控制面規(guī)范,并以此向數(shù)據(jù)面?zhèn)鬟f服務信息和治理規(guī)則。在Envoy中,xDS被稱為數(shù)據(jù)平面 API,并且擔任控制平面Pilot和數(shù)據(jù)平面Envoy的通信協(xié)議。
CDS 是 Cluster Discovery Service的縮寫,Envoy使用它在進行路由的時候發(fā)現(xiàn)上游Cluster。Envoy通常會優(yōu)雅地添加、更新和刪除 Cluster。有了 CDS 協(xié)議,Envoy在初次啟動的時候不一定要感知拓撲里所有的上游Cluster。在做路由 HTTP 請求的時候通過在 HTTP 請求頭里添加 Cluster信息實現(xiàn)請求轉發(fā)。
EDS 即Endpoint Discovery Service 的縮寫。在Envoy術語中,Endpoint即Cluster的成員。Envoy 通過 EDS API可以更加智能地動態(tài)獲取上游Endpoint。
LDS 即Listener Discovery Service的縮寫。基于此,Envoy 可以在運行時發(fā)現(xiàn)所有的Listener,包括 L3 和 L4 filter 等所有的 filter 棧,并由此執(zhí)行各種代理工作,如認證、TCP 代理和 HTTP 代理等。添加 LDS 使得 Envoy 的任何配置都可以動態(tài)執(zhí)行。
RDS 即 Router Discovery Service 的縮寫,用于 Envoy 在運行時為 HTTP 連接管理 filter 獲取完整的路由配置,比如 HTTP 頭部修改等。并且路由配置會被優(yōu)雅地寫入而無需影響已有的請求。當 RDS 和 EDS、CDS 共同使用時,可以幫助構建一個復雜的路由拓撲藍綠發(fā)布等。
ADS EDS,CDS 等每個獨立的服務都對應了不同的 gRPC 服務名稱。對于需要控制不同類型資源抵達 Envoy 順序的需求,可以使用聚合發(fā)現(xiàn)服務,即 Aggregated xDS,它可以通過單一的 gRPC 服務流支持所有的資源類型,借助于有序的配置分發(fā),從而解決資源更新順序的問題。
備注:上述概念摘自 https://www.servicemesher.com/istio-handbook/ecosystem/xds.html
二、Envoy代理示例
安裝部署
以mac版本為例,安裝看看
- brew update
- brew install envoy
版本檢查
- envoy --version
- envoy version: a2a1e3eed4214a38608ec223859fcfa8fb679b14/1.19.1/Modified/RELEASE/BoringSSL
下載示例yaml文件
- https://www.envoyproxy.io/docs/envoy/latest/_downloads/92dcb9714fb6bc288d042029b34c0de4/envoy-demo.yaml
示例運行
- envoy -c envoy-demo.yaml
訪問以下地址會路由轉發(fā)到Envoy官方地址「www.envoyproxy.io」
- http://localhost:10000/
三、邏輯走查
envoy-demo.yaml文件走查
概念:
LDS(Listener Discovery Service):監(jiān)聽發(fā)現(xiàn)服務
RDS(Route Discovery Service):路由發(fā)現(xiàn)服務
CDS(Cluster Discovery Service):集群發(fā)現(xiàn)服務
EDS(Endpoint Discovery Service):集群成員發(fā)現(xiàn)服務
流程:
1.Listener通過監(jiān)聽端口(10000)將請求根據(jù)Route提供的策略轉發(fā)
2.Route可以配置路由規(guī)則,示例中轉發(fā)到名字為「service_envoyproxy_io」的cluster
3.Cluster中可以配置行為相同的多個EndPoint,多個EndPoint可以配置負載均衡策略
4.EndPoint最終轉發(fā)的節(jié)點地址
本文轉載自微信公眾號「瓜農(nóng)老梁」,可以通過以下二維碼關注。轉載本文請聯(lián)系瓜農(nóng)老梁公眾號。
























