本文主要是对Istio Prelim 1.0(https://preliminary.istio.io/docs/)的翻译

Istio:一种开放式平台,用于连接,管理和保护微服务。 Istio提供了一种简单的方法,通过负载均衡,服务到服务认证,监控等创建已部署服务的网络,而无需对服务代码进行任何更改。您可以通过在整个环境中部署一个特殊的边车代理()来(sidecar proxy)添加Istio支持服务,该代理截取微服务之间的所有网络通信,使用Istio的控制平面功能进行配置和管理。

Istio目前支持在Kubernetes上部署服务,以及在Consul或Eureka注册的服务以及在单个VM上运行的服务。它负责所有服务之间的通信和协调,就像网络路由软件为 TCP/IP 流量所做的一样。

那么,Istio 是如何融入Kubernetes 生态系统的?Kubernetes 充当数据层,Istio 充当控制层。Kubernetes 承载应用程序流量、处理容器编排、部署和扩展。Istio 路由应用程序流量,处理策略执行,流量管理和负载均衡。它还处理遥测,如指标、日志和跟踪。Istio 是基于容器的基础设施中负责保护微服务和报告的部分。

为什么要用Istio?

Istio解决了开发者和运营商在面对单一应用程序向分布式微服务架构过渡时面临的许多挑战,服务网格(service mesh)通常用于描述构成这些应用程序的微服务网络以及它们之间的交互。随着服务网格的大小和复杂程度不断增加,可能会变得难以理解和管理。它的要求可以包括发现,负载平衡,故障恢复,度量和监控,以及更复杂的操作要求,如A / B测试,金丝雀版本,速率限制,访问控制和端到端身份验证。

Istio提供了一个完整的解决方案,通过对整个服务网格提供行为分析和操作控制来满足微服务应用程序的各种需求。 它在整个服务网络中统一提供许多关键功能:

  • Traffic Management:控制服务之间的流量和API调用的流向,使得调用更可靠,并使网络在恶劣情况下更加健壮。

  • Service Identity and Security:在网格中提供具有可验证身份的服务,并提供保护服务流量的能力,因为流量通过不同程度的可信性网络流动。

  • Policy Enforcement:将组织策略应用于服务之间的交互,确保访问策略得到执行,资源在消费者之间公平分配。 通过配置网格来进行策略更改,而不是通过更改应用程序代码

  • Telemetry:了解服务之间的依赖关系,以及它们之间流量的本质和流向,从而提供快速识别问题的能力。

架构

Istio服务网格逻辑上分为数据平面和控制平面

  • 数据层由一系列智能代理(Envoy)组成,这些智能代理部署为边车,用于调解和控制微服务之间的所有网络通信

  • 控制层负责管理和配置代理以路由流量,并配置mixer以执行策略并收集telemetry。

Istio 为每项服务运行一个 Envoy 边车代理。Envoy 代理通过 GRPC 调用将入站请求转发至 Istio Mixer 服务。然后,Mixer 应用流量管理规则来聚合遥测元素。Mixer 是 Istio 的大脑。运维人员可以通过编写 YAML 文件来指定 Envoy 如何重定向流量,还可以指定将哪些遥测元素推送到监控系统和观测系统。我们可以在运行时根据具体情况应用相应的规则,无需重新启动任何 Istio 组件。

下图显示了组成每个平面的不同组件:

Envoy

Istio使用Envoy代理的扩展版本,Envoy是以C ++开发的高性能代理,用于调解服务网格中所有服务的所有入站和出站流量。Envoy的许多内置功能被istio发扬光大,例如动态服务发现,负载均衡,TLS终止,HTTP/2&gRPC代理,熔断器,健康检查,基于百分比流量拆分的分段推出,故障注入和丰富指标。

Envoy被部署为sidecar,和对应服务在同一个Kubernetes pod中。这允许Istio将大量关于流量行为的信号作为属性提取出来,而这些属性又可以在Mixer中用于执行策略决策,并发送给监控系统,以提供整个网格行为的信息。Sidecar代理模型还可以将Istio的功能添加到现有部署中,而无需重新构建或重写代码

Mixer

Mixer是一个独立于平台的组件,负责在整个服务网格中实施访问控制和使用策略,并收集来自Envoy代理和其他服务的遥测数据。代理提取请求级别属性,将其发送到mixer进行评估。 Mixer包含灵活的插件模型,可以与各种主机环境和基础设施后端进行交互,从这些细节中抽象出Envoy代理和Istio管理的服务。

Mixer提供三个核心功能:

  • 前置条件检查(Precondition Checking):某一服务响应外部请求前,通过Envoy向Mixer发送Check请求,检查该请求是否满足一定的前提条件,包括白名单检查、ACL检查等。

  • 配额管理(Quota Management):当多个请求发生资源竞争时,通过配额管理机制可以实现对资源的有效管理。

  • 遥测报告上报(Telemetry Reporting):该服务处理完请求后,通过Envoy向Mixer上报日志、监控等数据。

Mixer适配器工作流程

  • Mixer server启动。

  • 初始化adapter worker线程池。

  • 初始化Mixer模板仓库。

  • 初始化adapter builder表。

  • 初始化runtime实例。

  • 注册并启动gRPC server。

  • 某一服务外部请求被envoy拦截,envoy根据请求生成指定的attributes,attributes作为参数之一向Mixer发起Check rpc请求。

  • Mixer 进行前置条件检查和配额检查,调用相应的adapter做处理,并返回相应结果。

  • Envoy分析结果,决定是否执行请求或拒绝请求。若可以执行请求则执行请求。请求完成后再向Mixer gRPC服务发起Report rpc请求,上报遥测数据。

  • Mixer后端的adapter基于遥测数据做进一步处理。

Pilot

Pilot为Envoy sidecars提供服务发现,为智能路由(例如A / B测试,金丝雀部署等)和弹性(超时,重试,断路器等)提供流量管理功能。它将控制流量行为的高级路由规则转换为特定于Envoy的配置,并在运行时将它们传播到边车。 Pilot将平台特定的服务发现机制抽象化并将其合成为符合Envoy数据平面API的任何边车可以使用的标准格式。这种松散耦合允许Istio在多个环境(例如Kubernetes,Consul / Nomad)上运行,同时保持用于流量管理的相同操作员界面。

Citadel

Citadel提供强大的服务到服务和最终用户身份验证,内置身份和凭证管理。它可用于升级服务网格中未加密的流量,并为运营商提供基于服务标识而不是网络控制强制执行策略的能力。从0.5版开始,Istio支持基于角色的访问控制,以控制谁可以访问您的服务。

什么是Istio的更多相关文章

  1. istio入门(01)istio的优势在哪里?

    Istio能做什么?Istio 试图解决微服务实施后面临的问题.Istio 提供了一个完整的解决方案,对整个服务网格行为洞察和操作控制,以满足微服务应用程序的多样化需求. Istio在服务网络中提供了 ...

  2. istio入门(00)istio的学习资源

    官网:https://istio.io/ 理论知识: http://www.uml.org.cn/wfw/201710131.asp 环境搭建: http://dockone.io/article/2 ...

  3. istio入门(04)istio的helloworld-部署构建

    参考链接: https://zhuanlan.zhihu.com/p/27512075 安装Istio目前仅支持Kubernetes,在部署Istio之前需要先部署好Kubernetes集群并配置好k ...

  4. istio入门(03)istio的helloworld-场景说明

    一.原生应用 四个微服务: python微服务:一个deployment(deployment含有一个pod,pod内含有一个容器) java微服务:三个deployment(deployment含有 ...

  5. istio入门(02)istio的架构和概念

    Istio从逻辑上可以分为数据平面和控制平面: 数据平面主要由一系列的智能代理(Envoy)组成,管理微服务之间的网络通信 控制平面负责管理和配置这些智能代理,并动态执行策略 主要由以下组件构成 En ...

  6. istio收集Metrics和日志信息

    1.切换到istio根目录 cd /data/istio/istio-0.7.1 2.安装prometheus kubectl apply -f install/kubernetes/addons/p ...

  7. istio添加Fluentd

    这个教程展示了istio如何自定义日志格式,并且将其发送给fluent.Fluentd 是一个开源的日志收集器,支持多种数据输出并且有一个可插拔架构.Elasticsearch是一个流行的后端日志记录 ...

  8. Istio

    什么是Istio Istio是Service Mesh(服务网格)的主流实现方案.该方案降低了与微服务架构相关的复杂性,并提供了负载均衡.服务发现.流量管理.断路器.监控.故障注入和智能路由等功能特性 ...

  9. istio环境搭建for macbook

    首先需要搭建docker+k8s环境,如何搭建这里就不再赘述,可以自行搜索. 打开命令行,运行命令: curl -L https://git.io/getLatestIstio | ISTIO_VER ...

  10. Istio 是什么?

    使用云平台可以为组织提供丰富的好处.然而,不可否认的是,采用云可能会给 DevOps 团队带来压力.开发人员必须使用微服务以满足应用的可移植性,同时运营商管理了极其庞大的混合和多云部署.Istio 允 ...

随机推荐

  1. [转]Linq 如何实现 in 与 not in

    本文转自:http://blog.csdn.net/zhangyumei/article/details/5620363 接触 LINQ 也有很长的一段时间了,有些在 SQL 语句中用的很顺手的东西在 ...

  2. P3817 小A的糖果

    题目描述 小A有N个糖果盒,第i个盒中有a[i]颗糖果. 小A每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中加起来都只有x颗或以下的糖果,至少得吃掉几颗糖. 输入输出格式 输入格 ...

  3. Spring中@Value的使用

  4. SQLite – GROUP BY

    SQLite - GROUP BY SQLite GROUP BY子句中使用与SELECT语句的合作安排相同的数据组. 在GROUP BY子句之前一个SELECT语句的WHERE子句,先于ORDER ...

  5. Chrome浏览器安装React developer tools

    1. 到 https://github.com/facebook/react-devtools 下载 react-devtools 2. 进入 react-devtools 目录 运行命令  npm ...

  6. 任务五:零基础HTML及CSS编码(二)

    面向人群: 零基础或初学者 难度: 简单 重要说明 百度前端技术学院的课程任务是由百度前端工程师专为对前端不同掌握程度的同学设计.我们尽力保证课程内容的质量以及学习难度的合理性,但即使如此,真正决定课 ...

  7. Yii1 用commandBuilder方法往数据表中插入多条记录

    $builder = Yii::app()->db->schema->commandBuilder; // 创建builder对象 $command = $builder->c ...

  8. 洛谷 P1708 天然气井 题解

    https://www.luogu.org/problemnew/show/P1708 这道题还是比较好的. 读完题目我们先想想如何计算某个天然气井($x_1,y_1$)和中转站($a_1,b_1$) ...

  9. Ubuntu 开机出现 "Your system is running in low-graphics mode"

    Ubuntu 开机出现 "Your system is running in low-graphics mode" 可能是权限问题 按网上的方法发现sudo命令无法使用,且系统变为 ...

  10. 使用SimpleDateFormat 将毫秒转换成时分秒 格式:HH:mm:ss

    public static String dateFormatFromMilliSecond(long seconds) {        //初始化format格式    SimpleDateFor ...