玩转Istio1.7.1服务网格之————为什么使用lstio?最新的1.7.1都有哪些架构的变化?

什么是lstio?

今天聊聊lstio这个感觉高大尚的服务网格到底为啥这么受欢迎?
顺便看看官方1.7.1的版本都解决了哪些bug以及功能稳定性上的提升

看官方如何定义lstio的,它] ( e是这么说的:它是一个完全开源的服务网格,作为透明的一层接] 8 ~入到现有的分布式应用中。它也是一个平台,可以与任何日志、遥测和策$ e b , 3 ] / W A略系统进行集成。lstio多样化的特性让你能够{ q 3 u 4 W H S成功且高效的运行微服务架构,并提供保护、连接和监控微服务的统一方法。

这个定义看起来比较长,我们可以抽取其中比较重要的,比如

1、它依然是一个服务网格产品
2、它就是拥有服务网格的基本特C m T @ _ ] O性,也就是对应用层是透明的
3、它 B g z e是为微服务架构来服务的
4、它的核心功能,可以连接、控制、保护、观测微服务- ~ v 9 {

它们为什么要用lstio来命名呢,我找到答案,这个词它并不是一个英语单词,而是它是源于希腊语,它的意思是扬帆起航,可以看出它的标志是一个帆,那么由此你可能会e a W ` X j 8 Z联想起另外一个很著名的产品kubernetes,这个词I ) K w n % 3d { 2 x f U #实也起源于希腊语,它的意思跟它的logo是一样的,就是舵手的意思,gs - Z Foogle为什么用lstio来给这个产品命名,其实是非常有深意的,它的意思你不仅有kubery @ V E Ynetes这个舵,还有有lsY J 9 bitio的帆,由它们一起驾驶着你的云| ] D原生应用,扬帆起航,驶向彼岸,说的比较方言了。。。

另外lstio还有一个非常重要的特r % U A b t性,它被称作是第二代的Service Mesh,在原有的数据平面的基础上,增加了控制平面,它为现O ~ 8 9 g 3 (代的Service Mes0 N i 4 A 8 x W Dh的产品定义了一个新的形态

lstio为什么一推出就变得大红大紫?

17年的时候你可能不知道lstio是什么,现在可以说是头号网红了,红的原因也可想而知,
我们可以看它的版本历史周期
1、它的发布时间(20170501)发布0.1版本

它是在17年的5月份发布了0.1版本,那么第一个service mesh产品叫LinkerQ g c bd,你们也许早就听说过,它是17年4月份发布的,那么lstio在紧接着Linkerd发布之后,立刻就发布了0.1版本,你想它的意图很明显,就是希望能够尽快的阻击Linked稳步的发展,希望让大家都知道有lstio这个产品的产生

2、三巨头光环加身
另外没错人家还有三个巨头e 8 o [ ; V ,加深,可以说是两个巨头分别是,lyft这家1 F I f g 5公司明显是抱大腿的
google、IBM、lyft
玩转Istio1.7.1服务网格之————为什么使用lstio?最新的1.7.1都有哪些架构的变化?

那么这三家公司为istio作为背书,u p K 1不仅他们的研发资源,研发投入以及社区影响力。都是linkerd这样的初创公司无法比拟的,因此一经推出就拥有了大量的粉丝,有这样的光环可想而知

3、属于第二代的service mesh产品
毋庸置疑第二代要比第一代有碾压优势
4、envo. S o L l yy的加入g ] x c b$ L H F jistio如虎添翼

本来envoy和linkerd它都是一个基于数据平面的产品,没有控制平面
istio本身也没有开发自己的数据平面,所以它直接联合了lyft公司,直接使用envoy作为自己默认的数据s j i 8 n平面,envoy本身就经历了一年多的开发,非常的稳定性能也0 + M W z O @非常的可靠,它对linkerd还是有比较大b W ` U k 9 }的优势的,envoy的加入直接让istio拥有了一个可以和linkerd抗衡的数据平f O | + ? # m 7面,省去了自己的开发的麻烦,对于lyft公司其实也有一个很大的好处,可以抱着IBM和google着两条大粗腿,为自己的产品保驾护航,反过来这两家公司也可以不劳而获,直接可以使用envoy6 m w } b %作为自己的数据平面,可以说是一个双赢z 6 n g的策略

