微服务 DevOps

Service Mesh - Istio

2021-04-27  本文已影响0人  CatchZeng

原文:https://makeoptim.com/service-mesh/istio

上一篇 通过介绍互联网架构的演进过程,让大家对 Service Mesh 有了初步的认识。但大家可能都会有以下几个疑问:

Istio

Istio

Istio 是一个由 GoogleIBMLyft 团队合作开发的开源 Service Mesh 框架。Istio 作为云原生时代下承 Kubernetes、上接 Serverless 架构的重要基础设施层,提供了基于微服务应用程序复杂性的解决方案。

Istio 作为透明的一层部署到现有的分布式应用程序里。它也是一个平台,拥有可以集成任何日志、遥测和策略系统的 API 接口。Istio 的多样化的特性使您能够高效地运行分布式微服务架构,并提供统一的方式来连接、保护、控制观察服务。Istio 有助于降低部署的复杂性,并减轻开发团队的压力。

Kubernetes 和 Istio

Kubernetes 提供了部署升级有限的运行流量管理能力,但并不具备熔断限流降级调用链追踪等能力。Kubernetes 的本质是通过声明式配置对应用进行生命周期管理,其强项在于容器的调度和编排,而 Istio 的本质是提供应用间的流量安全以及可观察性等。Istio 很好地补齐了 Kubernetes 在微服务治理上的诸多能力,为 Kubernetes 提供更好的应用和服务管理。因此,Istio 与 Kubernetes 是极为互补的。

Istio

为什么需要 Istio

微服务体系带给我们很有好处,但也带来一些问题:

大家可成想过,要实现这些,需要花多少精力,对业务的入侵性又有多少?

Istio 通过负载平衡,服务到服务的身份验证,监控等功能,可以轻松创建已部署服务的网络,而服务的代码只需很少更改甚至无需更改。 Istio 通过在整个环境中部署特殊的 Sidecar 代理来支持服务,以拦截微服务之间的所有网络通信,然后使用 “控制平面” 功能配置和管理 Istio,其中包括:

Istio 为可扩展性而设计,可以满足不同的部署需求。

借助 Istio 可以轻松地处理微服务体系带来的一系列问题,让我们更专注于业务本身

Istio 的核心功能

连接(Connect)

智能控制服务之间的流量和 API 调用,进行一系列测试,并通过灰度发布逐步升级。

安全(Secure)

通过托管身份验证、授权和服务之间通信加密,自动为服务通信提供安全保障。

控制(Control)

应用并确保执行流量控制策略,使得资源在客户侧的公平分配。

遥测(Observe)

对服务进行多样化、自动化的追踪、监控以及记录日志,以便实时了解服务运行状态。

Istio

Istio 特性

Istio 以统一的方式提供了许多跨服务网络的关键功能:

流量管理

Istio 简单的规则配置和流量路由允许您控制服务之间的流量和 API 调用过程。Istio 简化了服务级属性(如熔断器超时重试)的配置,并且让它轻而易举的执行重要的任务(如 A/B 测试金丝雀发布按流量百分比划分的分阶段发布)。

有了更好的对流量的可视性和开箱即用的故障恢复特性,您就可以在问题产生之前捕获它们,无论面对什么情况都可以使调用更可靠,网络更健壮。

安全

Istio 的安全特性解放了开发人员,使其只需要专注于应用程序级别的安全。Istio 提供了底层的安全通信通道,并为大规模的服务通信管理认证授权加密。有了 Istio,服务通信在默认情况下就是受保护的,可以让您在跨不同协议和运行时的情况下实施一致的策略——而所有这些都只需要很少甚至不需要修改应用程序。

Istio 是独立于平台的,可以与 Kubernetes(或基础设施)的网络策略一起使用。但它更强大,能够在网络和应用层面保护pod 到 pod 或者服务到服务之间的通信。

策略

Istio 允许您为应用程序配置自定义的策略并在运行时执行规则,例如:

可观察性

Istio 健壮的追踪监控日志特性让您能够深入的了解服务网格部署。通过 Istio 的监控能力,可以真正的了解到服务的性能是如何影响上游和下游的;而它的定制 Dashboard 提供了对所有服务性能的可视化能力,并让您看到它如何影响其他进程。

Istio 的 Mixer 组件负责策略控制遥测数据收集。它提供了后端抽象和中介,将一部分 Istio 与后端的基础设施实现细节隔离开来,并为运维人员提供了对网格与后端基础实施之间交互的细粒度控制。

所有这些特性都使您能够更有效地设置、监控和加强服务的 SLO。当然,底线是您可以快速有效地检测到并修复出现的问题。

Istio 架构

注:今后的文章采用的 Istio 为目前最新的 1.5 版本。该版本已经去掉了 Mixer 组件。

Istio 服务网格从逻辑上分为数据平面控制平面

Istio 中的流量分为数据平面流量控制平面流量。数据平面流量是指工作负载的业务逻辑发送和接收的消息。控制平面流量是指在 Istio 组件之间发送的配置控制消息用来编排网格的行为。Istio 中的流量管理特指数据平面流量。

Envoy

Istio 使用 Envoy 代理的扩展版本。Envoy 是用 C++ 开发的高性能代理,用于协调服务网格中所有服务的入站和出站流量。Envoy 代理是唯一与数据平面流量交互的 Istio 组件。

Envoy 代理被部署为服务的 sidecar,在逻辑上为服务增加了 Envoy 的许多内置特性,例如:

这种 sidecar 部署允许 Istio 提取大量关于流量行为的信号作为属性。反之,Istio 可以使用这些属性来执行决策,并将它们发送到监控系统,以提供整个网格的行为信息。

sidecar 代理模型还允许您向现有的部署添加 Istio 功能,而不需要重新设计架构或重写代码。

由 Envoy 代理启用的一些 Istio 的功能和任务包括:

Pilot

Pilot 为 Envoy sidecar 提供服务发现、用于智能路由的流量管理功能(例如,A/B 测试、金丝雀发布等)以及弹性功能(超时、重试、熔断器等)。

Pilot 将控制流量行为的高级路由规则转换为特定于环境的配置,并在运行时将它们传播到 sidecar。Pilot 将特定于平台的服务发现机制抽象出来,并将它们合成为任何符合 Envoy API 的 sidecar 都可以使用的标准格式。

下图展示了平台适配器和 Envoy 代理如何交互。

这种松耦合允许 Istio 在 Kubernetes、Consul 或 Nomad 等多种环境中运行,同时维护相同的 operator 接口来进行流量管理。

您可以使用 Istio 的流量管理 API 来指示 Pilot 优化 Envoy 配置,以便对服务网格中的流量进行更细粒度地控制。

Citadel

Citadel 通过内置的身份和证书管理,可以支持强大的服务到服务以及最终用户的身份验证。您可以使用 Citadel 来升级服务网格中的未加密流量。使用 Citadel,operator 可以执行基于服务身份的策略,而不是相对不稳定的 3 层或 4 层网络标识。从 0.5 版开始,您可以使用 Istio 的授权特性来控制谁可以访问您的服务。

Galley

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

小结

本文通过问题式的方式介绍了 Istio 这个 Service Mesh 网红,希望能帮助到大家。

以下是我个人的一些理解:

这些理解供大家参考,也欢迎大家留言讨论,咱们下一篇见。

参考

上一篇下一篇

猜你喜欢

热点阅读