xDS
xDS
是資料平面标準
利用
XDS
協定,
Envoy
可以實作配置的完全動态化,配置實時更新而無需重新開機
Envoy
或者影響業務,此外,利用其L3/L4/L7 Filter機制,
Envoy
可以完全無侵入的擴充各種強大的功能。利用其内置的
Tracing
機制和
Stats
子產品,可以很友善的實作對流量的跟蹤以及監控,保證Envoy中流量的可觀察性。 由
Envoy
項目發展而來,
Envoy
可以通過
xDS API
可以動态擷取
Listener
(監聽器),
Route
(路由),
Cluster
(叢集/服務),
Endpoint
(叢集成員/服務執行個體)以及
Secret
(秘鑰)配置。
xDS
協定是基于
gRPC
實作的傳輸協定,即
Envoy
通過
gRPC streaming
訂閱
Pilot
的資源配置。
Pilot
借助
ADS
對API更新推送排序的能力,按照
CDS
-
EDS
-
LDS
-
RDS
的順序串行分發配置。
xDS
是一組發現服務的總稱,包含:
-
LDS
Listener 發現服務。
Listener監聽器控制Envoy啟動端口監聽(目前隻支援TCP協定),并配置L3/L4層過濾器,當網絡連接配接達到後,配置好的網絡過濾器堆棧開始處理後續事件。
這種通用的監聽器體系結構用于執行大多數不同的代理任務(限流,用戶端認證, HTTP連接配接管理, TCP代理等)。
-
RDS
Route發現服務,用于HTTP連接配接管理過濾器動态擷取路由配置。
路由配置包含HTTP頭部修改(增加、删除HTTP頭部鍵值),virtual hosts (虛拟主機),以及virtual hosts 定義的各個路由條目。
-
CDS
Cluster發現服務,用于動态擷取Cluster資訊。
Envoy cluster管理器管理着所有的上遊cluster。
鑒于上遊cluster或者主機可用于任何代理轉發任務,是以上遊cluster一般從Listener或Route中抽象出來。
-
EDS
Endpoint發現服務。
在Envoy術語中, Cluster成員就叫 Endpoint,對于每個Cluster, Envoy通過EDS API動态擷取Endpoint。
EDS作為首選的服務發現的原因有兩點:
與通過DNS解析的負載均衡器進行路由相比, Envoy能明确的知道每個上遊主機的資訊,因而可以做出更加智能的負載均衡決策。 Endpoint配置包含負載均衡權重、可用域等附加主機屬性,這些屬性可用域服務網格負載均衡,統計收集等過程中。
-
SDS
Secret發現服務,用于運作時動态擷取TLS證書。
若沒有SDS特性,在k8s環境中,必須建立包含證書的Secret,代理啟動前Secret必須挂載到sidecar容器中,如果證書過期,則需要重新部署。
使用SDS,集中式的SDS 伺服器将證書分發給所有的Envoy執行個體,如果證書過期,伺服器會将新的證書分發, Envoy 接收到新的證書後重新加載兒不用重新部署
根據配置更新下發次元分類:
- State of the World(Basic xDS):全量傳輸 獨立gRPC stream
- Incremental xDS:增量傳輸 獨立gRPC stream
- Aggregated Discovery Service(ADS):全量傳輸 聚合gRPC stream
- Incremental ADS:增量傳輸 聚合gRPC stream (暫未實作)
ADS
早期的xDS協定是 全量傳輸 單連結 獨立資源, 現在主流的還是全量傳輸 聚合gRPC Stream (ADS)。
由于Envoy xDS采用最終一緻性,部分流量可能在更新時被丢棄。 ADS通過一個連接配接(gRPC同一stream)申請多種資源/接受多種資源。 能夠保證請求一定落在同一Pilot上,解決多個管理伺服器配置不一緻的問題。 通過順序的配置分發,輕松解決資源更新順序的問題。 按照這個方式CDS-EDS-LDS-RDS下發,由Polit控制,規避流量丢失的問題。
Incremental xDS
當配置發生變化時,僅下發和更新發生變化的配置部分,增量 xDS 用戶端需要向伺服器告知它已擁有的資源進而避免重複發送。
UDPA
UDPA
是“Universal Data Plane API”的縮寫, “通用資料平面API”。