网站开发流程的8个步骤,wordpress 转 drupal,做网站的原理,免费发帖的网站来源#xff1a;无敌码农作者#xff1a;无敌码农今天的文章将从更宏观的概念和架构入手#xff0c;来全面介绍Istio这一最著名的服务网格开源解决方案#xff0c;以求从整体上将Istio实现服务网格的核心原理阐述清楚#xff01;Istio中的关键概念要学习Istio需要先明确以… 来源无敌码农作者无敌码农今天的文章将从更宏观的概念和架构入手来全面介绍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服务网格来实现微服务的流量管理时可以根据场景来分别创建针对外部流量的GatewayVirtualService资源以及针对具体微服务网格间流量的GatewayVirtualService资源并通过VitrualService随时修改相应的路由规则。而对于Gateway网格资源的创建来说则根据是控制入口流量还是出口流量来选择关联Ingress Gateway入口网关还是Egress Gateway出口网关。后记以上内容就是对Istio服务网格实现流量管理核心逻辑的简单介绍也是为了方便大家理解之前文章中的一些操作。虽然目前以Istio服务网格架构还没有完全替代Spring Cloud微服务体系但服务网格这种将控制平面和数据平面分离的架构思想将是未来微服务架构的主流。往期推荐阿里云投入 20 亿发力操作系统移动云API大赛决赛大奖花落谁家Redis很厉害使用规范来啦阿里云发布首颗云芯片倚天710点分享点收藏点点赞点在看