架构综述
Istio
在逻辑上分为数据平面(data plane
)和控制平面(control plane
)两部分:
- 数据平面:由一系列以
sidecar
形式部署的智能代理(Envoy
)组成。这些代理可以调节和控制微服务及混合器(Mixer)之间的所有网络通信 - 控制平面:负责管理和配置代理来路由流量,除此之外控制平面还配置混合器(
Mixer
)以执行策略和收集遥测数据
数据平面
Envoy
是以C++开发的高性能代理,用于接管服务网格中所有服务的所有inbound
和outbound
流量。 Istio实际上利用了很多Envoy已有的特性,例如:服务的动态发现、负载均衡、TSL终止、HTTP/2和gRPC代理、断路器、健康检查、基于百分比流量拆分的灰度发布、故障注入以及丰富的度量指标。- Envoy以sidecar部署,与对应的服务在同一个Kubernetes Pod中。这样的部署方式使得Istio可以将大量了关于流量行为的信号作为属性(
Attribute
)提取出来。这些属性可以被用来在混合器(Mixer)中执行策略决策,并发送给监控系统,以提供整个Service Mesh的行为信息。Sidecar模式允许我们将istio的功能添加到现有的部署中,而无需重构或重写现有的代码。
控制平面
Pilot为 Envoy
sidecar
提供服务发现功能,为智能路由(例如 A/B 测试、金丝雀部署等)和弹性(超时、重试、熔断器等)提供流量管理功能。 将控制流量行为的高级路由规则转换为Envoy的相关配置,并在运行时将它们传播到sidecar。Mixer分为
Policy
和Telemetry
两个子模块。Policy
用于向Envoy提供准入策略控制,黑白名单控制,速率限制等相关策略;Telemetry
为Envoy提供了数据上报和日志搜集服务,以用于监控告警和日志查询。Galley在Istio中,承担配置的导入、处理和分发任务,为Istio提供了配置管理服务,提供在k8s服务端验证Istio的
CRD
资源的合法性的方法,是整个控制面的配置管理中心。Citadel主要关注安全,为服务之间以及与终端用户提供认证、授权、凭据管理等功能。