Advertisement

Istio: An Introduction to Service Mesh

阅读量:

作者:禅与计算机程序设计艺术

1.简介

服务网格(Service Mesh)作为微服务架构中的基础设施,负责服务间的通信。其主要目标是通过提供服务发现、负载均衡、限流熔断等功能,有效解决异构系统之间的网络调用难题。目前Istio已成为服务网格领域最流行的开源方案之一。本文将从基本概念入手,系统阐述服务网格的相关知识与理论,并结合Istio开源项目,深入解析其中的关键组件。通过通俗易懂的方式,力图向读者传达服务网格的核心概念及其实际应用价值。希望本文能够帮助读者更好地理解服务网格在微服务架构中的重要性,以及如何利用其提升应用性能、降低系统复杂度与运维成本。

2.基本概念

服务网格(Service Mesh)

服务网格(Service Mesh)是一个负责协调微服务之间交互的底层架构。它通常由一组中间件(interceptors)组成,这些中间件与业务逻辑分离部署,各自独立运行。中间件之间构建一个高度可配置的网络架构,基于请求的路由规则、流量控制策略、安全认证等属性进行流量调度。服务网格与业务逻辑协同工作,采用“副车模式”,提供了一致的监控视角,从而实现对系统运行状态的一致性观察和数据采集。

服务网格由控制面板和数据面的两部分组成,如下图所示:

  • 控制面板 :服务网格控制面板承担配置和流量路由的管理职责。它是一个集中化的管理控制中心,包含配置中心、注册中心和策略存储等功能模块。
    • 数据面 :数据面由多个服务网格代理(Envoy)构成,每个代理部署在服务的本地主机上。各个代理之间建立网络连接,持续监控并接收或发送的流量,随后依据服务网格控制面板的配置和策略进行处理。

服务网格提供了许多优秀特性,例如:

  • 透明接入:透明接入机制通过接管微服务间的通信渠道,使应用程序代码能够自然地融入服务架构体系,仿佛开发者始终在使用自己的代码,无需担心底层网络的复杂性。
  • 流量控制:流量控制模块通过灵活配置实现对网络流量的即时优化,支持限流、熔断等行为,从而有效保障服务级别和系统容错能力。
  • 熔断:熔断机制能够快速实现故障隔离,避免服务依赖方因长时间负载而遭受性能影响。
  • 可观察性:通过整合实时监控数据,服务网格为运维人员提供了全面的性能分析工具,包括延迟监控、流量统计和错误报告等功能,帮助及时发现和解决问题。
  • 安全:安全机制对不同类型的流量实施精确控制,确保数据传输过程中的安全性和隐私性。

总而言之,服务网格系统是一种架构模式和网络架构,它使得微服务之间的通信更加便捷、高效、可靠且安全。通过提供强大的流量控制功能,服务网格系统能够有效提升微服务的部署效率和运行稳定性,从而显著增强整体应用的性能、可靠性和可用性。

Envoy

Envoy 是 Istio 的预设作为边缘容器代理,同时也是 Kubernetes 环境中最关键的服务网格组件。该组件承担着两大主要功能:首先,它负责接收并响应所有容器的网络请求;其次,根据服务网格控制面的指示对数据包进行方向调整并执行额外操作,如负载均衡、缓存、健康检查等。在数据层面,Envoy 的角色与中间件相似,它能够对输入或输出的网络流量进行过滤和转发,并对数据包内容进行必要的修改。

Envoy 是 gRPC 和 HTTP/2 协议的兼容服务器,同时依据 IP 地址和主机名进行负载均衡。它还包含多种高级功能,如熔断器、限速器、TLS 终端和授权模块等。配置可以通过 YAML 或 JSON 格式进行配置定义。

Mixer

Mixer 是 Istio 架构中的另一个关键组件,它是一个前馈控制模块,负责在服务网格边缘执行策略决策和遥测数据的采集。作为独立模块,它支持多种标准接口,能够无缝集成到任何兼容的 service mesh架构中。

Mixer 提供了一套全面的策略引擎,支持多种功能模块,包括访问控制、遥测报告、速率限制和配额管理,同时具备高度的定制化能力。该引擎通过扩展模型实现功能的个性化配置,并提供了一个统一的插件接口,支持多样化的策略功能,涵盖日志管理、监控、弹性伸缩、资源配额以及访问控制等。

Mixer通过名为Adapter的机制连接至Istio管理的各类服务,并整合了外部监控系统,如Prometheus和Grafana,以提供统一的可视化界面。

Pilot

Pilot 是 Istio 的核心功能之一,负责管理与控制 Envoy 代理的行为。Pilot 根据服务注册中心提供的信息自动将服务分配到各个 Envoy 代理节点上。当服务发生变更时,Pilot 通过 xDS API 发布新的配置给 Envoy,从而实现代理行为的更新。

