首页 > 其他分享 >Istio基础概念

Istio基础概念

时间:2022-11-22 13:34:01浏览次数:44  
标签:服务 基础 Envoy Istio 网格 概念 API Sidecar

各类服务网格的实现在特性上重叠性颇高,他们几乎都具有下列功能

  流量治理

    对哪些流量进行治理

    动态路由:条件式路由,基于权重的流量分发,流量镜像

    韧性:超时 重试 断路器

    策略:访问控制

    测试:故障注入

  安全

    加密:mTLS,证书管理,CA

    严格的身份标识机制

    认证和授权

  可观测性

    指标监控

    分布式链路跟踪

    流量监控

  网格

    运行在kubernetes上

    多集群    

Istio是什么

  Istio是Envoy Data Plance的控制平面实现之一

  Istio是一个开源的独立服务网格,可以用户成功运行分布式微服务架构提供所需的基础设施

 

控制平面主要有三个组件

  Pilot:控制平台核心组件

    管理和配置部署在Istio服务网格中所有的Envoy代理实例

    为Envoy Sidecar提供服务发现、只能撸友的流量管理功能(例如,A/B测试、金丝雀推出等)和弹性(超时、重试、断路器等)

  Citadel

    身份和凭据管理等安全相关的功能,实现强大的服务到服务和最终用户身份验证

  Mixer:遥测和策略

    通过内部插件借口扩展支持第三方组件

    插件的修改或更新,需要重新部署Mixer

  Galley

    Pilot中适配底层平台的功能独立成的组件

    是Istio的配置验证、摄取、处理和分发组件

    负责将其余的Istio组件与从底层平台(例如kubernetes)获取用户配置的细节隔离开来,从而将Pilot与底层平台进行解耦

  Istiod:1.5新增,将Polot、Gitadel、Galley和Sidecar Injector整合为一个单体应用istiod

    Istiod充当控制平面,将配置分发到所有Sidecar代理和网管

    他能够为支持网格的应用实现智能化的负载均衡机制,且相关流量绕过了kube-proxy

 

数据平面Envoy

  基于sidecar模式同网格中的每个服务实例一同部署

  拦截服务流量,强制执行控制平面中定义的策略,并收集要测数据。

Pilot功能简介

  Pilot管理和配置部署在Istio服务网格中的所有Envoy代理实例,是Istio控制平面的核心组件

  他主要由Platform Adapter、Abstract Model、Envoy API(xDS)和Rules API四个组件构成;

    平台适配器:负责适配底层平台,并完成从平台特有的服务模型到Istio服务模型的转换;

    抽象聚合层:聚合底层不同平台的服务和配置规则并对上提供统一的接口,从而解耦Envoy API和底层平台;

    Envoy API:Pilot通过xDS服务器提供服务发现接口xDS API,而xDS服务器接口并维护Envoy代理的链接,并给予Envoy订阅的资源名称进行配置分发;

    Rules API:高级流量管理规则的API接口,用户通过该API配置流量管理规则并由其转换为低级配置,而后通过discovery API分发到Envoy实例;

Pilot功能:

  服务发现

  配置Sidecar

  流量治理

    A/B testing:Ab测试

    failover:故障转移

    Fault Injection:故障注入

    Canary rollout:金丝雀发布

    Circuit Breaker:断路器

    Retries:重试

    Timeouts:超时

Citadel功能简介

  Citadel是Istio控制平面的核心安全组件,负责服务的私钥和梳子证书管理,用于提供自动生成、分发、轮换及撤销私钥和数据证书的功能;

    kubernetes平台上,Citadel的传统工作方式是基于Secret资源将证书私钥注入到Sidecar容器中;

    非容器环境中,首先通过系统上运行的Node Agent生成CSR,而后向Citadel发起证书签署请求,并将接收到的证书和私钥存储于本地文件系统提供给Envoy使用;

    Istio1.1版本起支持基于SDS API动态配置Secret给Envoy;

  另外出了Istio的Citadel之外,还有Vault等其他证书和私钥管理系统可用;

  Istio的安全模型需要多个组件协同工作

    Citadel管理私钥和数字证书

    Sidecar和perimeter proxies执行服务间的安全通信

    Pilot向代理分发认证策略和名称信息

 

Galley功能简介

  Galley负责向Istio控制平面的其它组件提供支撑功能,它核验进入网格的配置信息的格式和内 容的正确性,并将这些配置信息提供给Pilot和Mixer;

    Galley从底层平台接收配置信息并完成分发,从而将其它组件同底层平台解耦

    MCP(Mesh Configuration Protocol)是Istio网格中用于分发配置的传输协议 

      基于gRPC

      与xDS协议类似,一次完整的MCP请求/响应流程包括请求、响应和ACK/NACK;

        MeshConfigRequest

        MeshConfigResponse

         以MeshConfigRequest形式发送的ACK或NACK

      目前尚不支持增量配置分发机制;

从实现上来说,Galley通过Kubernetes的动态Admission Controller(Admission Hook)完成组件 配置的校验;

  在Mutation阶段,实现对请求内容的修改,利用为服务注入Sidecar;

  在Validation阶段实现对请求内容进行校验,Galley对配置的校验即发生在此阶段;

 

Istio Gateway用于将Istio功能(例如,监控和路由规则)应用于进入服务网格的流量

  通过将Envoy代理部署在服务之前,运维人员可以针对面向用户的服务进行A/B测试、金丝雀部署等

  Istio Gateway不同于Kubernetes Ingress

  类似地,有必要时,也可以部署专用的Egress Gateway,运维人员可以为这些服务添加超时控制、重 试、断路器等功能,同时还能从服务连接中获取各种细节指标

程序文件istio-ingressgateway和istio-egressgateway

Istio Sidecar Injector

  Istio服务网格中的每个Pod都必须伴随一个Istio兼容的Sidecar一同运行,常用的将Sidecar注入 Pod中的方法有两种

    手工注入:使用istioctl客户端工具进行注入

    自动注入:使用Istio sidecar injector自动完成注入过程

      利用Kubernets webhook实现sidecar的自动注入

      创建Pod时自动注入过程发生在Admission Controller的Mutation阶段,根据自动注入配置,kube-apiserver拦截到Pod创建请 求时调用自动注入服务istio-sidecar-injector生                    成Sidecar容器的描述并将其插入到Pod的配置清单中

总结

Istio服务网格:

  控制平面:

    istiod:Pilot,galley,citedal,istio sidecar injector

    Control Plane API

  数据平面:

    工作负载实例:注入Sidecar Envoy

    网关:Istio-IngressGateway,Istio-EngressGateway

    Data Plane API

  附件:

    可观测性:

      Grafana,prometheus

      Jaeger/Zipkin

    WebUI:Kiali

Istio相对于kubernetes是什么?

  特点:

    声明式API,各种资源类型

    控制器,Controller Manager

  就是Kubernetes的系统扩展:增强了Kubernetes平台的功能

    CRD:扩充了Kubernetes的资源类型,这些资源类型用于承载Istio的目标功能

    Operator:Istiod,其实就是CRD定义资源类型的控制器

    生效边界:仅是那些具有数据平面Sidecar的服务

      Sidecar的自动注入功能:以namespace为边界

        在namespace上添加特定的label

  注意:

    Istio目标并非用于管理任何可运行于Kubernetes的应用

    核心功能:治理微服务

 

基于Kubernetes CRD描述规则

  Istio的所有路由规则和控制策略都基于Kubernetes CRD实现,于是,其各种配置策略的定义也 都保存于kube-apiserver后端的存储etcd中;

    这意味着kube-apiserver也就是Istio的APIServer 

    Galley负责从kube-apiserver加载配置并进行分发

  Istio提供了许多的CRD,它们隶属于以下几个功能群组
    Network(networking.istio.io):流量治理,主要包括VirtualService、DestinationRule、Gateway、ServiceEntry、Sidecar、EnvoyFilter、WorkloadEntry 和WorkloadGroup等8个CR;

    Security(security.istio.io):网格安全,主要包括AuthorizationPolicy、 PeerAuthentication和 RequestAuthentication等3个CR;

    Telemetry(telemetry.istio.io):网格遥测,目前仅包括Telemetry这一个CR;

    Extensions(extensions.istio.io):扩展机制,目前仅包括WasmPlugin这一个CR;
    IstioOperator(install.istio.io):IstioOperator,目前包括的一个CR也是IstioOperator;

 

Istio的功能及其相关实现组件

  Istio提供了如下开箱即用(Out Of The Box)的功能

    Service Discovery / Load Balancing(服务发现、负载均衡)              →ServicEntry + DestinationRule

    Secure service-to-service communication (mTLS) (通信加密)              →DestinationRule 

    Traffic control / shaping / shifting (流量控制、流量整形、流量迁移)          →VirtualService

    Policy / Intention based access control (策略、内部访问控制)                →AuthorizationPolicy

    Traffic metric collection  (指标收集)                                 →(built in)

  以下功能不能做到OOTB(开箱即用),在一定程度上,依赖用户自行定义

    Cross-cluster Networking               → EnvoyFilter + ServiceEntry + Gateway 

    External Auth / Rate Limiting                →EnvoyFilter 

    Traffic Failover                      →EnvoyFilter

    WAMS Filters                      →EnvoyFilter

    Access Logging / many unexposed Envoy features   →EnvoyFilter + ?

 

标签:服务,基础,Envoy,Istio,网格,概念,API,Sidecar
From: https://www.cnblogs.com/zyyang1993/p/16911998.html

相关文章

  • docker基础
    推荐教程:https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0&vd_source=642a988fd50073c667fec7829ca79103Docker技术入门与实战-第3版.pdfdokecr为......
  • React 学习笔记之一 - ES6 基础
    1.1let及const1.1.1let命令用var声明变量有变量提升的情况。1console.log(a);2vara=1; 如果没有第二行的声明,那么会看到“aisnotdefined......
  • [Python] 多线程 概念 使用
    python多线程1.线程的概念线程是CPU分配资源的基本单位。当一程序开始运行,这个程序就变成了一个进程,而一个进程相当于一个或者多个线程。当没有多线程编程时,一个进程......
  • Java基础
    Java基础环境准备安装JDK配置环境变量安装开发工具(IDEA)IDEAIDE(集成开发环境,是用于提供程序开发环境的应用程序)IDEA,开发Java代码WebStorm,开发前端代码......
  • day05_狂神说java基础_流程控制
    d05Java流程控制(p33-p44)1.用户交互Scanner之前的基本语法中没有涉及到程序和人的交互,java.util.Scanner是Java5提供的工具类,可以通过Scanner类获取用户的输入。......
  • 机器学习基础(4)—— 模型选择之评估方法
    参考:西瓜书第二章李航《统计学习方法(第二版)》第一章现实任务中,往往有多种学习方法可供选择,对于同一个方法,使用不同的参数配置,也可以产生不同的模型。选择哪个模型(算法)、......
  • OpenGL(1) ->概念&介绍
    文章目录​​一、计算机图形系统​​​​二、相关概念​​​​1、分辨率​​​​2、屏幕坐标系​​​​三、OpenGL图形软件包​​​​1、简介​​​​2、四种变换​​​​......
  • typescript 基础数据类型
    typescript入门介绍开始阶段推荐使用线上[Playground]https://www.typescriptlang.org/play基础数据类型布尔值letisDone:boolean=falselethasDone:boolean......
  • Typescript ----基础类型
    typescript入门介绍开始阶段推荐使用线上[Playground]https://www.typescriptlang.org/play基础数据类型布尔值letisDone:boolean=falselethasDone:boolean......
  • 前端 堆、栈 概念和区别
    1.概念栈:先进后出,由操作系统自动分配释放,存放函数的参数值、局部变量值等。其操作方式类似于数据结构中的栈;是一种运算受限的线性表;堆:先进先出,动态分配的空间一......