当前位置: 首页 > 后端技术 > Java

三分钟带你初步了解Istio架构

时间:2023-04-01 13:35:02 Java

Istio,它是ServiceMesh的开源实现。Istio中的关键概念要学习Istio,您需要弄清楚以下关键术语。1、容器/容器镜像进入云原生时代的服务网格架构。应用的发布和部署围绕着以Kubernetes为代表的容器基础设施展开。这就需要对容器和容器镜像的概念有一个清晰的认识。事实上,容器的流行得益于Docker技术的流行,而本质上,容器是运行在操作系统中并受资源隔离限制的一组进程,也称为“容器运行时”。可以完整还原用户打包的代码及其依赖关系。无论特定的计算环境如何,通过容器化运行的应用程序都可以更快、更可靠地运行。容器镜像是容器化的重要媒介和载体。形式上来说,它是一个轻量级的、独立的、可执行的包文件,包含了运行应用程序所需的一切:代码、工具、系统库和各种设置。容器技术的出现彻底颠覆了应用构建、发布和运行的方式,现已成为服务端应用发布的事实标准。后面要讲的Istio服务网格技术,无论是“网格基础组件”还是“应用”,都是以容??器的形式运行在Kubernetes容器平台上。2.微服务微服务是一种架构风格,它将一个巨大的单体服务拆分成一组松散耦合的微服务,这些微服务提供与单个单体应用程序相同的功能。但是微服务可以独立于其他服务进行开发和部署。此外,微服务围绕业务功能进行组织,可以由较小的团队拥有,从而实现更小、更独立的开发/部署迭代。目前主要的微服务架构方案,以SpringCloud为代表的微服务架构体系是主流;但随着云原生技术概念的普及,以Istio为代表的ServiceMesh(服务网格)微服务架构方案也在逐步推广。3、控制平面在以SpringCloud为代表的传统微服务架构中,应用本身和服务治理逻辑是耦合在一起的。在ServiceMesh(服务网格)方案中,服务治理规则的管理、服务治理行为和应用本身相互独立,可以让应用专注于业务,而服务治理逻辑可以完全分离由运营商。维度团队统一管理。这种负责管理服务治理规则的逻辑或组件在服务网格架构中被称为“控制平面”。“控制平面”主要由API和工具组成,用于管理服务治理行为(数据平面)。服务网格运营商可以操纵控制平面来配置服务网格中的数据平面行为。例如,将流量配置应用于控制平面-转换配置并将其推送到数据平面。4、数据平面在ServiceMesh(服务网格)中,数据平面是实现服务治理行为的代理。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的架构和服务网格(ServiceMesh)模块的架构为我们提供了一个统一的方式来连接、保护和观察微服务。网格内代理(例如Envoy)可以捕获网格中的所有通信请求和指标——每个失败或成功的调用、重试或超时请求都可以被捕获、可视化并发出警报。这种将通信逻辑与业务和应用程序逻辑分离的架构方法允许开发人员专注于业务逻辑,而服务网格运营商则专注于服务网格配置。通过几个关键术语的解释和服务网格架构的好处的介绍,相信大家或多或少的了解了什么是服务网格。接下来,我们将重点介绍开源服务网格实现Istio。从宏观上看,Istio主要支持以下功能:1.流量管理流量管理是Istio的核心功能。通过配置,您可以控制服务之间的流量——例如设置断路器、超时或重试以及其他服务治理机制。这一切都可以通过Istio中的简单配置更改来完成。2.可观察性Istio可以通过跟踪、监控、记录服务之间的请求,更好地监控服务,以便我们了解服务的运行情况,及时发现和修复问题。3.安全性Istio可以在代理级别管理身份验证、授权和通信加密,而不会侵入应用程序本身。这些安全配置操作只需通过快速的配置变更即可完成。接下来我们看一下Istio的架构组成。如下图所示:如上图所示,Istio实现了服务网格,仍然遵循常见的分布式系统构建模式,将组件分离为“控制平面”和“数据平面”。Istio中的数据平面由控制服务之间通信的Envoy代理组成。Envoy是一个用C++开发的高性能代理。Istio将Enovy代理作为应用程序容器旁边的边车容器注入,然后拦截该服务的所有入站和出站流量。在应用程序容器旁边注入的这些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服务网格中实现流量管理,需要通过VirtualService(虚拟服务)和DestinationRule(路由规则)资源。具体路由规则流量的执行由Istio网关资源实现。其中,IngressGateway(入口网关)和EgressGateway(出口网关)是Istio服务网格组件的一部分。两个网关都运行一个Envoy代理实例,它在服务网格的边缘作为负载均衡器运行。入口网关接受入站连接,而出口网关接受来自集群的传出连接。需要注意的是,ingressgateway和egressgateway的概念不要狭义理解为Istio服务网格的边缘入口和出口。对于Istio服务网格,除了外部流量的进出,VitrualService(虚拟服务)可以与Gateway(网关资源)关联实现流量路由,网格间的流量路由也可以在此实现方式。因此,在使用Istio服务网格实现微服务流量管理时,可以根据场景为外部流量创建Gateway+VirtualService资源,为特定微服务网格之间的流量创建Gateway+VirtualService资源,并通过VitrualService随时修改相应的路由规则时间。Gateway网格资源的创建,根据是控制入口流量还是出口流量,选择关联IngressGateway(入口网关)或EgressGateway(出口网关)。最后,以上内容是对Istio服务网格流量管理的核心逻辑的简单介绍,也是为了方便大家理解上一篇文章中的一些操作。虽然Istio服务网格架构还没有完全取代SpringCloud微服务体系,但是将控制面和数据面分离的服务网格将成为未来微服务架构的主流。