envoy 介绍

Envoy

一. 什么是Envoy

  1. envoy 是作为微服务服务架构中以独立进程方式实现高级网络功能的,轻量级的7层服务代理程序,通常以sidecar的方式运行在应用程序的周边,也可以作为网络的边缘代理来运行
  2. envoy 的特性 进程外体系结构 ,L3/L4过滤器体系结构,HTTP L7过滤器体系结构, 一流的HTTP/2支持, HTTP/3支持(目前为alpha),HTTP L7路由,gRPC支持,服务发现和动态配置,健康检查,高级负载平衡,前端/边缘代理支持, 一流的可观察性

二. Envoy组件拓扑

envoy 介绍_第1张图片

下面首先介绍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还用于各种配置中。例如,它还可以充当内部负载平衡器:

envoy 介绍_第2张图片

  1. 作为网络边缘上的入口/出口(ingress/egress proxy)代理:

envoy 介绍_第3张图片

  1. 在实际应用中,会混合使用上面的方法, 其中Envoy在service mesh(服务网格)中, 在边缘网络上作为 内部负载均衡 使用。 请求路径可能会遍历多个Envoyenvoy 介绍_第4张图片

  2. Envoy可以在多层拓扑中进行配置以实现可伸缩性可靠性,其中请求首先通过边缘Envoy,然后再通过第二个Envoy层:

envoy 介绍_第5张图片

在上述所有的网络拓扑模型中,请求将从下游通过TCPUDPUnix域套接字到达特定的Envoy。 Envoy将通过TCPUDPUnix域套接字向上游转发请求。

五.Envoy核心配置组件

◼ Listener

◼ Filter

◼ Cluster

◼ ...

你可能感兴趣的:(云原生,网络,linux)