Pilot集成Google的服务框架Consul,用于管理服务注册信息,并通过主动健康扫描确保服务的可用性。Pilot具备对服务网格中的流量进行精细的控制能力,涵盖超时配置、重试策略、断路器和熔断器等功能。

Citadel

在Istio生态系统中,Citadel扮演着一个关键角色,主要负责向服务网格中的工作负载提供CA功能。该组件赋予工作负载者强大的服务认证和加密通信能力。其工作流程如图所示:

  • 当工作负载发起 TLS 连接请求时,该系统会向 Citadel 发送请求,以获取证书签名请求(CSR)。
  • 该系统会对 CSR 的请求者身份和权限进行核实,并相应地颁发证书或密钥。
  • 如果请求者的身份和权限被允许,则将证书返回给客户端。如果身份和权限被拒绝,则拒绝该连接。

3.核心组件详解

1. Envoy Proxy

(1)架构

Envoy Proxy 是一个基于 C++ 开发的高性能代理服务器,主要负责接收并处理来自客户端或服务消费方的请求,通过智能路由机制将请求分配至相应的后端集群进行处理。其主要功能包括:首先,该代理服务器能够高效接收并处理来自客户端或服务消费方的请求;其次,根据请求类型进行分类并智能分配请求;最后,对处理后的请求进行响应并管理可能出现的错误或异常情况。

  • Listener :在配置后需要开启监听端口,以便接收客户端发送的请求。此外,还需要开启一个管理端口,以便对外暴露统计数据,或者接收远程指令。
  • Filter :不仅能够对请求和响应进行操作,还可以实现身份验证、限流等功能。Filter还能够管理HTTP连接池,从而优化内存使用和网络资源消耗。
  • Router :路由模块根据请求的特征,如host header、path header、query parameters等,选择对应的路由规则。
  • Cluster :集群管理模块根据配置参数,将请求转发至对应的服务端。该模块还包含负载均衡、连接池管理、异常检测等功能。
  • TCP Proxy :Envoy还可以作为TCP和UDP的代理服务器,实现基于请求的七层路由和过滤功能。

(2)功能模块

⑴ 负载均衡

Envoy 提供了多种负载均衡算法,包括轮转(Round Robin)、加权轮转(Weighted Round Robin)、响应速度(Least Request)、最少连接(Minimum Connections)以及源地址哈希(Source Hashing)等技术。Envoy 默认采用轮转策略。

⑵ 连接池管理

该系统具备连接池管理功能,能够缓存连接至远程主机的时间信息,从而优化网络资源利用率。此外,该系统还支持连接健康检查功能,能够实时监控连接存活状态,避免空闲连接被释放。

⑶ 异常检测和熔断器

Envoy 具备异常检测和熔断器功能,当 Envoy 判断某个上游主机出现异常时,该系统能够将流量路由至其他健康主机。通过这种机制,Envoy 可以有效防止单点故障对整体可用性的威胁。Envoy 默认采用一种简单的异常检测方法,即通过检查上游主机的连接数是否超过预设阈值来判断主机状态。当检测到连接数超过阈值时,Envoy 会认为该主机为异常状态。

⑷ 路由匹配

Envoy 提供了多样的路由匹配参数,涉及 path header、host header、正则表达式 URL 和 source IP 等。依据不同的路由策略,将请求分配至相应的 upstream 节点。

⑸ 路由重写

Envoy 借助路由重写功能模块,可以调整原始请求的 header、url 等字段,使其符合当前集群的需求。

⑹ 重试机制

Envoy 有重试机制,可以根据指定的返回码、超时时间等触发重试。

⑺ 限流

Envoy 有限流功能,可以限制每秒请求的数量,避免服务因过载而崩溃。

⑻ 过期检查

Envoy 能够进行过期检测,当缓存的对象过期时,会重新请求上游服务器获取新对象。

⑼ 负载均衡跨区域路由

Envoy 具备跨区域负载均衡路由的支持能力。通过配置 proximityLbPolicy 相关参数,Envoy 根据集群中不同主机的位置信息来决定相应的负载均衡算法。

⑽ 压缩

Envoy 有压缩功能,可以对响应数据进行压缩,减小网络带宽压力。

⑾ 熔断器

Envoy 支持了一个熔断组件,该组件能够处理服务异常情况下的流量重试机制,从而有效防止服务雪崩事件的发生。

⑿ 前端代理

Envoy同样可以应用于前端代理场景,根据X-Forwarded-For和Forwarded headers头信息,达成对内部服务的访问需求。

(3)扩展模型

Envoy 提供了插件功能模块,支持导入外部扩展组件,这些模块能够实现自定义过滤器功能、集群拆分、过滤器链配置以及 UDS 接口的集成。

4. Mixer

(1)概述

