Istio 整体架构解析
Istio 在微服务之间建立连接,接管通信功能,对业务微服务屏蔽通信细节,同时通过流量控制、策略控制、遥测统计、Istio 安全机制等对微服务进行监控和管理,使得微服务架构更加健壮、安全和易扩展。Istio 整体架构分为数据平面(Data Plane)和控制平面(Control Plane)两部分。
一、数据平面
数据平面除了负责实际流量转发工作的数据转发代理服务 istio/proxy 之外,还有几个关键组件:pilot-agent 负责转发代理的启动和生命周期管理,istio-init 负责流量透明拦截的配置,pilot-agent、istio-init 和转发代理一同部署,共同为业务流量转发保驾护航。
istio/proxy
istio/proxy 是 Istio 在 Envoy 官方源码基础上的扩展实现,除了包括 Envoy 的全部功能外,还包括了一些扩展支持,Istio 扩展通过 Envoy 过滤器插件的方式提供,当前主要扩展是 Mixer 客户端的支持。
pilot-agent
pilot-agent 是一个本地代理,负责管理 istio/proxy 服务的整个生命周期。具体包括 istio/proxy 准备启动参数和配置文件,负责管理 istio/proxy 的启动过程,istio/proxy 启动后的运行状态监控。当监控到 istio/proxy 运行状态不正常时,pilot-agent 负责将 istio/proxy 重新调整到正常状态,调整策略具体包括重启或者调度到其他节点运行等。
pilot-agent 和 istio/proxy 均会启动相应的 HTTP 管理端口,供外界查询当前的运行状态,如果运行状态不符合预期时,可以采取相应的控制策略。
istio-init
istio-init 负责业务微服务的流量透明拦截,通过配置相应的流量拦截策略,可以将业务服务的所有出入流量转发到本地的数据平面代理节点处理。Istio 当前使用 Iptables 作为默认的流量拦截策略,istio-init 通过 istio-iptables.sh 拦截配置,配置相应的 Iptables 规则,完成具体的流量拦截操作。
node-agent
Istio 为了实现不同节点之间的安全通信,通信一般是通过 TLS 的方式进行。为了完成 TLS 通信,数据平面代理节点需要获取证书和密钥相关的信息。node-agent 就是负责证书和密钥等安全信息的获取,和 istio/proxy、pilot-agent 以及 istio-init 的 Pod 级别的部署方式不同,node-agent 当前采用 Kubernetes Node 级别的部署方式,每个 Node 上部署一个 node-agent。
node-agent 作为代理服务,接收数据平面代理节点的证书请求,转换成控制平面需要的格式,请求控制平面的证书管理服务,完成证书和密钥的获取和下发。
二、控制平面
控制平面中,istio-telemetry 提供可观测性支持,基于 istio-telemetry 可以掌控整个 Istio 集群当前的运行状态;istio-pilot 和 istio-policy 分别负责流量控制和策略控制,观测到运行状态不符合预期时,可以通过 istio-pilot 对流量和路由转发进行控制与调整,通过 istio-policy 可以灵活动态地引入新的基础设施,对 Istio 运行进行精细化控制。
istio-pilot
istio-pilot 负责 Istio 数据平面的 XDS 配置管理,具体包括:①流量管理和服务发现配置等,通过提供通用的流量管理模型和服务发现模型,对接不同的平台适配层;②提供统一的 XDS API,供 Envoy 服务调用。
部署上,通过 Kubernetes Service istio-pilot 对外提供服务,可以配置为 1 到多个副本。Istio 当前支持多集群模式,istio-pilot 不仅可以负责当前 Istio 集群的 XDS 配置管理,同时可以支持其他 Istio 集群以远程的方式和 istio-pilot 进行交互。
sidecar-injector
sidecar-injector 负责数据平面代理 Sidecar 的注入,通过 Sidecar 的透明注入支持,可以减少 Istio 部署和运维上的复杂度,对 Istio 的大规模开展有着非常重要的意义。
istio-telemetry 和 istio-policy
istio-telemetry 和 istio-policy 均属于 Mixer 服务,分别负责遥测统计和策略控制工作。这两个服务的代码和二进制文件完全一样,之所以分开部署,是因为遥测统计和策略控制是两个差异很大的功能特性,分开部署方便采用不同的配置和管控方式,也可通过部署隔离避免相互之间的影响。
istio-catedal
istio-catedal 属于通信安全,负责安全证书的管理和发放,istio-catedal 并不是唯一的证书管理方式,Istio 当前支持 Catedal、Vault 和 Google 等多种证书管理方式,Catedal 是当前默认的证书管理方式。当采用其他证书管理方式时,不需要部署 istio-catedal,比如使用 Vault 时就不再需要部署 istio-catedal,相反则需要使用 Vault 对应的证书服务器。
istio-galley
istio-galley 是 Istio1.1 新引入的配置管理框架,在引入 Galley 之前,Istio 控制平面的各个组件需要分别对 Kubernetes 资源进行管理,包括资源的配置验证,监控资源配置变化,并针对配置变更采取相应的处理等。
为了减少 Istio 不同组件配置管理方面的重复工作,Istio 将配置管理相关的工作抽象出一个单独的组件 Galley,后续其他 Istio 组件不再需要单独和各种平台上的资源直接打交道,而是使用简易的接口和 Galley 进行交互,由 Galley 负责配置验证、配置变更管理、配置源管理、多平台适配等工作。
版权声明: 本文为 InfoQ 作者【阿泽🧸】的原创文章。
原文链接:【http://xie.infoq.cn/article/037880aa6a357444478cfbe8d】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论