来源:无敌码农
作者:无敌码农

今天的文章将从更宏观的概念架构入手,来全面介绍Istio这一最著名的服务网格开源解决方案,以求从整体上将Istio实现服务网格的核心原理阐述清楚!

Istio中的关键概念

要学习Istio需要先明确以下几个关键术语。

1.容器/容器镜像

进入到云原生时代的服务网格架构,应用的发布、部署都是围绕Kubernetes为代表的容器基础设施展开的。这就需要对容器容器镜像的概念有清晰的理解。

实际上,容器的普及要归功于Docker技术的流行,而从本质上说容器就是运行在操作系统中的,受资源隔离限制的一组进程,也称为“容器运行时”。它可以将用户打包的代码及其所赖的关系完整的还原出来。通过容器化运行的应用程序,可以更快、更可靠地运行,而不受具体计算环境的影响。

容器镜像,是容器化的重要介质和载体。从形式上来说,它就是一个轻量级的、独立的、可执行的软件包文件,包括了运行应用程序所需要的一切:代码、工具、系统库及各种设置。

容器技术的出现,彻底颠覆了应用构建、发布及运行的方式,目前已经成为服务端应用发布的事实标准。后续要聊到的Istio服务网格技术,无论是“网格基础组件”还是“应用程序”,都是以容器的方式运行在Kubernetes容器平台之上的。

2.微服务

微服务是一种架构风格,它将一个庞大的单体服务拆分为一组松散耦合的微服务集合,该微服务集合提供了与单个单体应用相同的功能。但微服务可以独立于其他服务进行独立的开发和部署。此外,微服务是围绕业务能力组织的,可以由较小的团队拥有,因此,在开发/部署上能够实现更小、更独立的迭代。

目前主要的微服务架构解决方案,以Spring Cloud为代表的微服务架构体系是主流;但随着云原生技术概念的流行,以Istio为代表的Service Mesh(服务网格)微服务架构方案也在逐步得到推广。

3.控制平面

在以Spring Cloud为代表的传统微服务架构中,应用本身与服务治理逻辑是耦合在一起的。而在Service Mesh(服务网格)方案中,服务治理规则的管理服务治理行为应用本身都是互相独立,这就使得应用可以专注于业务,而服务治理逻辑则完全可以抽离出来由运维团队进行统一的管理。

像这种专门负责服务治理规则管理的逻辑或组件,在Service Mesh(服务网格)架构中就叫做“控制平面“。“控制平面”主要由API和工具组成,用于管理服务治理行为(数据平面)。服务网格运维人员可以操控控制平面,以配置服务网格中的数据平面行为。例如,将流量配置作用于控制平面——翻译配置并将其推送到数据平面。

4.数据平面

在Service Mesh(服务网格)中,数据平面就是具体实现服务治理行为的代理。在Istio中数据平面由负责路由、负载均衡、服务发现、健康检查和授权/认证的Envoy代理组成。这些代理在每个服务实例的旁边运行(在k8s中,与应用容器运行在同一个Pod),拦截所有传入和传出的用户流量,并在这一过程中根据控制平面下发的服务治理规则进行流量管理。

5.Envoy

在Istio中,数据平面就是由Envoy代理实现的。它是一个现代的、高性能边缘的小型L7代理。Envoy是为大型现代微服务架构设计的,可以与Nginx和HAProxy等负载均衡器相匹配。

6.代理

在网络中,代理是一个中间服务器,位于客户端和服务端之间,可以管理请求和响应。在Istio服务网格情况下,代理(Envoy)运行在每个应用实例的前面。当向应用程序发起请求时,代理(Envoy)会拦截该请求,并将其转发给应用程序实例。同样地,当应用程序实例试图发出请求时,代理(Envoy)也会拦截出站请求并将其发送到目的地。

由于代理(Envoy)拦截了所有请求,所以它可以修改请求,从而实现流量路由、故障注入、授权等功能

7.L7代理

L7(第7层)代理在OSI模型的应用层工作。在这一层,代理可以处理每个请求的内容。例如Http就是一个流行的L7协议。因为可以访问请求的数据,所以L7代理(Envoy)就可以根据请求的内容(URL、Cookies等)做出负载均衡的决定。

Istio的架构及模块组成

Service Mesh(服务网格)的架构方式为我们提供了一种统一的方式来连接、保护和观察微服务。网格内的代理(如Envoy)可以捕获网格内所有的通信请求和指标——每一次失败或成功的调用、重试或超时的请求都可以被捕获,并被可视化和报警。

这种将通信逻辑从业务和应用逻辑中分离出来的架构方式,可以使开发人员专注于业务逻辑,而服务网格运维人员则专注于服务网格配置。

