Istio XDS 配置生成实现

Envoy 按照使用场景可以分为 3 种。
1)model.Sidecar:Sidecar 模式,和应用服务一块部署在容器中,对进出应用服务的流量进行拦截。2)model.Router:Router 模式,作为独立的代理服务,对应用的 L4/L7 层流量进行代理。3)model.Ingress:Ingress 模式,作为集群入口的 Ingress 代理,对集群的入口流量进行拦截和代理。
其中,Router 模式与 Ingress 模式均属于和应用服务不在一起部署的纯代理场景,在 XDS 配置方面没有任何区别,因此从 XDS 响应消息生成的角度看,可以归为一类,称为 Gateway 模式。
对于 Sidecar 模式来说,Envoy 负责服务出入方向流量的透明拦截,并且出入方向的流量在监听管理、路由管理等方面有很大的区别,因此 Sidecar 的 XDS 配置均按照出入方向分别进行组织和管理。入流量一般称为 Inbound,出流量一般称为 Outbound。
由于 Router 模式和 Ingress 模式均属于单独的代理模式,在 XDS 配置管理方面没有大的差异,可以统一为 Gateway 模式,因此在 XDS 管理配置上可以划分为 Sidecar Inbound 模式、Sidecar Outbound 模式和 Gateway 模式。
这几个模式下的 XDS 配置生成的方式也都比较类似,首先获取当前模式下 Sidecar 对应的服务列表,然后基于服务列表,拼装相应的 XDS 信息。
- Inbound Sidecar 
Inbound 方向代表的是发往本节点的流量,同时 Inbound 只会将请求转发到和当前 Sidecar 部署在同一个部署单元上的服务节点上,因此 Inbound 方向的集群信息和路由信息都比较确定,只需要获取到当前 Sidecar 节点对应的服务信息即可。
对于 HTTP 来说,这里会拼装 HTTP 对应的路由信息,具体包含 clusterName 集群信息和 VirtualHost 信息。由于 Inbound 方向使用单一的集群、单一的 VirtualHost,并且集群固定只有一个节点信息(本机节点),因此 Inbound 方向的路由查找和流量转发比较确定。Inbound 方向的 VirtualHost 称为“Inbound|http|instance.Endpoint.ServicePort.Port”。
对于 TCP 来说,Inbound 方向的路由信息当前未按照具体的协议类型进行区分,直接通过 TCP Proxy 的方式进行路由,这样只能进行全局的统计和管控,无法对 Inbound 方向的流量进行协议相关的链路治理和管控。
- Outbound Sidecar 
Outbound 方向代表的是从当前节点发往本节点外的流量,因此首先需要获取当前节点服务对应的上游服务列表,对于有作用域相关设置的 Sidecar 来说,需要根据作用域设置获取服务列表,对于没有作用域相关设置的 Sidecar 来说,返回的是注册中心的所有服务列表,因此当集群和服务规模比较大时,为了减少大量无效的 XDS 交互,需要设置相应的作用域信息。
获取到服务列表之后,需要根据服务当前支持的协议信息进行 XDS 响应消息的拼装,对于 HTTP 协议来说,一般通过 80 端口号对外提供服务,因此多个 HTTP Outbound 服务可以共用一个监听器“0.0.0.0:80”,使用统一的 HTTPConnManager 对不同 HTTP Outbound 服务进行管理,使用 80 端口号作为 Rds 配置的 RouteConfigName,Rds 对应的具体路由配置由 RDS 协议负责解析。
由于具体的应用协议不同,TCP 协议并且不像 HTTP 协议那样拥有知名端口号,因此无法直接使用端口号作为监听器标识。对于这类协议,一般会采用虚拟 IP 地址作为服务的监听标识。
- Gateway 
对于 Gateway 模式来说,Gateway 对应的服务信息和路由信息通过 Istio 核心资源 Gateway 指定。Gateway 节点配置生成时,首先根据当前 Gateway 节点的工作负载标签,获取匹配的 Gateway 核心资源列表,然后将这些核心资源列表进行合并处理,产出一个逻辑的 Gateway,逻辑 Gateway 包括 Gateway 节点 XDS 配置生成需要的元数据信息,根据这些信息就可以拼装生成相应的 XDS 响应消息。
版权声明: 本文为 InfoQ 作者【阿泽🧸】的原创文章。
原文链接:【http://xie.infoq.cn/article/bcda1d6f669abb6fbeac7f912】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。











 
    
评论