Service Mesh - Istio

作者: CatchZeng | 来源:发表于2021-04-27 09:19 被阅读0次

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

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

    • 什么是 Istio
    • KubernetesIstio 是什么关系呢?
    • 为什么需要 Istio ?
    • Istio 的核心功能有哪些?
    • Istio 有哪些特性?
    • Istio 的架构是什么样的?

    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

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

    • 服务发现
    • 负载均衡
    • 故障恢复
    • 指标
    • 监控
    • A / B 测试
    • 金丝雀发布
    • 熔断
    • 限速
    • 调用链追踪
    • 访问控制
    • 端到端认证

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

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

    • HTTP、gRPC、WebSocket 和 TCP 通信的自动负载均衡

      gRPC — 可在任何环境中运行的开源高性能 RPC 框架

    • 通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。

    • 可插拔的策略层和配置 API,支持访问控制、速率限制和配额

    • 集群内(包括集群的入口和出口)所有流量的自动度量,日志和跟踪

      集群入口-允许入站连接到达集群服务的一组规则。 集群出口-允许出站连接到达集群服务的一组规则。

    • 具备强大的基于身份的验证和授权,确保群集中服务之间的通信安全。

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

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

    Istio 的核心功能

    连接(Connect)

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

    安全(Secure)

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

    控制(Control)

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

    遥测(Observe)

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

    Istio

    Istio 特性

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

    流量管理

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

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

    安全

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

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

    策略

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

    • 速率限制能动态的限制访问服务的流量
    • Denials、白名单和黑名单用来限制对服务的访问
    • Header重写重定向
    • Istio 还容许你创建自己的策略适配器来添加诸如自定义的授权行为。

    可观察性

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

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

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

    Istio 架构

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

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

    • 数据平面由一组智能代理(Envoy)组成,被部署为 sidecar。这些代理协调和控制所有的微服务之间的所有网络通信。同时,它们也收集和遥测所有网格的流量。
    • 控制平面管理并配置代理来进行流量路由。

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

    Envoy

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

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

    • 动态服务发现
    • 负载均衡
    • TLS 终端
    • HTTP/2 与 gRPC 代理
    • 熔断器
    • 健康检查
    • 基于百分比流量分割的分阶段发布
    • 故障注入
    • 丰富的指标

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

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

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

    • 流量控制功能:通过丰富的 HTTP、gRPC、WebSocket 和 TCP 流量路由规则来执行细粒度的流量控制。
    • 网络弹性特性:重试设置、故障转移、熔断器和故障注入。
    • 安全性和身份验证特性:执行安全性策略以及通过配置 API 定义的访问控制和速率限制。

    Pilot

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

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

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

    • 平台启动一个服务的新实例,该实例通知其平台适配器。
    • 平台适配器使用 Pilot 抽象模型注册实例。
    • Pilot 将流量规则和配置派发给 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 网红,希望能帮助到大家。

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

    • Kubernetes 关注 PodIstio 关注 Service
    • Istio 是个平台,而 Envoy 是非常重要的一个组件,因为许多事情其实是它在做,Istio 更多的是充当适配和规则转发的角色。这也正是 Service Mesh 是 sidecar 模式导致的。因此,Istio 选择了 Envoy 这种用 C++ 开发的高性能代理。在 Service Mesh 世界里,得 sidecar 者得天下
    • 如果部署服务时,遇到配置派发不成功,应该先检查 Galley 组件是否正常,因为 Galley 负责了配置验证
    • 通过架构的描述可知,Istio 在性能与架构的选择中,选择了优先架构

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

    参考

    相关文章

      网友评论

        本文标题:Service Mesh - Istio

        本文链接:https://www.haomeiwen.com/subject/xuuerltx.html