Mixer 是 Istio 架构中的一个新组件,它是一个前向控制器,负责在服务网格的边缘层进行策略决策和数据遥测。其功能涵盖:

  • 配置检查:Mixer 能够读取并验证各种配置文件,确保整个 mesh 系统的配置完全正确。
  • 访问控制:Mixer 通过受控方式,对不同服务之间的访问权限进行严格控制和认证。
  • 遥测报告:Mixer 收集服务网格中各服务的遥测数据,包括 metrics、traces 和 logs,并进行综合分析。
  • 预测分析:Mixer 采用机器学习算法分析服务流量模式,以预测未来可能的行为。
  • 缓冲机制:Mixer 提供了基于请求的缓存功能,能够存储已访问的服务、版本和资源,从而有效减少无效请求。

(2)组件结构

Mixer 由四个组件组成:

  • Server:Mixer服务器接收、处理各类请求,并将请求转发至相应的适配器(Adapter)。
  • Adapter:负责从Mixer获取遥测数据、生成日志和监控数据。现提供Prometheus Adapter和StatsD Adapter两种选择。
  • Cache:负责存储和检索Mixer最近处理的请求记录。
  • Client:负责从Envoy获取相关遥测数据。

下图展示了 Mixer 组件之间的关系:

(3)功能模块

⑴ 前置条件

Mixer必须检查配置参数的正确性,应满足以下三个前置条件才能正常工作:

  • 标识符:Mixer必须了解使用哪些组件,特别是Envoy容器的pod和namespaced信息等,这些信息对于配置Mixer的运行至关重要。
  • 策略库:Mixer必须解析一系列策略文件,如白名单、黑名单和流量配额等规则文件,以确保系统的安全和性能。
  • 遥测库:Mixer必须收集实时监控数据,包括通过Prometheus和StatsD平台获取的指标数据等,以实现对系统状态的有效监控。
⑵ 属性表达式

属性表达式代表一个动态值,能够从环境变量、环境变量、Pod标签、任意HTTP头部获取。属性表达式的语法非常灵活,可以集成复杂的运算逻辑和函数调用。Mixer能够解析属性表达式并将其转换为实际值。

⑶ 监控和日志

Mixer整合各个组件产生的远程监控数据,并将其组织为统一的格式的日志文件。Mixer能够将监控数据发送至包括Prometheus、Stackdriver、InfluxDB和Zipkin等在内的监控平台。Mixer能够将运行日志数据发送至 Jaeger和Zipkin等分布式跟踪系统。

⑷ 策略决策

Mixer基于白名单和黑名单的访问控制模型被采用。Mixer能够读取各种策略文件,这些文件定义了服务间的访问控制规则。根据获取的上下文信息、接收的请求数据以及制定的策略规则,Mixer进行策略决策,并返回相应的处理结果。

⑸ 配额管理

Mixer 可以实施速率限制和资源使用控制措施。Mixer 可以解析配置文件以获取配额限制,并动态调整用户的访问频率。

⑹ 遥测数据的聚合

Mixer 负责收集自多个组件的遥测数据,并对这些数据进行整合。Mixer 负责生成标准化的遥测数据格式,包括 Prometheus Metrics Format 和 Google Stackdriver Trace 格式。

⑺ 缓存机制

Mixer 支持请求级缓存功能,能够缓存已访问的服务、版本和资源,从而降低无效请求的频率。缓存机制能够提升_Mixer_的响应速度,并减少_Istio_网格中的延迟问题。

5. Pilot

(1)概述

Pilot 是 Istio 中的一个负责管理和控制 Envoy Sidecar 的组件。Pilot 将请求从订阅的服务端点转发至本地运行的 Envoy 代理,并接收来自 Envoy 的相关指令,同时对服务网格的流量进行控制、管理和监控。其主要职责包括:转发请求至本地运行的 Envoy 代理,接收来自 Envoy 的相关指令,并对服务网格的流量进行控制、管理和监控。其主要职责是:确保服务网格的高效运行和性能优化。

  • 集中化的配置和流量管理:Pilot 从服务注册中心获取服务实例的列表,并为每个实例生成一个配置,Envoy 可以据此与服务端点建立连接。Pilot 可以动态感知服务实例的加入和离开,对 Envoy 的配置进行刷新。
  • 服务发现:Pilot 能从服务注册中心获得服务实例的信息,包括 IP 地址、端口号、SSL 证书等,并将其转发给本地的 Envoy。
  • 负载均衡:Pilot 可以基于多种负载均衡策略,如轮询、随机、基于加权的负载均衡等,将流量转发给本地的 Envoy。
  • 健康检查:Pilot 可以对本地的 Envoy 进行周期性的健康检查,并对异常情况进行恢复。
  • 流量管理:Pilot 可以将来自服务消费方的流量控制,转发到本地运行的 Envoy。Pilot 可以根据预设的路由规则,对流量进行细粒度的控制。
  • 遥测数据:Pilot 可以收集 Envoy 代理的遥测数据,如健康状况、请求计数、流量控制统计等。

