Istio 是什么?
对许多公司来说,Docker 和 Kubernetes 这样的工具已经解决了部署问题,但是他们还没有解决运行时的问题,这就是服务网格(Service Mesh)的由来。
1、什么是服务网格?
服务网格(Service Mesh)用来描述组成这些应用程序的微服务网络以及它们之间的交互。
它是一个用于保证服务间安全、快速、可靠通信的网络代理组件,是随着微服务和云原生应用兴起而诞生的基础设施层。
它通常以轻量级网络代理的方式同应用部署在一起。比如 Sidecar 方式,如下图所示:
我们对上图做个解释:Service Mesh 设计一般划分为两个模块,控制面和数据面。对于应用来说,所有流量都会经过数据面进行转发。
顺利转发的前提:数据面需要知道转发的目标地址,目标地址本身是由一些业务逻辑来决定的(例如服务发现)。
所以自然而然地,我们可以推断控制面需要负责管理数据面能正常运行所需要的一些配置:
- 需要知道某次请求转发去哪里:服务发现配置。
- 外部流量进入需要判断是否已经达到服务流量上限:限流配置。
- 依赖服务返回错误时,需要能够执行相应的熔断逻辑:熔断配置。
Serivce Mesh 可以看作是一个位于 TCP/IP 之上的网络模型,抽象了服务间可靠通信的机制。
但与 TCP 不同,它是面向应用的,为应用提供了统一的可视化和控制。
Service Mesh 具有如下优点:
- 屏蔽分布式系统通信的复杂性(负载均衡、服务发现、认证授权、监控追踪、流量控制等等),服务只用关注业务逻辑。
- 真正的语言无关,服务可以用任何语言编写,只需和 Service Mesh 通信即可。
- 对应用透明,Service Mesh 组件可以单独升级。
Service Mesh 目前也面临一些挑战:
- Service Mesh 组件以代理模式计算并转发请求,一定程度上会降低通信系统性能,并增加系统资源开销。
- Service Mesh 组件接管了网络流量,因此服务的整体稳定性依赖于 Service Mesh,同时额外引入的大量 Service Mesh 服务实例的运维和管理也是一个挑战。
随着服务网格的规模和复杂性不断的增长,它将会变得越来越难以理解和管理。
Service Mesh 的需求包括服务发现、负载均衡、故障恢复、度量和监控等。
Service Mesh 通常还有更复杂的运维需求,比如 A/B 测试、金丝雀发布、速率限制、访问控制和端到端认证。
Service Mesh 的出现,弥补了 Kubernetes 在微服务的连接、管理和监控方面的短板,为 Kubernetes 提供更好的应用和服务管理。
因此,Service Mesh 的代表 Istio 一经推出,就被认为是可以和 Kubernetes 形成双剑合璧效果的微服务管理的利器,受到了业界的推崇。
Istio 提供了对整个服务网格的行为洞察和操作控制的能力,以及一个完整的满足微服务应用各种需求的解决方案。
Istio 主要采用一种一致的方式来保护、连接和监控微服务,降低了管理微服务部署的复杂性。
2、初识 Istio
Istio 发音「意丝帝欧」,重音在意上。官方给出的 Istio 的总结,简单明了:
Istio lets you connect, secure, control, and observe services.
连接、安全、控制和观测服务。
简单来说,Istio 针对现有的服务网格,提供一种简单的方式将连接、安全、控制和观测的模块,与应用程序或服务隔离开来,从而开发人员可以将更多的精力放在核心的业务逻辑上。
以下是 Istio 的核心功能:
- HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡。
- 通过丰富的路由规则、重试、故障转移和故障注入,可以对流量行为进行细粒度控制。
- 可插入的策略层和配置 API,支持访问控制、速率限制和配额。
- 对出入集群入口和出口中所有流量的自动度量指标、日志记录和追踪。
- 通过强大的基于身份的验证和授权,在集群中实现安全的服务间通信。
从较高的层面来说,Istio 有助于降低这些部署的复杂性,并减轻开发团队的压力。
它是一个完全开源的服务网格,作为透明的一层接入到现有的分布式应用程序里。它也是一个平台,拥有可以集成任何日志、遥测和策略系统的 API 接口。
Istio 多样化的特性使我们能够成功且高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。
3、核心特性
Istio 以统一的方式提供了许多跨服务网格的关键功能:
①流量管理
Istio 简单的规则配置和流量路由允许我们控制服务之间的流量和 API 调用过程。
Istio 简化了服务级属性(如熔断器、超时和重试)的配置,并且让它轻而易举的执行重要的任务(如 A/B 测试、金丝雀发布和按流量百分比划分的分阶段发布)。
有了更好的对流量的可视性和开箱即用的故障恢复特性,我们就可以在问题产生之前捕获它们,无论面对什么情况都可以使调用更可靠,网络更健壮。
②安全
Istio 的安全特性解放了开发人员,使其只需要专注于应用程序级别的安全。
Istio 提供了底层的安全通信通道,并为大规模的服务通信管理认证、授权和加密。
有了 Istio,服务通信在默认情况下就是受保护的,可以在跨不同协议和运行时的情况下实施一致的策略,而所有这些都只需要很少甚至不需要修改应用程序。
Istio 是独立于平台的,可以与 Kubernetes(或基础设施)的网络策略一起使用。
但它更强大,能够在网络和应用层面保护 Pod 到 Pod 或者服务到服务之间的通信。
③可观察性
Istio 健壮的追踪、监控和日志特性让我们能够深入的了解服务网格部署。通过 Istio 的监控能力,可以真正的了解到服务的性能是如何影响上游和下游的。
而它的定制 Dashboard 提供了对所有服务性能的可视化能力,并让我们看到它如何影响其他进程。
Istio 的 Mixer 组件负责策略控制和遥测数据收集。它提供了后端抽象和中介,将一部分 Istio与后端的基础设施实现细节隔离开来,并为运维人员提供了对网格与后端基础实施之间交互的细粒度控制。
所有这些特性都使我们能够更有效地设置、监控和加强服务的 SLO。当然,底线是我们可以快速有效地检测到并修复出现的问题。
④平台支持
Istio 独立于平台,被设计为可以在各种环境中运行,包括跨云、内部环境、Kubernetes、Mesos 等等。
我们可以在 Kubernetes 或是装有 Consul 的 Nomad 环境上部署 Istio。
Istio 目前支持:
⑤整合和定制
Istio 的策略实施组件可以扩展和定制,与现有的 ACL、日志、监控、配额、审查等解决方案集成。
4、流程架构
Istio 服务网格逻辑上分为数据平面(Control Plane)和控制平面(Data Plane),架构图如下所示: