Istio 核心组件及其功能

总体来说分为两部分:控制面和数据面:

  • 数据面称为”Sidecar”,即”边车”,”Sidecar”通过注入的方式和业务容器共存一个 Pod 中,会劫持应用容器的流量,并接受控制面组件的控制,
    同时会向控制面输出日志、跟踪和监控数据。
  • 控制面是 Istio 的核心,管理 Istio 的所有功能。

Pilot

Pilot 是 Istio 的主要控制点,Istio 的流量就是由 Pilot 管理的(具体执行是由 “Sidecar” 完成的)

在整个系统中,Pilot 完成以下任务:

  • 从 Kubernets 或者其他平台的注册中心获取服务信息,完成服务发现的过程;
  • 读取 Istio 的各项控制配置,进行转换后,将其发给数据面实施。

Pilot 的配置内容会被转换为数据面能够理解的格式,下发给数据面的 Sidecar ,Sidecar 根据指令,将路由、服务、监听、集群等定义信息转化为本地配置,完成控制行为的落地;

个人理解,Pilot 的作用是当我们执行 istioctl 的时候,Pilot 负责解析给数据面能理解的格式落地。

Mixer

Mixer 的职责主要有两个:预检和汇报。
Mixer 的简单工作流程:

  • 用户将 Mixer 配置发送到 Kubernetes 中。
  • Mixer 通过对 Kubernetes 资源的监听,获取配置变化。
  • 网格中的服务在每次调用之前,都向 Mixer 发出预检请求,查看调用是否允许执行,在每次调用后,发出报告信息和跟踪数据。

Mixer 中有多种组件,这些组件一起完成各种功能。

Citadel

管理CA证书。

Sidecar(Envoy)

Sidecar 是 Istio 的数据面,负责控制面对网格控制的实际执行。
Istio 中默认 Sidecar 是由 Envoy 派生出来的,在理论上,只要支持 Envoy 的 xDS协议,其他类似的反向代理软件就可以替代 Envoy 来担任这一角色。
在 Istio 中默认实现中,Istio 利用 Istio-init 初始化容器的 iptables 指令,对所有 Pod 的流量进行劫持,从而接管所有 Pod 的通信过程,如此一来,就取得了通信的控制权,控制面的控制目的最终得以实现。

Sidecar 的实现原理是基于同一个 POD 的多个容器之间,网络栈是共享的,所以在 Sidecar 加入之前,原有的源容器->目的容器直接的通讯方式,变成了

源容器->Sidecar->Sidecar->目的容器

这样一来,就实现了控制面要求的对通讯面的控制和观察。
第一个 Sidecar 代表流量出,第二个 Sidecar 代表流量入的管理,所以可以形象的认为是三轮车的“边车”

参考资料:《深入浅出Istio:Service Mesh 快速入门与实践》- 崔秀龙