1. 什么是istio
云平台为使用它们的组织提供了丰富的好处。然而,不可否认的是,采用云技术会给devops团队带来压力。开发人员必须使用微服务来设计可移植性,同时运营商正在管理非常大的混合和多云部署。istio允许您连接、保护、控制和观察服务。

在高层次上,ISTIO有助于减少这些部署的复杂性,并减轻开发团队的压力。它是一个完全透明的开源服务网格,透明地覆盖现有的分布式应用程序。它也是一个平台,包括允许它集成到任何日志平台、遥测或策略系统中的api。istio的多种功能集使您能够成功、高效地运行分布式微服务体系结构,并提供一种统一的方式来保护、连接和监视微服务。

ISTIO的基础概念

istio架构详解 istio架构和原理_ide


istio架构详解 istio架构和原理_istio_02


istio架构详解 istio架构和原理_istio_03


istio架构详解 istio架构和原理_istio架构详解_04


istio架构详解 istio架构和原理_微服务_05


2. 什么是服务网格

ISTIO解决了开发人员和运营商在单片应用程序向分布式微服务架构过渡时面临的挑战。要了解如何实现,可以更详细地查看istio的服务网格。

服务网格用于描述组成此类应用程序的微服务网络以及它们之间的交互。随着服务网格的规模和复杂性的增长,它变得越来越难以理解和管理。它的需求可以包括发现、负载平衡、故障恢复、度量和监视。服务网格通常还具有更复杂的操作需求,如a/b测试、金丝雀部署、速率限制、访问控制和端到端身份验证。

ISTIO提供了对整个服务网格的行为洞察力和操作控制,提供了一个完整的解决方案来满足微服务应用程序的各种需求。
3. 为什么要使用istio
ISTIO使创建一个包含负载平衡、服务到服务身份验证、监视等功能的已部署服务的网络变得非常容易,而服务代码中很少或根本没有代码更改。通过在整个环境中部署一个特殊的sidecar代理来为服务添加istio支持,该代理拦截微服务之间的所有网络通信,然后使用其控制平面功能配置和管理istio,包括:

**HTTP、GRPC、WebSocket和TCP流量的自动负载平衡。
通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。
支持访问控制、速率限制和配额的可插入策略层和配置api。
集群内所有流量的自动度量、日志和跟踪,包括集群入口和出口。
使用基于身份的强身份验证和授权来保护群集中的服务到服务通信。
istio是为可扩展性而设计的,可以满足不同的部署需求。**

4.核心功能

istio架构详解 istio架构和原理_ide_06


ISTIO在服务网络中统一提供了许多关键功能:

4.1.流量管理

istio的简单规则配置和流量路由允许您控制服务之间的流量和api调用。ISTIO简化了诸如断路器、超时和重试等服务级别属性的配置,并使设置重要任务(如A/B测试、金丝雀卷展和具有基于百分比的流量分割的分阶段卷展)变得轻而易举。

有了更好的流量可见性和开箱即用的故障恢复功能,可以在问题产生之前发现问题,使呼叫更可靠,网络更健壮,无论面临什么情况。
4.2 安全

ISTIO的安全功能使开发人员可以在应用程序级别上专注于安全性。ISTIO提供了底层的安全通信通道,并按比例管理服务通信的身份验证、授权和加密。使用istio,服务通信在默认情况下是安全的,允许您在不同的协议和运行时一致地执行策略—所有这些都很少或根本没有应用程序更改。

虽然istio是独立于平台的,与kubernetes(或基础设施)网络策略一起使用,但它的好处更大,包括在网络和应用层保护pod到pod或服务到服务通信的能力。
4.3 可观察性
istio强大的跟踪、监视和日志记录功能让您深入了解服务网格部署。通过ISTIO的监视功能,您可以真正了解服务性能如何影响上游和下游的情况,而其自定义的仪表板提供了对所有服务性能的可见性,并让您了解该性能如何影响其他流程。

ISTIO的mixer组件负责策略控制和遥测收集。它提供了后端抽象和中介,将istio的其余部分与单个基础架构后端的实现细节隔离开来,并为操作员提供了对网格和基础架构后端之间的所有交互的细粒度控制。

所有这些特性使您能够更有效地设置、监视和强制服务上的slo。当然,底线是您可以快速有效地检测和修复问题。

4.4平台支持性
ISTIO是独立于平台的,设计用于在各种环境中运行,包括跨越云、内部部署、Kubernetes、Mesos等环境。你可以把istio部署在 Kubernetes, Nomad with Consul 。ISTIO目前支持:

Kubernetes上的服务部署

Consul注册服务

在单个vm上运行

与k8s 的结合

istio架构详解 istio架构和原理_istio_07


istio架构详解 istio架构和原理_微服务_08


5.集成与定制

ISTIO的策略执行组件可以被扩展和定制,以与ACL、日志记录、监视、配额、审计以及更多的现有解决方案集成。

5.1 istio的架构

istio服务网格在逻辑上分为数据平面和控制平面

数据平面由一组部署为sidecar智能代理(特使)组成。这些代理中介和控制微服务与Mixer、通用策略和遥测集线器之间的所有网络通信。