(2)组件结构

Pilot 拥有三大组件:

  • 服务发现(Service Discovery):Pilot 会收集服务注册中心的服务信息,并将其映射为 Istio 网络中的端点。Pilot 只会转发集群内部的请求至本地 Envoy 实例,而集群外部的请求不受影响。
  • 负载均衡(Load Balancing):Pilot 会生成负载均衡配置并下发至对应的 Envoy 实例。该功能支持按权重、取最小连接、轮询等多种负载均衡策略。
  • 流量路由(Routing):根据配置的路由规则,Pilot 会将流量转发至本地运行的 Envoy 实例。该模块支持基于 Header 匹配和 URL Path 模糊匹配的流量转发。

下图展示了 Pilot 组件之间的关系:

(3)功能模块

⑴ 服务发现

Pilot通过服务注册中心访问服务实例列表,并为每个实例生成一个Endpoint,其中包含IP地址、端口号、TLS证书等详细信息。Pilot还会根据本地的Envoy感知到新的服务加入或离开集群。

⑵ 负载均衡

Pilot基于配置的负载均衡策略,制定相应的负载均衡配置,并将其部署到本地的Envoy服务器上。Pilot支持多种负载均衡策略,包括按权重、最小连接数以及轮询等方式进行配置管理。

⑶ 流量管理

基于配置的流量管理策略,Pilot按照该策略生成相应的路由配置,并将这些配置部署到本地的Envoy中。该系统支持基于Header字段进行精确匹配以及基于URL路径的模糊匹配,从而实现高效的流量管理。

⑷ 健康检查

Pilot 对本地的 Envoy 进行周期性的健康检查,并对异常情况进行恢复。

⑸ 分布式配置

Pilot 会通过分布式配置存储系统(如 Kubernetes ConfigMap 和 Consul KeyValue Store)系统性地读取配置信息,并将其有效分发至本地的 Envoy 实例。

⑹ 遥测数据

该代理将采集本地Envoy代理的遥测数据,包括但不限于请求计数、请求响应延迟等信息,并提交至监控平台。

6. Citadel

(1)概述

Citadel 是 Istio 中主要负责向工作负载提供CA功能的组件。该组件通过一系列功能模块实现对证书管理、签名验证等功能的支持,具体包括:

  • CA(证书颁发机构):Citadel 自身就扮演着证书颁发机构的角色,为工作负载颁发证书。
  • PKI(公钥基础设施):Citadel 使用公钥基础设施(PKI)来管理和维护证书,包括证书的创建、续订、撤销、吊销等。
  • Identities(身份管理):Citadel 可以创建、绑定和管理各种类型(service account、user、group)的身份。
  • Trust Domain(信任域):Citadel 可以创建和管理属于同一个信任域的多个根证书。

Citadel 具有以下功能特点:

  • 安全性:Citadel 严格把关证书和密钥,并采取一系列安全措施来保障证书的安全。
    • 可扩展性:Citadel 充分挖掘云计算平台的弹性,实现资源的高效利用。
    • 可靠性:Citadel 具备极高的可用性,能够处理多 Availability Zones(AZ)以及跨区域的请求。

(2)组件结构

Citadel 拥有三大组件:

  • 证书与签名管理模块(Certificate & Signature Module):Citadel 提供证书管理与签名服务,支持证书的创建、续订、吊销和撤销操作。
    • 用户、服务账户与组身份管理模块(User、Service Account & Group Identity Management Module):Citadel 实现基于角色的访问控制(RBAC)机制,管理用户、服务账户与组的身份权限。
    • 同一信任域管理模块(Trust Domain Management Module):Citadel 负责创建和管理同一信任域内的根证书,并对整个服务网格实施认证与授权。

下图展示了 Citadel 组件之间的关系:

(3)功能模块

⑴ 证书管理模块

Citadel的证书管理模块负责管理与生成证书,涵盖证书申请、审核、批准以及发布等环节。该模块能够与多种云服务提供商的密钥和证书管理服务进行集成,从而实现私钥和相关证书的生成与存储。

⑵ 身份管理模块

Citadel 的身份管理模块负责处理用户、服务账户、组织单元等身份的管理,并提供相应的 RBAC 权限控制功能。通过整合平台提供的用户管理和权限控制功能,实现对 Citadel 内部资源的同步管理。

⑶ 信任域管理模块

Citadel 的信任域管理模块主要负责管理多个根证书,并负责提供根证书的创建、签名和过期等详细流程。该模块主要通过根证书来验证工作负载证书的真实性,并同时为工作负载提供可信赖的身份认证。

全部评论 (0)

还没有任何评论哟~