前面通过对几个关键术语的解释,以及对服务网格架构好处的介绍,相信大家或多或少理解了什么是服务网格。接下来将重点介绍Istio这一开源的服务网格实现。

从宏观上看,Istio主要支持以下功能:

1.流量管理

流量管理是Istio最核心的功能,通过配置,可以控制服务之间的流量——例如设置断路器、超时或重试等服务治理机制,在Istio中都可以通过简单的配置改变来完成。

2.可观察性

Istio可以通过跟踪、监控和记录服务间的请求来更好地实现对服务的监控,方便我们了解服务运行情况,并及时发现和修复问题。

3.安全性

Istio可以在代理层面来管理认证、授权和通讯的加密,而无需对应用本身造成侵入。而这些安全配置操作只需要通过快速的配置变更即可完成。

接下来,我们看下Istio的架构组成。如下图所示:

如上图所示,Istio实现服务网格,仍然遵循了将组件分离成“控制平面”和“数据平面”这一常见的分布式系统构建模式。

Istio中的数据平面由Envoy代理组成,控制服务之间的通信。Envoy是一个用C++开发的高性能代理。Istio将Enovy代理作为一个sidecar容器注入到应用容器的旁边,然后拦截该服务的所有入站和出站流量。而这些注入应用容器旁边的Enovy代理组合在一起就构成了Istio服务网格的数据平面。

Istiod则是Istio的控制平面组件,主要提供服务发现、配置和证书管理等功能。Istiod采用YAML文件格式来编写流量控制规则,并将其转换为Envoy的可操作配置,之后通过xDS协议将配置传播给网格中的所有sidecar代理。

Istiod主要由Pilot、Citadel、Galley这三个组件组成。其中Pilot抽象了特定平台的服务发现机制(如Kubernetes、Consul或VM),并将其转换为可以被sidecar使用的标准格式。Citadel则是Istio的核心安全组件,实现证书授权、证书生成,实现数据平面中sidecar代理之间的mTLS安全通信。

而Galley则主要服务配置管理,包括验证配置信息的格式和内容正确性,并将这些配置信息提供给Pilot等其他控制平面组件使用。

Istio的流量管理实现

流量管理是Istio服务网格的核心能力。通过Istio的流量管理功能,演示了在服务网格中实现灰度发布的具体方法。接下来,将从原理层面来总结下Istio实现流量管理的核心逻辑。

Istio流量管理示意图如下:

如上图所示,要在Istio服务网格中实现流量管理,需要通过VirtualService(虚拟服务)DestinationRule(路由规则)资源来管理流量路由规则。

而具体的路由规则流量的执行由Istio网关资源来实现。其中Ingress Gateway(入口网关)Egress Gateway(出口网关)是Istio服务网格组件的一部分,这两个网关都运行着一个Envoy代理实例,它们在服务网格的边缘作为负载均衡器运行,入口网关接收入站连接,而出口网关则接收从集群出去的连接。

需要注意,这里理解入口网关和出口网关的概念不要狭义的理解为就是Istio服务网格的边缘入口和出口。对于Istio服务网格来说除了外部流量的进出可以通过VitrualService(虚拟服务)关联Gateway(网关资源)来实现流量路由外,网格之间也可以通过该方式来实现流量的路由。

所以,在使用Istio服务网格来实现微服务的流量管理时,可以根据场景来分别创建针对外部流量的Gateway+VirtualService资源,以及针对具体微服务网格间流量的Gateway+VirtualService资源,并通过VitrualService随时修改相应的路由规则。

而对于Gateway网格资源的创建来说,则根据是控制入口流量还是出口流量来选择关联Ingress Gateway(入口网关)还是Egress Gateway(出口网关)。

后记

以上内容就是对Istio服务网格实现流量管理核心逻辑的简单介绍,也是为了方便大家理解之前文章中的一些操作。虽然目前以Istio服务网格架构还没有完全替代Spring Cloud微服务体系,但服务网格这种将控制平面和数据平面分离的架构思想,将是未来微服务架构的主流。

往期推荐

阿里云投入 20 亿发力操作系统

移动云API大赛决赛大奖花落谁家?

Redis很厉害,使用规范来啦

阿里云发布首颗云芯片倚天710

点分享

点收藏

点点赞

点在看

