介绍Envoy是Istio默认的数据平面代理,它的工作流程是怎样的?本文通过实例来查看其运行过程和xDS协议映射。1、xDSxDS协议是“XDiscoveryService”的缩写。这里的“X”表示它不是指具体的协议,而是一组基于不同数据源的服务发现协议的总称,包括CDS、LDS、EDS、RDS等。在Istio架构中,基于xDS协议提供了标准的控制平面规范,将服务信息和治理规则传递到数据平面。在Envoy中,xDS被称为数据平面API,作为控制平面Pilot和数据平面Envoy的通信协议。CDS是ClusterDiscoveryService的缩写,Envoy在路由时用它来发现上游Cluster。Envoy通常会优雅地添加、更新和删除集群。有了CDS协议,Envoy在刚启动的时候不一定要感知拓扑中所有上游的Clusters。在路由HTTP请求时,通过在HTTP请求头中添加Cluster信息来实现请求转发。EDS是EndpointDiscoveryService的缩写。在Envoy术语中,Endpoint是Cluster的成员。Envoy可以通过EDSAPI更智能地动态获取上游端点。LDS是ListenerDiscoveryService的缩写。基于此,Envoy可以在运行时发现所有的Listener,包括所有的L3和L4过滤器等过滤器堆栈,从而执行各种代理任务,例如身份验证、TCP代理和HTTP代理。添加LDS可以动态执行Envoy的任何配置。RDS是RouterDiscoveryService的缩写,Envoy使用它在运行时获取HTTP连接管理过滤器的完整路由配置,例如HTTPheader修改等,并且路由配置将被优雅地写入,不会影响现有的请求。当RDS与EDS、CDS一起使用时,可以帮助构建复杂的路由拓扑,比如蓝绿发布。ADS、EDS、CDS等每一个独立的服务都对应着不同的gRPC服务名。对于需要控制不同类型资源到达Envoy的顺序,可以使用聚合发现服务,即AggregatedxDS,可以通过单一的gRPC服务流支持所有资源类型,解决资源更新顺序问题通过有序的配置分布。问题。备注:以上概念摘自https://www.servicemesher.com/istio-handbook/ecosystem/xds.html2.Envoy代理示例安装部署以mac版为例,安装查看brewupdatebrewinstallenvoyversioncheckenvoy--versionenvoyversion:a2a1e3eed4214a38608ec223859fcfa8fb679b14/1.19.1/Modified/RELEASE/BoringSSLdownloadsampleyamlfilehttps://www.envoyproxy.io/docs/envoy/latest/_downloads/92dcb9714fb6bc288d042029b34c0de4/envoy-demo.yamlsamplerunenvoy-cenvoy-demo.yaml访问以下地址会被路由转发到Envoy的官方地址“www.envoyproxy.io”http://localhost:10000/3.逻辑演练envoy-demo.yaml文件演练概念:LDS(ListenerDiscoveryService):ListenerDiscoveryServiceRDS(RouteDiscoveryService):路由发现服务CDS(ClusterDiscoveryService):集群发现服务EDS(EndpointDiscoveryService):集群成员发现服务流程:1.Listener转发请求a根据Route提供的策略通过监听端口(10000)2.Route可以配置路由规则。在示例中,它被转发到名称为“service_envoyproxy_io”的cluster3。集群中可以配置多个行为相同的EndPoint,多个EndPoint可以配置负载均衡策略。4.EndPoint最终转发的节点地址“国农老梁”,可以通过以下二维码关注。转载本文请联系瓜农老梁公众号。
