Istio是一个提供连接、保护、控制以及观测微服务功能的开放平台。
微服务目前被越来越多的IT企业重视。微服务是将复杂的应用切分为若干服务,每个服务均可以独立开发、部署和伸缩;微服务和容器组合使用,可进一步简化微服务的交付,提升应用的可靠性和可伸缩性。
随着微服务的大量应用,其构成的分布式应用架构在运维、调试、和安全管理等维度变得更加复杂,开发者需要面临更大的挑战,如:服务发现、负载均衡、故障恢复、指标收集和监控,以及A/B测试、灰度发布、蓝绿发布、限流、访问控制、端到端认证等。
Istio应运而生。Istio是一个提供连接、保护、控制以及观测微服务功能的开放平台,提供了一种简单的创建微服务网络的方式,并提供负载均衡、服务间认证以及监控等能力,同时Istio不需要修改服务即可实现以上功能。
Istio提供如下功能:
- 流量管理:控制服务之间的流量及API调用。增强系统的可靠性。
- 鉴权及安全保护:为网格中的服务提供身份验证,并保护服务的流量。增强系统的安全性。
- 策略执行:控制服务之间的访问策略,且不需要改动服务。
- 可观察性: 获取服务之间的流量分布及调用关系。 快速定位问题。
Istio架构
Istio在逻辑上分为控制层面和数据层面:
- 控制层面:管理代理(默认为Envoy),用于管理流量路由、运行时策略执行等。
- 数据层面:由一系列代理(默认为Envoy)组成,用于管理和控制服务之间的网络通信。
Istio主要由以下组件构成:
- Istio管理器(Pilot):负责收集和验证配置,并将其传播到各种Istio组件。它从策略执行模块(Mixer)和智能代理(Envoy)中抽取环境特定的实现细节,为他们提供用户服务的抽象表示,独立于底层平台。此外,流量管理规则(即通用4层规则和7层HTTP/gRPC路由规则)可以在运行时通过Pilot进行编程。
- 策略执行模块(Mixer):负责在服务网格上执行访问控制和使用策略,并从智能代理(Envoy)和其他服务收集遥测数据。依据智能代理(Envoy)提供的属性执行策略。
- Istio安全模块:提供服务间以及用户间的认证,确保在不需要修改服务代码的前提下,增强服务之间的安全性。包括3个组件:
-
身份识别:当Istio运行在Kubernetes时,根据容器Kubernetes提供的服务账号,识别运行服务的主体。
-
Key管理:提供CA自动化生成和管理key和证书。
-
通信安全:通过智能代理(Envoy)在客户端和服务端提供通道(tunnel)保证服务的安全性。
-
- 智能代理(Envoy):作为一个独立的组件与相关微服务部署在同一个Kubernetes的pod上,并提供一系列的属性给策略执行模块(Mixer)。策略执行模块(Mixer)以此作为执行策略的依据,并发送到监控系统。