第三章 Istio基本介绍

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

    

  

  

posted @ 2019-01-29 21:40  刘大飞  阅读(1529)  评论(0编辑  收藏  举报