istio基本概念、架构、主要功能和原理

本文介绍了ServiceMesh如何作为微服务架构中的关键组件,解决服务间通信问题。重点剖析了Istio(如Envoy、Pilot、Mixer等组件)在流量管理、安全和可观察性方面的功能,包括动态路由、故障处理、安全策略和数据可视化集成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言 Service Mesh

背景

传统单体应用的缺点:
持续部署困难,单体应用的某一个组件更新,需要重新部署整个应用,一旦部署失败,造成整个应用宕机。

而微服务架构,将单体应用拆分为多个微服务,各微服务之间通过网络进行通信,解决上面的问题。
微服务由两部分构成:

  1. 业务逻辑:定义如何处理应用业务逻辑
  2. 网络功能:负责服务间的通信,如超时重试,服务发现,负载均衡等

但带来一个挑战:如何标准化管理各个微服务,如何保证微服务间的可靠通信,如何确保可用性

Service Mesh作为业务逻辑和网络层之间的网络代理,与业务逻辑解耦,主要实现复杂网络中的服务间通信,如负载均衡,服务发现,熔断,动态路由等功能。

Service Mesh架构如图:
Service Mesh架构图

Service Mesh作为独立运行层,它很好地解决了上述所面临的挑战,使应用具备处理网络弹性逻辑和提供可靠交互请求的能力。它使得耦合性更低、灵活性更强,跟现有环境的集成时间和人力代价更小,也提供多语言支持、多协议支持,运维和管理成本更低。最主要的是开发人员只需关注业务代码逻辑,而不需要关注业务代码以外的其他功能,即Service Mesh对开发人员是透明的。

一 istio基本概念

istio就是Service Mesh产品的实现
官方解释:istio是一个完全开源的服务网格,作为透明的一层接入到现有的分布式应用程序里;也是一个平台,拥有可以集成任何日志、遥测和策略系统的API接口

二 istio架构和原理

istio的架构分为数据平面(date plane)和控制平面(control plane)。
istio架构图

数据平面:由一组和业务服务成对出现的Sidecar代理(Envoy)构成,主要功能是接管服务的进出流量,传递并控制服务和Mixer组件的所有网络通信
控制平面:主要包括Pilot、Mixer、Citadel组件,主要功能是通过配置和管理Sidecar代理来进行流量控制,并配置Mixer去执行策略和收集遥测数据(Telemetry)

各组件介绍:

  • Envoy

Istio的数据平面就是指代理,Istio选择Envoy作为Sidecar代理
Envoy是一款基于C++11开发的高性能的网络代理程序,是目前Istio默认的数据平面
除了具有强大的网络控制能力外,Envoy还可以将流量行为和数据提取出来发送给Mixer组件,用以进行监控

  • Pilot

Pilot 是Istio实现流量管理的核心组件,它主要的作用是从平台(如Kubernetes)获取服务信息,完成服务发现;获取Istio的各项配置,转换成Envoy代理规则转发。
比如可以为代理之间设置特定的流量规则,或者配置超时、重试、熔断这样的弹性能力。
Pilot会将控制流量行为的路由规则转换为Envoy的配置,并在运行时将它们广播到Envoy。
另外,Pilot还能够把服务发现机制抽象出来并转换成API分发给Envoy,使得后者具有服务发现的能力。

  • Mixer

Mixer的主要功能是提供策略控制,并从Envoy代理收集遥测数据。
每次网络通信时Envoy代理都会向Mixer发出预检要求,用来检测调用者的合法性。调用之后Envoy代理会发送遥测数据供Mixer收集。一般情况下Sidecar代理可以缓存这些数据,不需要频繁地调用Mixer。

  • Citadel

Citadel是与安全相关的组件,主要负责密钥和证书的管理。它可以提供服务间和终端用户的身份认证,还可以加密服务网格中的流量。在后面介绍安全主题的第8章中,我们会详细说明它是如何和其他组件协同工作的。

三 istio功能和原理

主要功能:流量管理、安全、可观察性

3.1 流量管理

Istio的流量管理是通过Pilot和Envoy这两个组件实现的,将流量和基础设施进行了解耦。Pilot负责配置规则,并把规则分发到Envoy代理去实施;而Envoy按照规则执行各种流量管理的功能,比如动态请求路由(负载均衡、A/B测试、金丝雀部署),故障处理(超时、重试和熔断),还可以通过故障注入来测试服务之间的容错能力。

istio官网-流量管理

3.1.1 动态路由

服务发现和负载均衡:
服务发现的前提条件是具有服务注册的能力。目前Kubernetes这类容器编排平台也提供了服务注册的能力。
Pilot组件会从平台获取服务的注册信息,并提供服务发现的接口,Envoy获得这些信息并更新到自己的负载均衡池。Envoy会定期地对池中的实例进行健康检查,剔除离线的实例,保证服务信息的实时性。

默认情况下,Istio 使用轮询的负载均衡策略,实例池中的每个实例依次获取请求。Istio 同时支持随机、权重、最少请求等的负载均衡模型, 可以在 DestinationRule 中为流向某个特定服务或服务子集的流量指定这些模型

3.1.2 故障处理
  • 超时
    超时是 Envoy 代理等待来自给定服务的答复的时间量,以确保服务不会因为等待答复而无限期的挂起, 并在可预测的时间范围内调用成功或失败。
    超时太长可能会由于等待失败服务的回复而导致过度的延迟; 而超时过短则可能在等待涉及多个服务返回的操作时触发不必要的失败
    istio允许使用虚拟服务通过配置动态调整超时策略

  • 熔断
    熔断是指限制对服务中单个主机的调用,如对某主机设置并发连接的数量或调用失败的次数,一旦超过这个限制,熔断器就会停止连接到该主机
    istio官网-熔断
    官网示例实验步骤:
    1、部署httpbin服务,为其配置熔断策略
    2、用fortio客户端去触发熔断规则,成功触发熔断
    在这里插入图片描述
    图为设置熔断规则并发最大为1,fortio发送并发数为3的请求,触发熔断

3.1.3 故障注入

故障注入是为了测试服务的故障恢复能力,有两种注入模式,都使用虚拟服务配置:
延迟:延迟是时间故障。它们模拟增加的网络延迟或一个超载的上游服务。
终止:终止是崩溃失败。他们模仿上游服务的失败。终止通常以 HTTP 错误码或 TCP 连接失败的形式出现。
故障注入配置不能与同一个虚拟服务上的重试或超时配置相结合
istio官网-故障注入
官网示例实验步骤:
1、按bookinfo yaml部署bookinfo项目
2、为reviews服务配置故障注入终止策略
3、访问[host]:[productpageServicePort],提示reviews service is currently unavailable
fault injection

3.2 安全

Istio 中的安全架构是由多个组件协同完成的。Citadel是负责安全的主要组件,用于密钥和证书的管理;Pilot会将授权策略等信息分发给Envoy代理;Envoy根据策略实现服务间的安全通信;Mixer负责管理授权等工作。

3.3 可观察性

Istio可以很方便地和各种监控、追踪工具集成,以便我们以可视化的方式(网页)直观地查看整个系统的运行状态。比如可以集成Prometheus来进行指标数据的收集,然后将收集的数据放在Grafana监控工具中展示;还可以集成Jaeger作为追踪系统,帮助我们对请求的调用链进行跟踪,在故障发生时分析出现问题的根源;或者将请求日志记录到Kibana系统,以图表的方式进行数据分析

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值