Istio是一个由Google,IBM和Lyft团队合作开发的开源Service Mesh框架。Istio作为云原生时代下承 Kubernetes、上接Serverless架构的重要基础设施层,提供了基于微服务应用程序复杂性的解决方案。
Istio 作为透明的一层部署到现有的分布式应用程序里。它也是一个平台,拥有可以集成任何日志、遥测和策略系统的API接口。Istio 的多样化的特性使您能够高效地运行分布式微服务架构,并提供统一的方式来连接、保护、控制和观察服务。Istio 有助于降低部署的复杂性,并减轻开发团队的压力。
Kubernetes 提供了部署、升级和有限的运行流量管理能力,但并不具备熔断、限流降级、调用链追踪等能力。Kubernetes 的本质是通过声明式配置对应用进行生命周期管理,其强项在于容器的调度和编排,而 Istio 的本质是提供应用间的流量和安全以及可观察性等。Istio 很好地补齐了 Kubernetes 在微服务治理上的诸多能力,为 Kubernetes 提供更好的应用和服务管理。因此,Istio 与 Kubernetes 是极为互补的。
微服务体系带给我们很多好处,但也带来一些问题:
实现这些功能不但需要花费非常多的精力而且对业务系统也会有极大的入侵;可能有人会说将这些功能统一封装起来,但即使封装了这些功能也需要业务系统集成并且这个中间模块升级怎么办?换一种开发语言这个中间模块是否还能顺利支持? Istio的出现解决了这些问题。
Istio 通过负载平衡,服务到服务的身份验证,监控等功能,可以轻松创建已部署服务的网络,而服务的代码只需很少更改甚至无需更改。 Istio 通过在整个环境中部署特殊的Sidecar代理来支持服务,以拦截微服务之间的所有网络通信,然后使用控制平面功能配置和管理Istio,其中包括:
HTTP、gRPC、WebSocket 和 TCP 通信的自动负载均衡
gRPC — 可在任何环境中运行的开源高性能 RPC 框架
通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制
可插拔的策略层和配置 API,支持访问控制、速率限制和配额
集群内(包括集群的入口和出口)所有流量的自动度量,日志和跟踪
集群入口-允许入站连接到达集群服务的一组规则。 集群出口-允许出站连接到达集群服务的一组规则
具备强大的基于身份的验证和授权,确保群集中服务之间的通信安全
Istio 为可扩展性而设计,可以满足不同的部署需求。
借助 Istio 可以轻松地处理微服务体系带来的一系列问题,让开发人员更专注于业务本身。
Istio 以统一的方式提供了许多跨服务网络的关键功能:
Istio 简单的规则配置和流量路由允许您控制服务之间的流量和 API 调用过程。Istio 简化了服务级属性(如熔断器、超时和重试)的配置,并且让它轻而易举的执行重要的任务(如A/B 测试、金丝雀发布和按流量百分比划分的分阶段发布)。
有了更好的对流量的可视性和开箱即用的故障恢复特性,您就可以在问题产生之前捕获它们,无论面对什么情况都可以使调用更可靠,网络更健壮。
Istio 的安全特性解放了开发人员,使其只需要专注于应用程序级别的安全。Istio 提供了底层的安全通信通道,并为大规模的服务通信管理认证、授权和加密。有了 Istio,服务通信在默认情况下就是受保护的,可以让您在跨不同协议和运行时的情况下实施一致的策略——而所有这些都只需要很少甚至不需要修改应用程序。
Istio 是独立于平台的,可以与 Kubernetes(或基础设施)的网络策略一起使用。但它更强大,能够在网络和应用层面保护pod 到 pod或者服务到服务之间的通信。
Istio 允许您为应用程序配置自定义的策略并在运行时执行规则,例如:
1.速率限制能动态的限制访问服务的流量
2.Denials、白名单和黑名单用来限制对服务的访问
3.Header 的重写和重定向
4.Istio 还允许你创建自己的**策略适配器**来添加诸如自定义的授权行为。
Istio 健壮的追踪、监控和日志特性让您能够深入的了解服务网格部署。通过 Istio 的监控能力,可以真正的了解到服务的性能是如何影响上游和下游的;而它的定制 Dashboard 提供了对所有服务性能的可视化能力,并让您看到它如何影响其他进程。
Istio 的Mixer(1.5版本后移除)组件负责策略控制和遥测数据收集。它提供了后端抽象和中介,将一部分 Istio 与后端的基础设施实现细节隔离开来,并为运维人员提供了对网格与后端基础实施之间交互的细粒度控制。
所有这些特性都使您能够更有效地设置、监控和加强服务的SLO。当然,底线是您可以快速有效地检测到并修复出现的问题。
注:以1.5以后版本为例,Mixer组件已经移除
Istio 中的流量分为数据平面流量和控制平面流量。数据平面流量是指工作负载的业务逻辑发送和接收的消息。控制平面流量是指在 Istio 组件之间发送的配置和控制消息用来编排网格的行为。Istio 中的流量管理特指数据平面流量
Istio 使用 Envoy 代理的扩展版本。Envoy 是用 C++ 开发的高性能代理,用于协调服务网格中所有服务的入站和出站流量。Envoy 代理是唯一与数据平面流量交互的 Istio 组件。
Envoy 代理被部署为服务的 sidecar,在逻辑上为服务增加了 Envoy 的许多内置特性,例如:
这种 sidecar 部署允许 Istio 提取大量关于流量行为的信号作为属性。反之,Istio 可以使用这些属性来执行决策,并将它们发送到监控系统,以提供整个网格的行为信息。
sidecar代理模型还允许您向现有的部署添加Istio功能,而不需要重新设计架构或重写代码。
由Envoy代理启用的一些Istio的功能和任务包括:
Pilot 为 Envoy sidecar 提供服务发现、用于智能路由的流量管理功能(例如,A/B 测试、金丝雀发布等)以及弹性功能(超时、重试、熔断器等)。
Pilot 将控制流量行为的高级路由规则转换为特定于环境的配置,并在运行时将它们传播到 sidecar。Pilot 将特定于平台的服务发现机制抽象出来,并将它们合成为任何符合 Envoy API 的 sidecar 都可以使用的标准格式。
下图展示了平台适配器和 Envoy 代理如何交互。
您可以使用 Istio 的流量管理 API 来指示 Pilot 优化 Envoy 配置,以便对服务网格中的流量进行更细粒度地控制。
Citadel 通过内置的身份和证书管理,可以支持强大的服务到服务以及最终用户的身份验证。您可以使用 Citadel 来升级服务网格中的未加密流量。使用 Citadel,operator 可以执行基于服务身份的策略,而不是相对不稳定的 3 层或 4 层网络标识。从 0.5 版开始,您可以使用 Istio 的授权特性来控制谁可以访问您的服务。
Galley是Istio的配置验证、提取、处理和分发组件。它负责将其余的 Istio 组件与从底层平台(例如 Kubernetes)获取用户配置的细节隔离开来。
本文通过问题式的方式介绍了 Istio 这个 Service Mesh 网红,希望能帮助到大家。
以下是一些总结:
Istio官网
Istio分步指南(一):Istio简介
非知识的创造者,只是知识的搬运工!