【微服务架构-istio】Istio整体架构

在使用Kubernetes等云平台时,组织会从中获取到大量的益处。然而,采用这些Kubernetes等云平台可能会给 DevOps 团队带来一下压力。开发人员必须使用微服务以满足应用的可移植性,同时,运维团队也将管理大量和复杂的应用。

Istio出现的目的就是想降低微服务部署的复杂性,以减轻开发团队的压力。它是一个完全开源的服务网格,可以透明地分层到现有的分布式应用程序上。Istio 的多样化功能集能够成功高效地运行分布式的微服务架构,并提供保护、连接、控制和监控微服务的统一方法。

l 连接(Connect):智能控制服务之间调用的流量,能够实现灰度升级、AB 测试和红黑部署等功能

安全(Secure):自动为服务之间的调用提供认证、授权和加密。

控制(Control):应用用户定义的 policy,保证资源在消费者中公平分配。

l 监控(Observe):查看服务运行期间的各种数据,比如日志、监控和 跟踪,以了解服务的运行情况。

1 isito价值

Istio 提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控等功能,只需要对服务的代码进行一点或不需要做任何改动。想要让服务支持 Istio,只需要在您的环境中部署一个特殊的 sidecar 代理,使用 Istio 控制平面功能配置和管理代理,拦截微服务之间的所有网络通信:

  • 自动化负载均衡:自动化负载均衡HTTP、gRPC、WebSocket 和 TCP 的流量。
  • 细粒度流量控制:通过丰富的路由规则、重试、故障转移和故障注入,能够对流量行为进行细粒度的控制。
  • 可插入的策略层和配置 API:支持访问控制、速率限制和配额。
  • 指标度量跟踪:对出入集群的所流量(包括入口和出口)进行自动度量指标、日志记录和跟踪。
  • l 安全服务间通信:通过强大的基于身份的验证和授权,在集群中实现安全的服务间通信。

2、istio

Istio 服务网格逻辑上分为 数据平面 (data plane)和 控制平面(control plane) 。

数据平面 由一组以 sidecar 方式部署的智能代理(Envoy)所组成。这些代理可以调节和控制微服务及 Mixer 之间所有的网络通信。

控制平面 负责管理和配置代理来路由流量。此外,控制平面也配置 Mixer 以实施策略和收集遥测数据。

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

Istio Architecture

2.1 Envoy(代理服务)

Envoy是以 C++ 开发的高性能代理,用于代理服务网格中所有服务的入站和出站流量。Envoy 的许多内置功能被 istio 发扬光大,例如:

  • l 动态服务发现
  • l 负载均衡
  • l TLS 终止
  • l HTTP/2 & gRPC 代理
  • l 熔断器
  • l 健康检查、基于百分比流量拆分的灰度发布
  • l 故障注入
  • l 丰富的度量指标

在Istion中,Envoy 被部署为 sidecar ,和对应服务部署在同一个 Kubernetes pod 中。这允许 Istio 将大量关于流量行为的信号作为属性提取出来,而这些属性又可以在 Mixer 中用于执行策略决策,并发送给监控系统,以提供整个网格行为的信息。

2.2 Mixer(访问控制)

Mixer 是一个平台独立的组件,负责在服务网格上执行访问控制使用策略,并从 Envoy 代理和其他服务中收集遥测数据(telemetry data)。代理提取请求级属性,并发送它们到 Mixer中 进行评估。

Mixer 中包括一个灵活的插件模型,使其能够接入到各种主机环境和基础设施后端,从这些细节中抽象出 Envoy 代理和 Istio 管理的服务。

2.3 Pilot(服务发现)

Pilot 用于为 Envoy sidecar 提供服务发现智能路由(例如 A/B 测试、金丝雀部署等)、流量管理错误处理(超时、重试和熔断)功能。Pilot将控制流量行为的高级路由规则转换为特定于 Envoy 的配置,并在运行时将它们分发给 sidecar。

Pilot 将平台特定的服务发现机制进行抽象化,并将其合成为符合 Envoy 数据平面 API 的任何 sidecar 都可以使用的标准格式。这种松散耦合使得 Istio 能够在多种平台环境下运行(例如,Kubernetes、Consul、Nomad),并能够保持流量管理的相同操作界面。

2.4 Citadel(认证服务)

Citadel 通过内置身份和凭证管理可以提供强大的服务间和最终用户身份验证。可用于升级服务网格中未加密的流量,并为运维人员提供基于服务标识而不是网络控制的强制执行策略的能力。从 0.5 版本开始,Istio 支持基于角色的访问控制,以控制谁可以访问特定的服务。

2.5 Galley

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

3 核心功能特性

Istio在服务网络中统一提供了许多流量管理、安全管理、监控管理、平台支持、以及集成和定制这些关键功能特性。

3.1 流量管理

通过Istio的简单规则配置和流量路由,可以控制服务之间流量。Istio简化了诸如断路器(circuit breaker),超时(timeout)和重试(retry)之类的服务级别属性的配置。并能够轻而易举地实现一些重要的任务,如A / B测试,canary部署,以及具有基于百分比的流量拆分的分阶段部署。

借助对流量的更好可见性和开箱即用的故障恢复功能,无论遇到什么情况,都可以在问题引起问题之前及时发现问题,使呼叫更加可靠,网络也更加强大。

3.2 安全管理

Istio的安全功能使开发人员可以将精力集中在应用程序级别上。Istio提供基础安全通信通道,以及大规模管理服务通信的身份验证,授权和加密。借助Istio,默认情况下可以保护服务通信的安全,从而能够在各种协议和运行时之间一致地实施策略,所有这些操作几乎不需要更改应用程序。

尽管Istio是独立于平台的,但将其与Kubernetes(或基础架构)网络策略配合使用,其好处更大,包括能够在网络和应用程序层保护Pod到Pod或服务到服务的通信的能力。

3.3 监控管理

Istio强大的跟踪,监视和日志记录功能使您可以深入了解服务网格部署。借助Istio的监视功能,可以真正了解服务性能如何影响上游和下游事物。

Istio的Mixer组件负责策略控制和遥测收集。它提供了后端抽象和中介,使Istio的其余部分与各个基础架构后端的实现细节隔离开来,并为操作员提供了对网格和基础架构后端之间所有交互的精细控制。所有这些功能可以更有效地设置,监视和实施服务上的SLO。当然,最重要的可以快速有效地检测和修复问题。

3.4 平台支持

Istio是独立于平台的应用,支持在多种环境中运行,包括Kubernetes和Mesos等的环境。Istio当前支持:

  • l 在Kubernetes上的部署服务;
  • l 在Consul中注册的服务;
  • l 在虚拟机上运行的服务。

3.5 集成和定制

Istio的策略执行组件允许进行扩展和定制,以与现有的ACL,日志记录,监视,配额,审核等解决方案镜像集成。


作者简介:季向远,本文版权归原作者所有。微博:ik8s​​​​

K8S中文社区微信公众号

评论 抢沙发

登录后评论

立即登录