5、istio的本身的功能也非常强大
可以在它的发布列表中看到令人眼花缭乱的这样的功能点,同时istio也受到了一些厂商的支a 4 ~ r J &持,包括IBM和google自家的云平台的支持,以及像redhat、还有oracle这样的公司主动站出来支持,由此可见受到了非常` 5 U L 2 / 4 I多的追捧,以上都是它的一些优点,有人认为它们是过度营销,linkerd的创始人也就是buoyant公司的CEO williamMorgan,曾经说过这样的话,目前来说s` - s }ervice mesh有一些处于不幸的状态,有一些产品过度的营销,导致市场超过了技术本身,那我们可以认为williamMoru . - _ | , q 5 ggan这些话是针对istio来说的,毕竟是它最重要的竞争对手,因此它说这句话也无可后非,那么至于是不是过度营销的情况产生。不管怎么样,istio已经站稳了CH l H z C位,对于它自己来说是一个件好事。

为什么使用Istio?

https://istio.io/

学习. 8 p V = Blstio最好的就是官方,看看istio是如何营销自己的
首先它说有两大优势
1、可以轻松的U 9 N ( @构建服务网格
我们其实不要以为service mesh是y H ) z % W一个非常高v m B F N [ f H U深离你很远的技术,你去构建一个mesh是非常容易的。
2、它对应用代码是透明的,不需要去修改自己的应用代码
其实它说的这个两个优势都是service mesh本身的优势
其他的产品也能做到这几点
当然它提供的功能还是非常强大的

而lsy T R T @ -tio的核心功能就是serv6 v U : [ice mesh的功S ^ T 5 y O l能,主要有以下四个方面
玩转Istio1.7.1服务网格之————为什么使用lstio?最新的1.7.1都有哪些架构的变化?

一、流量控制
1、第一点路由我们经常听到的灰度发布,像蓝绿发布、AB测试这些都可以把它归纳到路由这一点B @ = 6 / H
2、第二点就是流量的转移
3N w = [ 9、第三点是为网络增加弹性的能力,比如说超时、重试熔断这样的机制
4、最后它还b ) $ J提供了一些调试网格的一些特性,比如说故障注入,还有流量镜像的功能

二、安全
1、lstio对认证授权两方面,提供了一些安全机制

三、可观察性
1、在这一点lstio是安装比较经典的可观察性三方面提供了功能,分别是指标、日志、追踪

四、策略
像限流黑白名单这样的功能,在1.5的版本里把这个功能去掉了,因为是废弃了一个负责功能的模块叫Mixer,它把一些功能都转移到envoy功能里面去了,后续策略相关功能也会逐步发布出来

说说目前的版本发布,关注2020年的lstio的版本变化的话,你就知道) + { # f tlstio今年可是变化的真快
lstio从17j ( # t u年5月进行发布开始,可以归列为四个重要的版本以及三个阶段

首先看看都有哪四个版本
玩转Istio1.7.1服务网格之————为什么使用lstio?最新的1.7.1都有哪些架构的变化?
第一个版本就是17年5月的: 0 P ( @ 3 V T W0.1版本,像世人宣告lstio产生,第二个版本是18年的7月份发布了1.0版本,号称是可以应用于生产环境,第三个版本是1.1版本,它跟前一个版本间隔了有半年多的时间,原因^ t H b L w 5 % h是进行对底层架构的一个重构,这个版本宣称是企业级可用,最n g Q ] T #后一个版本是前不久2020年8月21号发布的1.7.1版本

而前不久2020年5月21日,情人节那天在1.6版本发布,版本更新了不少功能

比如

1、版本引入了lstiod

这个新模块,通过组合多个服务的功能来减少Istio安装中的组件数量。而在Istio 1.6中,已完成此过渡,并将功能完全) $ H U v q 0 ! :移至Istiod。这使能够删除Citadel,Sideca的injector和Galley来实现单独部署。

2、生命周期的优化

而在命令行工具istioctl可提供更好的诊断信息,更简单的安装命令,甚至提供彩色状态!C s s s V ~

升级Istio的功能也得到了改善。首先,现在支持Istio控制平面本身的金丝雀。这意味着可以在现有版本旁边安装新版本的控制平面,并有选择地让代理使用新版本。当然官方也给出了示例博客
比如使用Canary Control Plane部署安全地去升级Istio
https://istio.io/lv ! j @ ! 7 +ates~ z K X k $ d ( @t/blog/2020/multiple-control-plg o Janes/

还有一条istioctl upgrade命令可以在集群! 7 O | }中执行就地升级(仍然可以控制自己更新代理)

3、可观察性分布式应用程序

许多公司仅采用Istio是为了更好地观察分布式应用程序,因此在这块也进行了投资。比如会看到更多的5 v Z - . A +可配置性,更好地控制跟踪采样率的5 Z X 1 [ ? U A能力c K ] ? w (,并更新Grafana仪表盘q 0 0 F b -

4、WorkloadEntry, - 5 ) T D r [工作负载

https://istio.io/latest/docs/referen{ F 0 | + G 4 )ce/config/networking/workload-entry/
当然这里官方也给出了示例
对于那些将非Kubernetes工作负载添加到网格的人员(例如,部署在VM上的工作负载),新资源比以往任何时候都更容易实现。创建了API,目的是为非Kubernetes工作负载提供表示,它将VM或裸机工作负载提升到与Kubernetes相同的级别| I ` : p l | r,而不仅仅是具有IP地址的端点。m l @ s [ J现在甚至可以定义由Pods和VM支持的服务。
为什么这样有用?比如现在可以将同一服 v 务的部署(VM和Pods)混合在一起使R i 0 y I c e q用,从而提供了一种绝佳的方式,可以将VM工作负载迁移到X z D u p D @ lKubernetes集群,而不会S f V I 6 .中断往返于该集群的流量。

当然小版本都是一些bug的修复& ` M b,这里大家可以去官网查看

1.7.1版本中的变化

当然这次更新的发行版还是继续按照路线图中概述& D ( m U 3的方向导航,从而. _ r ] v =提高了可用性,安全性,可靠性,尤其是在VM(非Kubernetes)用例上进行了改进,这样注意的1 A o是,在虚拟机的层面上增加了改进

以下是此版本的一些要点

安全增[ { 4 ?

1、确保目标规则证书可以通过文件挂载,也可以通过SDS(尤其是自动循环)获得安全秘密分发,这是重要的安全性的一个最佳实践

2、上面的项目适用于网关网格。这是现在可以为 那些TLS出口网关/ MTLS起源于提供客K G 9户端证书的密钥

3、还改进了信任域验证来验证TCP流量。以前只有HTTP流量经过验证。目前新版本资源中现在也支持“信任域验证tru+ 8 q & { ! b ; =stDomainAliases ” “config"

4、如使用ECCh : h X 9 I D C )加密还有助于在提供高安全性的同时提高效率。增加了使用ECC的证书颁发机构进行通信的功能。

5= f o ^ n t ; !、最佳实R - r : I x X践安全性的重要组成部分是不要以超出其所需权限的权限运行进程,例如,防止混淆的副***。因此,z m Q V c | j还将Gao l Z G d m M l ?teway部署修改为默认情况下以非root用户身份运行。

6、如果使用的是基于源主体的安全2 N | F D l { 8 x策略,则Istio Gateway和mTLS可能存在一个错误,这个需要知道

易于使用的改进

1、Istio这样的系统,易于很大一部分人去使用,尤{ C = s , [ ^ Z :其是在帮助发现潜在问题的能力方面。增加了非I M & z p常有用的istioctl分析工具的功能:

2、警告可能不安全的DestinationRule配置
3、警告已弃用的Mixer资源使用情况
4、对于istioctl的频繁用户,自定义默认配置可能有用,而不是每次都键入它。增加了将个人默认值放入主目录的功能。

5、易于阅读的文本比数字更容易-这就是我们拥有DNS的原因!因此还为端口号添加了它。现在可以使用如http的助记符(而不是80)来指定端口类型。

6、另外还添加了 “ istioctl x卸载”以使其变得非常容易。

生产可操作4 % S h (性的改善

鉴于Istio在生产系统中的广泛使用,另外对可用性进行了一些改进:

1、可以将应用程序启动延迟到Sidecar启动。这提高了部署的可靠性,在该部署中,应用程序需要在启动时立即通过其代理访问资源。

2、有时,陈旧的端点可能会使Pilot变得不健康,另外对这块也进行了改善于修复 + : K m L D b w

3p N s ] D ! P、Istio操作是安装Istio一个伟大的方式,因为它可以配置数量。金丝雀控制面的部署也很重要。它们允许对Istio进行超安全的升级。不幸的是,直到现在都不能一起使用它们。

4、Istio-agent公开了指标,因此可以观察它的运行情况。

5、对Prometheus指标管道进行了多项r # G ]改进,以一种更轻松,更有效的方式在那里获取了更多数据。

虚拟机支持,增加了安全性

1、自I! b ` o Z f ? Qstio成立以来,社区一直致力于将! L X c e Q zVM上的工作负载合并到服务网格中的支持。尽管现在有多个版本的用户都在使用它,但在Istio 1.7中,倾向于添加一些改进。请注意,这仍然是Alpha功能。

2、IstioB n $ s I ~ ]最常用的功能之一是其安全功能集。其核心是以短期证书的形式为每个工作负载分配一个强大的身份。在此版本中,确. R F S U m a保网格中VM上运行的工作负载具有安全的自举过程以及自a T 1 P ( J 8动证书轮换。
例如,拥有一个Kubernec : { [ * C /tes集群,该集群托管无状态Web服; x ? H { ] l H &务(前端),该服务提供来自Kubernetes外部VM中运行的有状态数据库(后端)的数据。你仍然希望使用mTLS加密前端对这些后端的访问。通过此更改,可以轻松地做到这一点。此o d U外,这是以“零信任”方式完成的,其中一个前端或后端的妥协不允许模仿或损害其他前端或后端,因为自举和证书轮换遵循着最佳实践。

3、还扩展了istioctl以便能够验证基于VM的工作负载的代理状态% C + 3 - I = r,以前验证仅适用于基于Kubernetes的工作V 1 q负载。

4、最后. 4 0 H,添加了正式的RPM软件包以及已经存在的Debian软件包。这应该使在基于Red Hat的映像上进行安装非常容易。

其他修复

1、删除了一些无效的控制平面指标,并 默认情况下停止安装遥测插件。

2、解决了SNI路由的问题。

Istio现在可以与无头服务更好地协作,因为它将不再将mTLS流量发送到没有sidecar的无头服务上面。

lstio会成为下一个kubernetes的吗?

那么我们想一想目前lstio已经这几年的变化,它会不会成为下一个现象级的kubernetes产品+ $ . F U u,我们可以来分析一下

首先第一点来看看lstio产生了哪些意义?
1、lstio的出现实际上让你重新定义了微服务的开发方式,让你可以轻松的在你的微服务架构中注入service Mesh技术
2、它可以大幅降低微服务应用的开发门槛,让你只关注业务本身
不用考虑如何添加很多网络控制的相关功能或者类库
3、它用统一的运维和开发方式,来简化微服务的开发流程

那么Istio一经推出,实际上是背负了这几家公司的使命,而对于IBM和google的这样的云厂商来说,lstio是一个战略级产品,它的推出为这两家厂商的云Q V H平台,提供一个杀手级的特性~ & ) ; u ) + {

它可以延续gZ q ] ioogle的云原生市场上一个战略布局,我们可以在这张图可以看到在容器层面google已经有了kubernetes,那么在通讯层面已经有了google grpc的协议,而微服务这个层面,google也就是打算- o o * X r S d使用lstio这样的一个产品来占领市场,整个这三方面组成了googleU n P M p B的一个云原生的战略,另外lstio还受到了很多云厂商的支持,包括自家的G cloud,IBM的clouE m G gd,以及国内的z 5 b G [ i S现几大厂商,它们现在的产品也都是基于lstio二次开发的,另外@ g h 9 k它可能还会受到一些其他厂商的阻击,比如说亚马逊的AWS使用的自己的app Mesh这样的产品,比如微软自己的云平台Azure,它也有自己的service mesh产品,可能在未来云平台的生态闭环,可能会有不同的service meg 4 -sh产品并存,目前还不能直接看出lstio一家独大。