Istio+K8s,微服务的双剑合璧

转载于:https://mp.weixin.qq.com/s/dLSYkBH4wNwq2o2eTuVPAw
作者:jartto
本节篇幅较长,我们主要围绕以下几点来展开:
  • 什么是服务网格?
  • 初识 Istio
  • 核心特性
  • 流程架构
  • 核心模块
  • Envoy 进阶
  • 方案畅想
对许多公司来说,Docker 和 Kubernetes 这样的工具已经解决了部署问题,或者说几乎解决了 。但他们还没有解决运行时的问题,这就是服务网格(Service Mesh)的由来 。
什么是服务网格?服务网格(Service Mesh)用来描述组成这些应用程序的微服务网络以及它们之间的交互 。
它是一个用于保证服务间安全、快速、可靠通信的网络代理组件,是随着微服务和云原生应用兴起而诞生的基础设施层 。
它通常以轻量级网络代理的方式同应用部署在一起 。比如 Sidecar 方式,如下图所示:
Istio+K8s,微服务的双剑合璧

文章插图
 
我们对上图做个解释: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 提供更好的应用和服务管理 。
Istio+K8s,微服务的双剑合璧

文章插图
 
因此,Service Mesh 的代表 Istio 一经推出,就被认为是可以和 Kubernetes 形成双剑合璧效果的微服务管理的利器,受到了业界的推崇 。
Istio 提供了对整个服务网格的行为洞察和操作控制的能力,以及一个完整的满足微服务应用各种需求的解决方案 。
Istio 主要采用一种一致的方式来保护、连接和监控微服务,降低了管理微服务部署的复杂性 。
初识 IstioIstio 发音「意丝帝欧」,重音在意上 。官方给出的 Istio 的总结,简单明了:
Istio lets you connect, secure, control, and observe services.连接、安全、控制和观测服务 。
Istio+K8s,微服务的双剑合璧

文章插图
 
简单来说,Istio 针对现有的服务网格,提供一种简单的方式将连接、安全、控制和观测的模块,与应用程序或服务隔离开来,从而开发人员可以将更多的精力放在核心的业务逻辑上 。
以下是 Istio 的核心功能: