分两部分来分析,首先是Istio组件Pilot与Envoy的交互过程。
1)Pilot使用client-go的Informer组件连接API Server获取集群中所有服务的Service和对应的Endpoints信息,这样就完成了服务的发现。
2)Pilot也会从API Server中获取用户自定义的VirtualService、DestinationRule等Istio的CRD资源对象。这样就获取了用户自定义的服务治理策略。
3)Pilot将服务的Endpoints信息和服务治理策略转化成Envoy能够识别的格式,并下发给Envoy代理。
通过上面的流程,Istio的控制面组件Pilot、数据面组件Envoy和Kubernetes是如何一起工作的。
接下来分析图中一个下游客户端的请求到达Envoy后是如何被处理的,在这之前先了解Envoy的4种核心资源。
1.Listener
Listener是Envoy打开的一个端口,用来接受客户端发起的请求。多个Listener之间是相互隔离的。Listener除了监听端口以外还会配置L3或L4的过滤器。它的配置使用xDS(Envoy动态获取配置的传输协议,是一类发现服务的总称)中的LDS(Listener Discovery Service,监听器发现服务)。
2.Cluster
Cluster是对上游服务的抽象,每个上游服务都被抽象为一个Cluster。Cluster的配置主要有超时时间、连接池、Endpoints等信息。它的配置使用xDS中的CDS(Cluster Discovery Service,集群发现服务)和EDS(Endpoint Discovery Service,端点发现服务)。
3.Route
上下游之间的桥梁,Listener负责监听并接收来自下游客户端的请求,Cluster负责将流量转发给具体的上游服务。而Route则决定了Listener接收到的流量要发送给下游的哪个Cluster。它定义了数据的分发规则并负责Virtual Host(虚拟主机)的定义,也负责HTTP头的增加、删除、更改等。此外它也负责超时重试。它的配置使用xDS中的RDS(Route Discovery Service,路由发现服务)。
4.Filter
在Istio中习惯叫它Envoy Filter。它类似一个插件机制,让用户可以在不侵入源码的基础上对Envoy做各个方面的增强。Envoy通过它获得了强大的扩展能力,理论上Envoy利用Filter的机制可以实现任何协议的支持以及协议之间的转换,可以实现对流量的全方位定制和修改。
·监听过滤器(Listener Filter)主要负责将数据交给L3/L4的网络过滤器。
·网络过滤器(Network Filter)主要负责网络连接的处理,工作在L3/L4。图中展示了目前Envoy支持的网络过滤器。目前有些Envoy Filter还不成熟。
·HTTP过滤器主要负责HTTP流量的处理,在图中我们可以看到,HTTP过滤器是由特殊的网络过滤器HTTP Connection Manager管理的。
标签:服务,Envoy,Istio,网格,Listener,Cluster,过滤器 From: https://www.cnblogs.com/muzinan110/p/17133121.html