什么是Istio
本文主要是对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的更多相关文章
- istio入门(01)istio的优势在哪里?
Istio能做什么?Istio 试图解决微服务实施后面临的问题.Istio 提供了一个完整的解决方案,对整个服务网格行为洞察和操作控制,以满足微服务应用程序的多样化需求. Istio在服务网络中提供了 ...
- istio入门(00)istio的学习资源
官网:https://istio.io/ 理论知识: http://www.uml.org.cn/wfw/201710131.asp 环境搭建: http://dockone.io/article/2 ...
- istio入门(04)istio的helloworld-部署构建
参考链接: https://zhuanlan.zhihu.com/p/27512075 安装Istio目前仅支持Kubernetes,在部署Istio之前需要先部署好Kubernetes集群并配置好k ...
- istio入门(03)istio的helloworld-场景说明
一.原生应用 四个微服务: python微服务:一个deployment(deployment含有一个pod,pod内含有一个容器) java微服务:三个deployment(deployment含有 ...
- istio入门(02)istio的架构和概念
Istio从逻辑上可以分为数据平面和控制平面: 数据平面主要由一系列的智能代理(Envoy)组成,管理微服务之间的网络通信 控制平面负责管理和配置这些智能代理,并动态执行策略 主要由以下组件构成 En ...
- istio收集Metrics和日志信息
1.切换到istio根目录 cd /data/istio/istio-0.7.1 2.安装prometheus kubectl apply -f install/kubernetes/addons/p ...
- istio添加Fluentd
这个教程展示了istio如何自定义日志格式,并且将其发送给fluent.Fluentd 是一个开源的日志收集器,支持多种数据输出并且有一个可插拔架构.Elasticsearch是一个流行的后端日志记录 ...
- Istio
什么是Istio Istio是Service Mesh(服务网格)的主流实现方案.该方案降低了与微服务架构相关的复杂性,并提供了负载均衡.服务发现.流量管理.断路器.监控.故障注入和智能路由等功能特性 ...
- istio环境搭建for macbook
首先需要搭建docker+k8s环境,如何搭建这里就不再赘述,可以自行搜索. 打开命令行,运行命令: curl -L https://git.io/getLatestIstio | ISTIO_VER ...
- Istio 是什么?
使用云平台可以为组织提供丰富的好处.然而,不可否认的是,采用云可能会给 DevOps 团队带来压力.开发人员必须使用微服务以满足应用的可移植性,同时运营商管理了极其庞大的混合和多云部署.Istio 允 ...
随机推荐
- jmeter(十八)属性和变量
一.Jmeter中的属性: 1.JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性 2.JMeter属性在测试脚本的任何地方都是可见的(全局),通常 ...
- 机器学习概念之特征选择(Feature selection)
不多说,直接上干货! .
- iOS之tableView性能优化/tableView滑动卡顿?
本文围绕以下几点展开tableView性能优化的论述? 1.UITableViewCell重用机制? 2.tableView滑动为什么会卡顿? 3.优化方法? 4.总结 1.UITableViewCe ...
- AJPFX关于java的依赖 关联 聚合的关系解释
依赖: 两个相对独立的系统,当一个系统要构筑另一个系统的实例,或者依赖另一的服务时,这两个就是依赖关系.比如自行车和打气筒之间就是依赖关系.代码表现形式如下: public class A{ ...
- mysqldump 使用详解
基本的使用方法总结: 1 导出所有库 系统命令行 mysqldump -uusername -ppassword --all-databases > all.sql 2 导入所有库 mysql ...
- PHP14 动态图像处理
学习要点 如何使用PHP中的GD库 设计验证码类 PHP图片处理 设计图像图处理类 如何使用PHP中的GD库 在网站上GD库通常用来生成缩略图,或者用来对图片加水印,或者用来生成汉字验证码,或者对网站 ...
- Perl中 qw 是 “quoted Word” 或是 “quoted by whitespace”的简写
Perl中 qw 是 “quoted Word” 或是 “quoted by whitespace”的简写 eg: @strict_pragma = qw ( a b c);
- JAVA中等待所有线程都执行结束(转2)
场景: package com.java4all.mypoint; import java.util.concurrent.CountDownLatch; public class ThreadTes ...
- svn 设置代理
Memory4Young Do Not Repeat Yourself! SVN —— 如何设置代理 如果在使用SVN下载外网的资源时,出现这样的提示:No such host is known. 或 ...
- 169. Majority Element@python
Given an array of size n, find the majority element. The majority element is the element that appear ...