xDS协议

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 是一组发现服务的总称,包含:

  1. LDS

    Listener 发现服务。

    Listener监听器控制Envoy启动端口监听(目前只支持TCP协议),并配置L3/L4层过滤器,当网络连接达到后,配置好的网络过滤器堆栈开始处理后续事件。

    这种通用的监听器体系结构用于执行大多数不同的代理任务(限流,客户端认证, HTTP连接管理, TCP代理等)。

  2. RDS

    Route发现服务,用于HTTP连接管理过滤器动态获取路由配置。

    路由配置包含HTTP头部修改(增加、删除HTTP头部键值),virtual hosts (虚拟主机),以及virtual hosts 定义的各个路由条目。

  3. CDS

    Cluster发现服务,用于动态获取Cluster信息。

    Envoy cluster管理器管理着所有的上游cluster。

    鉴于上游cluster或者主机可用于任何代理转发任务,所以上游cluster一般从Listener或Route中抽象出来。

  4. EDS

    Endpoint发现服务。

    在Envoy术语中, Cluster成员就叫 Endpoint,对于每个Cluster, Envoy通过EDS API动态获取Endpoint。

    EDS作为首选的服务发现的原因有两点:

    与通过DNS解析的负载均衡器进行路由相比, Envoy能明确的知道每个上游主机的信息,因而可以做出更加智能的负载均衡决策。 Endpoint配置包含负载均衡权重、可用域等附加主机属性,这些属性可用域服务网格负载均衡,统计收集等过程中。

  5. SDS

    Secret发现服务,用于运行时动态获取TLS证书。

    若没有SDS特性,在k8s环境中,必须创建包含证书的Secret,代理启动前Secret必须挂载到sidecar容器中,如果证书过期,则需要重新部署。

    使用SDS,集中式的SDS 服务器将证书分发给所有的Envoy实例,如果证书过期,服务器会将新的证书分发, Envoy 接收到新的证书后重新加载儿不用重新部署

根据配置更新下发维度分类:

  1. State of the World(Basic xDS):全量传输 独立gRPC stream
  2. Incremental xDS:增量传输 独立gRPC stream
  3. Aggregated Discovery Service(ADS):全量传输 聚合gRPC stream
  4. 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章