Service Mesh 开源实现之 Istio 架构概览相关推荐

  1. Service Mesh 最火项目 Istio 架构解析

    Istio 是一个开源的服务网格,可为分布式微服务架构提供所需的基础运行和管理要素.随着各组织越来越多地采用云平台,开发者必须使用微服务设计架构以实现可移植性,而运维人员必须管理包含混合云部署和多云部 ...

  2. Service Mesh 最火项目 Istio 分层架构,你真的了解吗?

    作者 | 王夕宁  阿里巴巴高级技术专家 参与"阿里巴巴云原生"公众号文末留言互动,即有机会获得赠书福利! 本文摘自于由阿里云高级技术专家王夕宁撰写的<Istio 服务网格技 ...

  3. 深度剖析Service Mesh服务网格新生代Istio

    作者简介:敖小剑,十五年软件开发经验,微服务专家,专注于基础架构,Cloud Native拥护者,敏捷实践者.曾在亚信.爱立信.唯品会和ppmoney任职, 现任数人云资深架构师,本文由数人云独家授权 ...

  4. 万字长文|深度剖析Service Mesh服务网格新生代Istio

    Service Mesh新秀,初出茅庐便声势浩荡,前有Google,IBM和Lyft倾情奉献,后有业界大佬俯首膜拜,这就是今天将要介绍的主角,扛起Service Mesh大旗,掀起新一轮微服务开发浪潮 ...

  5. Apache RocketMQ 的 Service Mesh 开源之旅

    作者 | 凌楚 阿里巴巴开发工程师 导读:自 19 年底开始,支持 Apache RocketMQ 的 Network Filter 历时 4 个月的 Code Review(Pull Request ...

  6. 干货 | 蚂蚁金服是如何实现经典服务化架构往 Service Mesh 方向的演进的?

    小蚂蚁说: 蚂蚁金服在服务化上面已经经过多年的沉淀,支撑了每年双十一的高峰峰值.Service Mesh 作为微服务的一个新方向,在最近两年成为领域的一个大热点,但是如何从经典服务化架构往 Servi ...

  7. 微服务(Microservices)和服务网格(Service Mesh)架构概念整理

    微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技术热点.而以 Spring Cloud 为代表的传统侵入式开发 ...

  8. 万字长文梳理:从0开始,步入Service Mesh微服务架构的世界

    来源 | 无敌码农 责编 |贾凯强 头图 | 下载于视觉中国 新一代微服务架构--Service Mesh已经引发了诸多关注.在微服务架构盛行的今天,像Spring Cloud这样的微服务框架大家已然 ...

  9. Service Mesh对比:Istio与Linkerd

    根据CNCF的最新年度调查,很多组织对Service Mesh表现出很高的兴趣,并且有一部分已经在生产环境中使用它们.你可能不知道Linkerd是市场上第一个Service Mesh,但是Istio使 ...

最新文章

  1. 【Live555】live555源码详解(七):GenericMediaServer、RTSPServer、RTSPClient
  2. 字典推导式_聊一聊:python的各种推导式(列表推导式、字典推导式、集合推导式)...
  3. boost::hana::less_equal用法的测试程序
  4. STL之红黑树容器:set,hash_set,multiset,hash_map,multimap
  5. graphics 位深度_热门上海乐家人才公寓深度解析又是一个神
  6. matlab快速将几幅图片放在一幅图片
  7. docker添加新的环境变量_docker使用教程[三]Dockfile小试牛刀
  8. linux数组删除数据,如何从shell数组中删除一个元素
  9. 高交会|华创芯光邀您一起畅游可见光通信的世界
  10. 小米、百度、bigo 、滴滴 、快手等iOS 面试后的一次阶段性总结
  11. 计算机音乐nevada,Nevada
  12. 6个常用大数据分析工具集锦
  13. CoreML遇到的问题和原因
  14. 永磁同步电机(三)——三相永磁同步电机仿真
  15. 802.11 帧封装细节
  16. 芯片IC附近为什么都放0.1uF的电容?这样做正确吗?有什么依据吗?
  17. 2.03.05 原型与原型链
  18. python小欢喜(八)俄罗斯方块 (5) 生成各种组合形状
  19. JAVA加密算法AES相关代码实现
  20. java魔塔_2018-2019学年第一学期Java课设--魔塔

热门文章

  1. c语言报错spawning 插1,C语言错误····error spawning c1.exe
  2. canvas简单五子棋
  3. 总投资200亿,中国第五座航天发射中心来了!为何选址在宁波?
  4. 高校教师职称制度将迎重大改革,教师怎么看?
  5. 这所双非高校硕士生一作发Science!系学校上半年第13篇CNS!
  6. 数学系和物理系学生有什么差别?
  7. 做科研,到底应该看什么?
  8. 利用Mybatis对数据库进行增删改查操作
  9. c# MEF框架(一 MEF简介及简单的Demo)
  10. 给IT新人的15个建议:程序员的辛酸反省与总结!