导语 本篇主要介绍Istio一些背景知识,包括Istio是什么、能干什么,并尝试梳理Istio与微服务、服务网格、Kubernetes这几个云原生领域重要技术概念的关系。
一、Istio是什么
引用官方对Istio 的介绍浓缩成了一句话,An open platform to connect, secure, control and observe services。
试着用可迭代方式来说明
-
Istio是一个用于服务治理的的开放平台。
-
Istio是一个Service Mesh形态的用于服务治理的开放平台。
-
Istio是一个与Kubernetes紧密结合的适用于云原生场景的Service Mesh形态的用于服务治理的开放平台。
这里的关键字"治理"不限于"微服务治理"的范畴,任何服务只要服务间有访问,如果需要对服务间的访问做管理,就可以使用Istio。根据Istio官方的介绍服务治理涉及到"连接"、"安全"、"控制"、"观察",中间的四个动词就是 Istio 的主要功能,官方也各有一句话的说明:
-
连接(Connect):智能控制服务之间的调用流量,能够实现灰度升级、AB 测试和红黑部署等功能。
-
安全加固(Secure):自动为服务之间的调用提供认证、授权和加密。
-
控制(Control):应用用户定义的 policy,保证资源在消费者中公平分配。
-
观察(Observe):查看服务运行期间的各种数据,比如日志、监控和 tracing,了解服务的运行情况。
二、Istio能做什么
通过负载均衡、服务间的身份验证、监控等方法,Istio 可以轻松地创建一个已经部署了服务的网络,而服务的代码只需很少更改甚至无需更改。通过在整个环境中部署一个特殊的 sidecar 代理为服务添加 Istio 的支持,而代理会拦截微服务之间的所有网络通信,然后使用其控制平面的功能来配置和管理 Istio,这包括:
-
为 HTTP、gRPC、WebSocket 和 TCP 流量自动负载均衡。
-
通过丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制。
-
可插拔的策略层和配置 API,支持访问控制、速率限制和配额。
-
集群内(包括集群的入口和出口)所有流量的自动化度量、日志记录和追踪。
-
在具有强大的基于身份验证和授权的集群中实现安全的服务间通信。
核心特性
Istio 以统一的方式提供了许多跨服务网络的关键功能:
-
流量管理
Istio简单的规则配置和流量路由允许控制服务之间的流量和 API 调用过程。Istio 简化了服务级属性(如熔断器、超时和重试)的配置,并且让它轻而易举的执行重要的任务(如 A/B 测试、金丝雀发布和按流量百分比划分的分阶段发布)。
-
安全
Istio 的安全特性解放了开发人员,使其只需要专注于应用程序级别的安全。Istio 提供了底层的安全通信通道,并为大规模的服务通信管理认证、授权和加密。有了 Istio,服务通信在默认情况下就是受保护的,可以让您在跨不同协议和运行时的情况下实施一致的策略——而所有这些都只需要很少甚至不需要修改应用程序。
Istio 是独立于平台的,可以与 Kubernetes(或基础设施)的网络策略一起使用。但它更强大,能够在网络和应用层面保护pod到 pod 或者服务到服务之间的通信。
-
可观察性
Istio 健壮的追踪、监控和日志特性能够深入的了解服务网格部署。通过 Istio 的监控能力,可以真正的了解到服务的性能是如何影响上游和下游的;而它的定制 Dashboard 提供了对所有服务性能的可视化能力,并让您看到它如何影响其他进程。
Istio 的 Mixer 组件负责策略控制和遥测数据收集。它提供了后端抽象和中介,将一部分 Istio 与后端的基础设施实现细节隔离开来,并为运维人员提供了对网格与后端基础实施之间交互的细粒度控制。
- 平台支持
Istio 独立于平台,被设计为可以在各种环境中运行,包括跨云、内部环境、Kubernetes、Mesos 等等。您可以在 Kubernetes 或是装有 Consul 的 Nomad 环境上部署 Istio。
三、Istio与服务治理
Istio是一个服务治理平台,治理的是服务间访问,只要有访问就可以治理,不在乎这个服务是不是所谓微服务,也不要求跑在其上代码是微服务化。提前"服务治理",大家最先想到的是"微服务的服务治理"下面从微服务的服务治理说起。
- 关于微服务
Martin Fowler对微服务的描述是"微服务是以一组小型服务来开发单个应用程序的方法,每个服务都运行自己的进程中,服务间采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并可通过全自动部署机制独立部署,还共用一个最小型的集中式管理,可用不同语言开发,并使用不同数据存储技术"(参见https://martinfowler.com/articles/microservices.html)
可以看出,微服务在本质上还是服务化分而治之,将复杂的单体应用分解成若干小的服务,这种方式带来好处:
-
从开发视角来看,每个微服务功能更内聚,可以在微服务内设计和扩展功能,并且采用不同开发语言。
-
从运维视角来看,在微服务化后,每个微服务都在独立进程里,可以自运维,微服务化是单一变更的基础,迭代速度更快,上线风险更小。
-
从组织管理视角来看,将团队按照微服务切分为小组代替服务大组也有利于敏捷开发。
但是,微服务化也给开发和运维带来很大挑战,微服务机制带来大量工作,比如服务如何请求目标服务,需要引入服务发现和负载均衡,以及在分布式系统中,网络可靠性、通信安全、网络时延、分布式调用链追踪等等
-
服务治理三种形态
- 第一种形态:在应用程序中包含治理逻辑
- 第二种形态:治理逻辑独立的代码
- 第三种形态: 治理逻辑独立的进程
通过比较以上三种服务治理形态,可以看到服务治理组件位置在持续下沉,对应于侵入逐渐减少,如表所示。
四、Istio与服务网格
Service Mesh是专用的基础设施层,轻量级高性能网络代理。提供安全的、快速的、可靠地服务间通讯,与实际应用部署一起,但对应用透明。应用作为服务的发起方,只需要用最简单的方式将请求发送给本地的服务网格代理,然后网格代理会进行后续操作,如服务发现,负载均衡,最后将请求转发给目标服务。当有大量服务相互调用时,它们之间的服务调用关系就会形成网格。
Istio在多种服务网格项目和产品中,后来居上,Istio1.1解决了生产大规模集群性能、资源利用率和可靠性问题,提供了众多生产中实际应用新特性,达到企业级可用标准。
-
在控制面上,Istion作为全新设计,在功能、形态、架构和扩展性上提供远超服务网格能力范围,基于xDS协议提供一套标准控制面规范,向数据面传递服务信息和治理规则。
-
在数据面,Istio采用标准数据面Envoy,提供L3/L4过滤器、HTTPL7过滤器,支持HTTPL7路由及gRPC等协议,有服务发现、健康检查、高级LB等能力。
五、Istio与kubernetes
kubernetes它是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
通过Kubernetes你可以:
- 快速部署应用
- 快速扩展应用
- 无缝对接新的应用功能
- 节省资源,优化硬件资源的使用
Kubernetes 特点:
- 可移植: 支持公有云,私有云,混合云,多重云(multi-cloud)
- 可扩展: 模块化, 插件化, 可挂载, 可组合
- 自动化: 自动部署,自动重启,自动复制,自动伸缩/扩展
Kubernetes架构:
5.1. Istio,Kubernetes的好帮手
从场景来看,Kubernetes已经提供了应用负载部署、升级、扩容等管理能力,同时Service机制也可以做服务注册、服务发现和负载均衡,支持基于服务名调用
从微服务组件工具集来看,Kubernetes本身支持微服务架构,也实现了服务注册、发现、负载均衡等互访互通问题,但是对服务间访问的管理如服务熔断、限流、动态路由、调用链追踪等都不在能力范围内,如何提供一套从底层负载部署运行到上层服务访问治理端到端解决方案?目前在Kubernetes上叠加Istio是一个好方案。
5.2. Kubernetes,Istio好基座
Istio利用了Kubernetes这个基础设施,与之叠加在一起形成了更强大的用于进行服务运行和治理的基础设施,并提供了更透明的用户体验。
-
数据面Sidecar运行在Kubernetes的pod里,作为一个Proxy和业务容器部署在一起,而基于Kubernetes的一个Pod多个容器使得部署运维对用户透明,甚至感知不到部署Sidecar的过程,通过Istio的自动注入服务,可以自动给指定的负载注入Proxy。
-
统一服务发现,Istio的服务发现机制继承了Kubernetes的域名访问机制构建而成,省去了再搭建维护一个类似Eureka的注册中心麻烦,更避免了2套服务发现数据可能不一直的问题。
-
Istio所有路由规则和控制策略都是通过Kubernetes CRD实现,因此各种规则策略对应的数据也被存储在kube-apiserver中,可以说Istio的APIserver就是Kubernetes的APIserver,数据自然也存在了对应Kubernetes的etcd中。
六、总结
Istio、微服务、容器与Kubernetes的关系
Istio与Kubernetes的天然融合且基于Kubernetes构建,也补齐了Kubernetes的治理能力,提供了端到端运行治理平台。