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”。
是由xDS演化而来
xDS 将逐渐向 UDPA 靠拢,未来将基于 UDPA