3.1 Istio的核心组件及其功能
Istio总体分两部分:控制面和数据面。
数据面(sidecar):sidecar通过注入的方式和业务容器共存于一个pod,会劫持业务容器的流量,并接受控制面组件的控制,同时会向控制面输出日志、跟踪以及监控数据。
控制面:Istio的核心,管理Istio的所有功能。
3.1.1 Pilot
Pilot是Istio的主要控制点,Istio的流量由Pilot管理。
pilot完成以下任务:
- 从K8s或其他平台的注册中心获取服务信息,完成服务发现过程。
- 读取Istio的各项控制配置,在进行转换之后,将其发给数据面进行实施。
pilot的配置内容被转换为数据面能理解的格式,下发给Sidecar, Sidecar根据pilot指令,将路由、服务、监听、集群等信息转换为本地配置,完成控制行为落地。
3.1.2 Mixer
主要职责两个:预检和汇报。
Mixer的简单工作流程如下:
(1)用户将Mixer配置发送到K8s中。
(2)Mixer通过对K8s资源的监听,获知配置变化。
(3)网格中的服务在每次调用之前,都向Mixer发出预检请求,查看调用是否允许执行。每次调用之后,都发出报告信息,向Mixer汇报在调用过程中产生的
监控跟踪数据。
(4)Mixer中包含多个被称为Adapter的组件,这些组件用来处理在Mixer中接收的预检和报告数据,从而完成Mixer的各种功能。
3.1.3 Citadel
用于证书管理的,在集群中启用了服务之间的加密后,Citadel负责为集群中各个服务在统一CA的条件下生成证书,并下发给各个服务中的Sidecar,服务之间 的TLS就依赖这些证书完成校验过程。
3.1.4 Sidecar(Envoy)
Sidecar就是Istio中的数据面,负责控制面对网络控制的实际执行。
Istio中的默认Sidecar是由Envoy派生出来的,理论上,只要支持Envoyd xDS协议,其他类似反向代理软件就都可以代替Envoy来担当这一角色。
Istio的默认实现中,Istio利用istio-init初始化容器中的iptables指令,对所在Pod的流量进行劫持,从而接管Pod中应用的通信过程,如此一来,
就获得通信的控制权,控制面的控制目的最终得以实现。
K8s中,同一个Pod的多个容器之间,网络栈是共享的,这是sidecar实现的基础。
3.2 核心配置对象
Istio在安装过程中会进行CRD的初始化,在K8s集群中注册一系列的CRD。CRD在注册之后,会建立一些基础对象,完成Istio的初始化设置。
用户利用Istio控制微服务通信,是通过向K8s提交CRD资源的方式完成的。Istio中的资源分为三组进行管理:
3.2.1 networking.istio.io
这一系列对象是使用频率最高的。流量管理是这一组对象完成的。
virtualService是一个控制中心,功能是:定义一组组件,将符合该条件的流量按照在对象中配置的对应策略进行管理,最后将路由转到匹配的目标。
应用场景:
(1)来自服务A版本1的服务,要访问服务B,则将路由指向服务B的版本2.
(2)如果HTTP请求header中包含 “canary=true”, 则把服务目标指向服务Y的版本3,否则发给服务Y的版本2.
(3)为从服务M到服务N的所有访问都加入延迟,以测试在网络状况不佳时的表现。
下面列出流量管理的关键对象:
1 Gateway:
2 VirtualService
3 TCP/TLS/HTTP Route
4 DestinationWeight
5 Destination
3.2.2 config.istio.io
其中的对象用于为Mixer组件提供配置,这个功能由大量的适配器完成的。
Mixer对数据的处理过程:
1 Rule: 是Mixer的入口,包含一个match成员和一个逻辑表达式。只有符合表达式的判断才会交给Acton处理。逻辑表达式中的变量被称为attribute(属性),
其中的内容来自Envoy提交的数据。
2 Action: 将符合入口标准的数据,在用什么方式加工后,交给哪个适配器进行处理。Action包含两个成员对象:一个是Instance,使用Template对接收到数据
进行处理;一个是Handler,代表一个适配器的实例,用于接收处理后的数据。
3 Instance:为进入的数据选择一个模板,并在数据中抽取某些字段作为模板的参数,传输给模板进行处理。
4 Adapter:是一个行为规范。
5 Template: 对接受的数据进行再加工。
6 Handler: 对Adapter进行实例化。
3.2.3 authentication.istio.io
用于定义认证策略。在网络级别、命名空间级别以及服务级别都提供了认证策略的要求。
1 policy: 指定服务一级的认证策略,
2 MeshPolicy:
3.2.4 rbac.istio.io