组团学

istio集群服务治理

阅读 (247556)

一、Service Mesh 服务网格是什么

随着服务网络的规模和复杂性不断的增长,它将会变得越来越难以理解和管理。它的需求包括服务发现、负载均衡、故障恢复、度量和监控等。服务网络通常还有更复杂的运维需求,比如 A/B 测试、灰度发布、速率限制、访问控制和端到端认证。

​服务网格用来描述组成这些应用程序的微服务网络以及它们之间的交互。简单来说,Service Mesh 可以看做是传统代理的升级版,用来解决现在微服务框架中出现的问题,可以把 Service Mesh 看做是分布式的微服务代理,在传统模式下,代理一般是集中式的单独的服务器,所有的请求都要先通过代理,然后再流入转发到实际的后端,而在 Service Mesh 中,代理变成了分布式的,它常驻在了应用的身边,这样的话,应用所有的流量都被代理接管,那么这个代理就能为整个通信带来更多的功能,比如:

拦截:代理可以选择性拦截传输的网络流量,比如一些公司限制员工在上班的时候不能访问某些游戏或者电商网站;

统计:既然所有的流量都经过代理,那么代理也可以用来统计网络中的数据信息,比如了解哪些人在访问哪些网站,通信的应答延迟等;

缓存:如果通信双方比较”远“,访问比较慢,那么代理可以把最近访问的数据缓存在本地,后面的访问不用访问后端来做到加速,CDN 就是这个功能的典型场景;

分发:如果某个通信方有多个服务器后端,代理可以根据某些规则来选择如何把流量发送给多个服务器,也就是我们常说的负载均衡功能,比如 Nginx 软件;

跳板:如果 A、B 双方因为某些原因不能直接访问,而代理可以和双方通信,那么通过代理,双方可以绕过原来的限制进行通信。

2.png

二、istio 是什么

Istio 提供一种简单的方式来为已部署的服务建立网络,该网络具有负载均衡、服务间认证、监控等功能,而不需要对服务的代码做任何改动,官网给的介绍如下(官网地址:https://istio.io):

1.png

连接:智能控制服务之间的流量和API调用,进行一系列测试,并通过红/黑部署逐步升级

保护:通过托管身份验证、授权和服务之间通信加密自动保护您的服务

控制:应用策略并确保其执行,使得资源在消费者之间公平分配

观测:对您的服务进行多样化、自动化的追踪、监控以及记录日志,以便实时了解正在发生的事情

三、istio 架构

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

**数据平面:**由一组智能代理(Envoy)组成,被部署为 sidecar。这些代理负责协调和控制微服务之间的所有 网络通信。他们还收集和报告所有网格流量的遥测数据。

**控制平面:**管理并配置代理来进行流量路由。

下面是官方给的架构图,核心组件有:Proxy代理、Mixer混合器、Pilot引导、Citadel堡垒,以及Galley

3.png

可以看到,Istio 就是我们上面提到的 Service Mesh 架构的一种实现,服务之间的通信(比如这里的 Service A 访问 Service B)会通过代理(默认是 Envoy)来进行,而且中间的网络协议支持 HTTP/1.1,HTTP/2,gRPC 或者 TCP,可以说覆盖了主流的通信协议。

​控制中心做了进一步的细分,分成了 Pilot、Mixer、Citadel 以及Galley。

四、istio 核心组件介绍

Mixer混合器: 顾名思义,Mixer混合了各种策略以及后端数据采集或遥测系统的适配器,从而实现了前端Proxy与后端系统的隔离与汇合。Mixer是一个灵活的插件模型,它一端连着Envoy,同时我们可以将日志、监控、遥测等各种系统“插入”到Mixer的另一端中,从而得到我们想要的数据或结果。

Pilot引导: 简单来说,Pilot是为我们提供配置智能路由(如A/B测试、灰度发布等)、弹性(超时、重发、熔断等)等功能的管理系统,它提供了一系列rules api,允许运维人员指定一系列高级的流量管理规则。Pilot负责将我们的配置转换并写入到每个sidecar(Enovy)。

Citadel堡垒: 它管理着集群的密钥和证书,是集群的安全部门。典型的如果我们的服务是跨网络通讯(Istio允许我们建立一个安全的集群的集群网络),开发人员想省事懒得对通讯数据进行加解密和身份认证,这事就可以交给Citadel来处理了。

Galley: 它并不直接向数据面提供业务能力,而是在控制面上向其他组件提供支持。Galley 作为负责配置管理的组件,验证配置信息的格式和内容的正确性,并将这些配置信息提供给管理面的Pilot和Mixer服务使用,在新的版本中Galley的作用越来越核心。

五、为什么使用 istio

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

​1、为 HTTP、gRPC、WebSocket 和 TCP 流量自动负载均衡。

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

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

4、集群内(包括集群的入口和出口)所有流量的自动化度量、日志记录和追踪。

​5、在具有强大的基于身份验证和授权的集群中实现安全的服务间通信。

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

需要 登录 才可以提问哦