• 第三章 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

        

      

      

  • 相关阅读:
    hdu
    《Linux命令行与shell脚本编程大全》 第十四章 学习笔记
    zoj 3665 Yukari's Birthday(枚举+二分)
    ActiveMQ使用STOMP协议的一个错误问题:Unexpected ACK received for message-id
    Ubuntu下屏幕录像、后期处理不完全攻略
    find-all-numbers-disappeared-in-an-array
    find-right-interval
    non-overlapping-intervals
    cut命令如何截取以空格隔开的字段
    arranging-coins
  • 原文地址:https://www.cnblogs.com/liufei1983/p/10335952.html
Copyright © 2020-2023  润新知