控制平面管理和配置代理以路由业务。此外,控制平面配置Mixer以强制执行策略和收集遥测。

下图显示了构成每个平面的不同组件:

istio架构详解 istio架构和原理_微服务_09


5.2 Envoy

envoy官方文档

https://www.envoyproxy.io/docs/envoy/latest/intro/what_is_envoy

istio架构详解 istio架构和原理_ide_10


istio架构详解 istio架构和原理_应用程序_11


istio使用的是Envoy代理的扩展版本。特使是C++开发的高性能代理,用于服务网格中所有服务的所有入站和出站通信。ISTIO利用了特使的许多内置功能,例如:

Dynamic service discovery

Load balancing

TLS termination

HTTP/2 and gRPC proxies

Circuit breakers

Health checks

Staged rollouts with %-based traffic split

Fault injection

Rich metrics

Envoy是作为一个sidecar部署到相关服务在kubernets的pod里。此部署允许istio将大量关于流量行为的信号提取为属性。反过来,istio可以在mixer中使用这些属性来强制执行策略决策,并将它们发送到监视系统,以提供有关整个网格行为的信息。

SIDECAR代理模型还允许您将ISTIO能力添加到现有的部署中,而不需要重新构建或重写代码。

5.3 Mixer

istio架构详解 istio架构和原理_应用程序_12


Mixer是独立于平台的组件。mixer在服务网格中实施访问控制和使用策略,并从特使代理和其他服务收集遥测数据。代理提取请求级属性,并将其发送到mixer进行评估。您可以在我们的混音器配置文档中找到有关此属性提取和策略评估的更多信息。Mixer包括一个灵活的插件模型。此模型使istio能够与各种主机环境和基础架构后端进行接口。因此,istio从这些细节中抽象出了特使代理和istio管理的服务。

5.4 Pilot

istio架构详解 istio架构和原理_istio架构详解_13


Pilot为sidecar提供服务发现、智能路由的流量管理功能(如A/B测试、金丝雀推出等)和弹性(超时、重试、断路器等)。pilot将控制流量行为的高级路由规则转换为特定于envoy的配置,并在运行时将它们传播到sidecars。Pilot抽象了特定于平台的服务发现机制,并将其合成为任何符合特使数据平面API的Sidecar都可以使用的标准格式。这种松耦合允许istio在多个环境(如kubernetes、consul或nomad)上运行,同时为流量管理维护相同的操作员界面。

5.5 Citadel

istio架构详解 istio架构和原理_应用程序_14


citadel通过内置的身份和凭据管理实现了强服务到服务和最终用户身份验证。您可以使用Citadel升级服务网格中的未加密流量。使用citadel,运营商可以基于服务标识而不是相对不稳定的第3层或第4层网络标识来实施策略。从0.5版开始,您可以使用istio的授权功能来控制谁可以访问您的服务。

5.6 Galley

Galley是ISTIO的配置验证、摄取、处理和分发组件。它负责将其余的istio组件与从底层平台(例如kubernetes)获取用户配置的细节隔离开来。

6. ISTIO的设计目的

一些关键的设计目标告知了istio的架构。这些目标对于使系统能够处理大规模和高性能的服务至关重要。

最大化透明度:采用ISTIO,操作员或开发人员需要尽可能少的工作量来获得来自系统的实际价值。为此,istio可以自动将自己注入到服务之间的所有网络路径中。ISTIO使用SIDACAR代理来捕获流量,并且在可能的情况下,自动编程网络层以通过这些代理路由流量,而不必对部署的应用程序代码进行任何更改。在Kubernetes,代理被注入到POD中,并且通过编程IPTATE规则捕获流量。一旦siDar代理被注入并且流量路由被编程,ISTIO可以调解所有的流量。这一原则也适用于业绩。将istio应用于部署时,运营商会看到所提供功能的资源成本的最小增加。组件和api的设计都必须考虑性能和规模。

可扩展性:随着运营商和开发人员越来越依赖istio提供的功能,系统必须随着他们的需求而增长。在我们继续添加新特性的同时,最大的需求是能够扩展策略系统,与其他策略和控制源集成,并将网格行为的信号传播到其他系统进行分析。策略运行时支持插入其他服务的标准扩展机制。此外,它允许扩展其词汇表,以允许基于网格生成的新信号实施策略。

可移植性:使用istio的生态系统在许多方面都不同。ISTIO必须在任何云端或本地环境中运行,只需最少的努力。将基于istio的服务移植到新环境的任务必须很简单。使用istio,您可以操作部署到多个环境中的单个服务。例如,可以在多个云上部署以实现冗余。

策略一致性:将策略应用于服务之间的api调用,可以提供对网格行为的大量控制。但是,将策略应用于不一定在api级别表示的资源也同样重要。例如,将配额应用于ml训练任务消耗的cpu量比将配额应用于启动工作的调用更有用。为此,istio使用自己的api将策略系统维护为一个独立的服务,而不是将策略系统烘焙到代理sidecar中,允许服务根据需要直接与之集成。

官方文档地址:
https://istio.io/docs/concepts/what-is-istio/