envoy 介紹


Envoy

一. 什么是Envoy

  1. envoy 是作為微服務服務架構中以獨立進程方式實現高級網絡功能的,輕量級的7層服務代理程序,通常以sidecar的方式運行在應用程序的周邊,也可以作為網絡的邊緣代理來運行
  2. envoy 的特性 進程外體系結構 ,L3/L4過濾器體系結構,HTTP L7過濾器體系結構, 一流的HTTP/2支持, HTTP/3支持(目前為alpha),HTTP L7路由,gRPC支持,服務發現和動態配置,健康檢查,高級負載平衡,前端/邊緣代理支持, 一流的可觀察性

二. Envoy組件拓撲

下面首先介紹Envoy架構中的一些重要概念:

  • Downstream:下游主機,指連接到Envoy的主機,這些主機用來發送請求並接受響應。
  • Upstream:上游主機,指接收來自Envoy連接和請求的主機,並返回響應。
  • Listener:服務或程序的監聽器, Envoy暴露一個或多個監聽器監聽下游主機的請求,當監聽到請求時,通過Filter Chain把對請求的處理全部抽象為Filter, 例如ReadFilter、WriteFilter、HttpFilter等。
  • Cluster:服務提供集群,指Envoy連接的一組邏輯相同的上游主機。Envoy通過服務發現功能來發現集群內的成員,通過負載均衡功能將流量路由到集群的各個成員。
  • xDS:xDS中的x是一個代詞,類似雲計算里的XaaS可以指代IaaS、PaaS、SaaS等。DS為Discovery Service,即發現服務的意思。xDS包括CDS(cluster discovery service)、RDS(route discovery service)、EDS(endpoint discovery service)、ADS(aggregated discovery service),其中ADS稱為聚合的發現服務,是對CDS、RDS、LDS、EDS服務的統一封裝,解決CDS、RDS、LDS、EDS信息更新順序依賴的問題,從而保證以一定的順序同步各類配置信息。以上Endpoint、Cluster、Route的概念介紹如下:
    • Endpoint:一個具體的“應用實例”,類似於Kubernetes中的一個Pod;
    • Cluster:可以理解“應用集群”,對應提供相同服務的一個或多個Endpoint, 類似Kubernetes中Service概念,即一個Service提供多個相同服務的Pod;
    • Route:當我們做金絲雀發布部署時,同一個服務會有多個版本,這時需要Route規則規定請求如何路由到其中的某個版本上。xDS模塊的功能是通過Envoy API V1(基於HTTP)或V2(基於gRPC),v3(當前支持的版本,支持start_tls,拒絕傳入的tcp連接,4096位tls密鑰,skyWalking和wasm等) 實現一個服務端將配置信息暴露給上游主機,等待上游主機的拉取。

Envoy正常的工作流程為Host A(下游主機)發送請求至上游主機(Host B、Host C、Host D等),Envoy通過Listener監聽到有下游主機的請求,收到請求后的Envoy將所有請求流量劫持至Envoy內部,並將請求內容抽象為Filter Chains路由至某個上游主機中從而實現路由轉發及負載均衡能力。

Envoy為了實現流量代理能力通常需要一個統一的配置文件來記錄信息以便啟動時加載,在Envoy中啟動配置文件有靜態配置和動態配置兩種方式。靜態配置是將配置信息寫入文件中,啟動時直接加載,動態配置通過xDS實現一個Envoy的服務端(可以理解為以API接口對外實現服務發現能力)。

三. Envoy xDS核心術語

主機(Host):一個具有網絡通信能力的端點,例如服務器、移動智能設備等

集群(Cluster):集群是Envoy連接到的一組邏輯上相似的端點;在v2中,RDS通過路由指向集群,CDS提供集群配置,而Envoy通過EDS發現集群成員,即端點;

下游(Downstream):下游主機連接到Envoy,發送請求並接收響應,它們是Envoy的客戶端;

上游(Upstream):上游主機接收來自Envoy的連接和請求並返回響應,它們是Envoy代理的后端服務器;

端點(Endpoint):端點即上游主機,是一個或多個集群的成員,可通過EDS發現;

偵聽器(Listener):偵聽器是能夠由下游客戶端連接的命名網絡位置,例如端口或unix域套接字等;

位置(Locality):上游端點運行的區域拓撲,包括地域、區域和子區域等;

管理服務器(Management Server):實現v2 API的服務器,它支持復制和分片,並且能夠在不同的物理機器上實現針對不同xDS API的API服務;

地域(Region):區域所屬地理位置;

區域(Zone):AWS中的可用區(AZ)或GCP中的區域等;

子區域:Envoy實例或端點運行的區域內的位置,用於支持區域內的多個負載均衡目標;

xDS:CDS 、EDS、HDS 、LDS、RLS(Rate Limit)、 RDS 、 SDS、VHDS和RTDS等API的統稱;

Mesh和Envoy Mesh

四. Envoy的部署類型

  1. Envoy最初是作為Service Mesh Sidecar代理,從應用程序中排除了負載平衡,路由,可觀察性,安全性和發現服務。在Service Mesh模型中,請求數據流經Envoy作為網絡的網關。請求通過入口或出口偵聽器到達Envoy:

    • Ingress listeners 從Service Mesh中的其他節點獲取請求,並將其轉發到本地應用程序。本地應用程序的響應通過Envoy流回到下游。
    • Egress listeners 從本地應用程序獲取請求,並將其轉發到網絡中的其他節點。這些接收節點通常還將運行Envoy,並通過其入口偵聽器接受請求。
  2. Service mesh外,Envoy還用於各種配置中。例如,它還可以充當內部負載平衡器:

  1. 作為網絡邊緣上的入口/出口(ingress/egress proxy)代理:

  1. 在實際應用中,會混合使用上面的方法, 其中Envoy在service mesh(服務網格)中, 在邊緣網絡上作為 內部負載均衡 使用。 請求路徑可能會遍歷多個Envoy

  2. Envoy可以在多層拓撲中進行配置以實現可伸縮性可靠性,其中請求首先通過邊緣Envoy,然后再通過第二個Envoy層:

在上述所有的網絡拓撲模型中,請求將從下游通過TCPUDPUnix域套接字到達特定的Envoy。 Envoy將通過TCPUDPUnix域套接字向上游轉發請求。

五.Envoy核心配置組件

◼ Listener

◼ Filter

◼ Cluster

◼ ...


免責聲明!

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



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