Pilot是istio的控制中心,充当指挥官的作用。如果把数据面板的Envoy当作agent端,那么Pilot类似传统C/S架构中的Server服务器端,它通过下发指令控制客户端Envoy完成业务功能,比如流量治理,熔断,灰度等功能。
Pilot在架构上,由用户接口层,抽象模型层,平台适配层和面向Envoy的XDS协议层构成。
图一: Pilot组成架构

平台适配器(PlatformAdapter)负责监听底层平台,并完成从平台特有的服务模型到Istio规范模型的转换,像接入K8S、Mesos等平台。
用户API接口层,提供了面向业务的高层抽象,面向研发、运维等。
抽象模型层是为了提供不同底层基础平台像k8s、consul等的支持,于是将不同输入来源的数据有一个统一的存储格式。
xDS协议接口是将服务策略和流量规则下发到数据面的Envoy中,提供一套标准的API接口。这篇文章就是介绍XDS协议的基础概念。
xDS协议是Envoy动态获取配置的传输协议,也是Istio与Envoy连接的重要桥梁。
Envoy通过文件系统或者查询一个或者多个管理服务器来动态获取配置。总体来说,这些发现服务及相关API被统称为xDS。xDS是一类发现服务的总称,包含LDS、RDS、CDS、EDS及SDS等
一些基本术语:
Downstream(下游): 下游主机连接到Envoy,发送请求并接收响应,即发送请求的主机。
Upstream(上游): 上游主机接收来自Envoy的连接和请求,并返回响应,即接受请求的主机。
Listener(监听器): 监听器是命名网地址(例如,端口、unixdomain socket 等),下游客户端可以连接这些监听器。Envoy暴露一个或者多个监听器给下游主机连接。
Cluster(集群): 集群是指Envoy连接的一组逻辑相同的上游主机。Envoy通过服务发现来发现集群的成员。可以选择通过主动健康检查来确定集群成员的健康状态。Envoy通过负载均衡策略决定将请求路由到集群的哪个成员。
xDS是一类发现服务的总称,包含LDS、RDS、CDS、EDS及SDS等
图二: Envoy代理基本术语图示

(1)LDS: Listener发现服务。Listener监听器控制Envoy启动端口监听,目前只支持TCP,并配置L3或L4层过滤器,在网络连接到达后,由网络过滤器堆栈开始处理。Envoy根据监听器的配置,执行不同的代理任务(限流、客户端认证、HTTP连接管理、TCP代理等)。
(2)RDS: Route发现服务,用于 Envoy HTTP连接管理器动态获取路由配置。路由配置包含HTTP头部修改(增加、删除HTTP头部键值)、VirtualHosts(虚拟主机)及VirtualHosts定义的各个路由条目。
(3)CDS: Cluster发现服务,用于动态获取Cluster信息。Envoy Cluster管理器管理着所有的上游Cluster。Envoy一般从Listener(针对TCP协议)或Route(针对HTTP)中抽象出上游Cluster,作为流量转发目标。
(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在接收到新的证书后重新加载,不用重新部署。Envoy通过xDS API可以动态获取Listener(监听器)、Route(路由)、Cluster(集群)、Endpoint(集群成员)及Secret(证书)配置。
图三:xDS服务发现配置案例





