赞
踩
服务网格是一个独立的基础设施层,用来处理服务之间的通信。现代的云原生应用是由各种复杂技术构建的服务体系,服务网格负责在这些组成部分之间进行可靠的请求传递。目前典型的服务网格通常提供了一组轻量级的网络代理,这些代理会在应用无感知的情况下,同应用并行部署、运行。
Istio有助于降低部署的复杂性,并减轻开发团队的压力。它是一个完全开放源代码的服务网格,透明地分层到现有的分布式应用程序上。它也是一个平台,包括允许它集成到任何日志平台、遥测或策略系统中的api。Istio的多种功能集使我们能够成功、高效地运行分布式微服务体系结构,并提供一种统一的方式来保护、连接和监视微服务。
初始设计目标是在Kubernetes的基础上,以非侵入的方式为运行在集群中的微服务提供流量管理、安全加固、服务监控和策略管理
等功能。
Istio是基于Sidecar模式、数据平面和控制平台、是主流Service Mesh解决方案。
Istio的核心组件包括:
数据平面(Data plane)由Envoy Proxy 充当的Sidecar组成。
控制平面(Control plane)主要包含三大核心组件,Pilot、Citadel、Galley组成。
Envoy:Envoy 是Istio的基础,是一个高性能的网络代理,作为服务间的sidecar容器部署。它处理所有入站和出站流量,为服务提供负载均衡、熔断、限流等高级功能。
Pilot:负责配置 Envoy,动态地提供路由规则、服务发现和策略实施。它与Kubernetes API或者其他服务发现机制集成,确保服务的正确调度。主要是管理部署在Istio服务网格中的Envoy代理实例,为它们提供服务发现、流量管理以及弹性功能,比如:A/B测试、金丝雀发布、超时、重试、熔断等。
Mixer:处理跨服务的政策执行(如配额限制、日志记录和监控指标),并且提供了插件接口以支持各种后端服务。
Citadel:专注于安全管理,提供身份验证、授权和证书管理,保证服务间的通信安全。
Galley:这是Istio的配置管理器,收集、验证、分发并存储服务网格中的配置数据。向Istio的其它组件提供支撑功能,可以理解为Istio的配置中心,它用于校验进入网络配置信息的格式内容正确性,并将这些配置信息提供给Pilot。
连接:对网格内部的服务之间的调用所产生的流量进行智能管理,并以此为基础,为微服务的部署、测试和升级等操作提供有力保障。
安全:为网格内部的服务之间的调用提供认证、加密和鉴权支持,在不侵入代码的情况下,加固现有服务,提高其安全性。
策略:在控制平面定制策略,并在服务中实施。
观察:对服务之间的调用进行跟踪和测量,获取服务的状态信息。
服务无关性:Istio不依赖特定的语言或框架,可以与任何类型的应用程序一起工作。
扩展性:Mixer允许开发自定义的策略和遥测处理器,满足特定需求。
低侵入性:通过sidecar模式部署,不需要更改现有应用代码。
全面的API和工具:丰富的API和CLI工具,简化了与Istio的交互。
Istio是一个服务治理平台,治理的是服务间的访问,只要有访问就可以治理,不在乎这个服务是不是是所谓的微服务,也不要求跑的代码是微服务化的。单体应用不满足微服务用Istio治理也是完全可以的。
服务治理的三种形态
在应用程序中包含治理逻辑
治理逻辑独立的代码
治理逻辑独立的进程
比较以上三种服务治理形态,我们可以看到服务治理组件的位置在持续下沉,对应用的侵入逐渐减少。
微服务作为一种架构风格,更是一种敏捷的软件工程实践,说到底是一套方法论;与之对应的 Istio 等服务网格则是一种完整的实践,Istio 更是一款设计良好的具有较好集成及可扩展能力的可落地的服务治理工具和平台。
所以,微服务是一套理论,Istio是一种实践。
在Kubernetes上叠加Istio这个好帮手, Kubernetes已经提供了非常强大的应用负载的部署、升级、扩容等运行管理能力。Kubernetes 中的 Service 机制也已经可以做服务注册、服务发现和负载均衡,支持通过服务名访问到服务实例。但对服务间访问的管理如服务的熔断、限流、动态路由、调用链追踪等都不在Kubernetes的能力范围内。
Istio最大化地利用了Kubernetes这个基础设施,与之叠加在一起形成了一个更强大的用于进行服务运行和治理的基础设施
,充分利用了Kubernetes的优点实现Istio的功能。
数据面
服务发现
基于K8s的CRD描述规则
云原生应用采用 Kubernetes 构建应用编排能力,采用 Istio 构建服务治理能力,将逐渐成为企业技术转型的标准配置。
在云原生时代,随着采用各种语言开发的服务剧增,应用间的访问拓扑更加复杂,治理需求也越来越多。原来的那种嵌入在应用中的治理功能无论是从形态、动态性还是可扩展性来说都不能满足需求,迫切需要一种具备云原生动态、弹性特点的应用治理基础设施。
采用Sidecar代理与应用进程的解耦带来的是应用完全无侵入、也屏蔽了开发语言无关等特点解除了开发语言的约束,从而极大降低了应用开发者的开发成本。
这种方式也经常被称为一种应用的基础设施层,类比TCP/IP网络协议栈,应用程序像使用TCP/IP一样使用这个通用代理:TCP/IP 负责将字节码可靠地在网络节点之间传递,Sidecar 则负责将请求可靠地在服务间进行传递。TCP/IP 面向的是底层的数据流,Sidecar 则可以支持多种高级协议(HTTP、gRPC、HTTPS 等),以及对服务运行时进行高级控制,使服务变得可监控、可管理。
然后,从全局来看,在多个服务间有复杂的互相访问时才有服务治理的需求。即我们关注的是这些 Sidecar 组成的网格,对网格内的服务间访问进行管理,应用还是按照本来的方式进行互相访问,每个应用程序的入口流量和出口流量都要经过Sidecar代理,并在Sidecar上执行治理动作。
最后,Sidecar是网格动作的执行体,全局的管理规则和网格内的元数据维护需要通过一个统一的控制面实现。
Sidecar拦截入口流量,执行治理动作。这就引入两个问题:
增加了两处延迟和可能的故障点;
多出来的这两跳对于访问性能、整体可靠性及整个系统的复杂度都带来了新的挑战。
在多种服务网格项目和产品中,最引人注目的是后来居上的 Istio,它有希望成为继Kubernetes之后的又一款重量级产品。
Istio 解决了生产大规模集群的性能、资源利用率和可靠性问题,提供了众多生产中实际应用的新特性,已经达到企业级可用的标准。
首先,在控制面上,Istio作为一种全新的设计,在功能、形态、架构和扩展性上提供了远超服务网格的能力范围。它提供了一套标准的控制面规范,向数据面传递服务信息和治理规则。
Istio使用Envoy V2版本的API,即gRPC协议。标准的控制面API解耦了控制面和数据面的绑定。
最后,Kubernetes作为管理容器的编排系统,需要一个系统管理在容器平台上运行的服务之间的交互,包括控制访问、安全、运行数据收集等,而 Istio 正是为此而生的;另外,Istio 成为架构的默认部分,就像容器和Kubernetes已经成为云原生架构的默认部分一样。
时代选择服务网格是因为架构的发展, 服务网格选择istio是因为提供一套开箱即用的容器应用运行治理的全栈服务。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。