Istio 学习记录
一、简介
Istio是ServiceMesh的产品化落地。
(1) 它帮助微服务之间建立连接,帮助研发团队更好的管理与监控微服务,并使得系统架构更加安全。
(2) 它帮助微服务分层解耦,解耦后的proxy层能够更加专注于提供基础架构能力,例如:
- 服务发现(discovery)
- 负载均衡(load balancing)
- 故障恢复(failure recovery)
- 服务度量(metrics)
- 服务监控(monitoring)
- A/B测试(A/B testing)
- 灰度发布(canary rollouts)
- 限流限速(rate limiting)
- 访问控制(access control)
- 身份认证(end-to-end authentication)
(3) 它使得业务工程团队与基础架构团队都更加高效的工作,各自专注于自己的工作,更好的彼此赋能。
二、架构图
图一
图二
服务(最上面的小红框),通过本地通讯与proxy交互。
数据平面,由一系列proxy组成(中间一层的两个小红框),核心职责是:高效转发;接收和实施来自mixer的策略;
控制平面(底下的大红框),核心是控制与应用,核心职责是:管理和配置边车代理;通过mixer实施策略与收集来自边车代理的数据;
三、架构及模块
Istio采用二层架构,五大模块,进行微服务ServiceMesh解耦:
(1) 数据平面,主要负责高效转发
- envoy模块:即proxy;
(2) 控制平面,主要负责控制与应用
- mixer模块:支持跨平台,标准化API的adapter;
- pilot模块:控制与配置envoy的大部分策略;
- citadel模块:安全相关;
- galley模块:与底层平台(例如:K8S)配置解耦;
四、模块功能详述
数据面核心组件
Envoy的核心职责是高效转发,更具体的,它具备这样一些能力:
- 服务发现
- 负载均衡
- 安全传输
- 多协议支持,例如HTTP/2,gRPC
- 断路器(Circuit breakers)
- 健康检查
- 百分比分流路由
- 故障注入(Fault injection)
- 系统度量
控制面核心组件
Mixer
Mixer的一些核心能力是:
- 跨平台,作为其他组件的adapter,实现Istio跨平台的能力;
- 和Envoy通讯,实时各种策略
- 和Envoy通讯,收集各种数据
Mixer的设计核心在于“插件化”,这种模型使得Istio能够适配各种复杂的主机环境,以及后端基础设施。
Pilot
Pilot作为非常重要的控制平面组件,其核心能力是:
- 为Envoy提供服务发现能力;
- 为Envoy提供各种智能路由管理能力,例如A/B测试,灰度发布;
- 为Envoy提供各种弹性管理能力,例如超时,重试,断路策略。
Pilot的设计核心在于“标准化”,它会将各种流控的控制命令转化为Envoy能够识别的配置,并在运行时,将这些指令扩散到所有的Envoy。
Pilot将这些能力抽象成通用配置的好处是,所有符合这种标准的Envoy都能够接入到Pilot来。
潜台词是,任何第三方可以实现自己的proxy,只要符合相关的API标准,都可以和Pilot集成。
Citadel
Citadel组件,它提供终端用户身份认证,以及服务到服务的访问控制。总之,这是一个和安全相关的组件。
Galley
Gally组件,它是一个配置获取、校验、处理、分发的组件,它的设计核心在于“解耦”,它将“从底层平台(例如:K8S)获取用户配置”与Istio解耦开来。
======================================================================
Istio在架构上同样分为数据面和控制面两大块。
数据面
数据面控制服务所有进出流量,并植入服务治理逻辑。数据面同时负责控制面制定的策略的执行,并上报遥感数据至控制面。
Istio数据面默认的sidecar为Envoy,Envoy是L4/L7的高性能网络代理组件。
控制面
控制面由Pilot、Mixer、Citadel、Galley四部分组成。
Pilot
提供服务发现、流量动态路由和服务间的弹性能力(超时、重试、速率限制、熔断等)。
Mixer
承担ACL、策略执行、黑白名单等职责,并收集服务遥感数据。
Citadel
提供安全证书下发和管理的能力。
Galley
Galley提供抽象的、统一的配置校验能力。
参考资料
Istio入门:什么是Istio?Istio的4个主要功能和实现原理