服务网格之lstio介绍

本博客链接:https://security.blog.csdn.net/article/details/128449214

一、微服务的概念

微服务,就是将一个完整应用中所有的模块拆分成多个不同的服务,其中每个服务都可以进行独立部署、维护和扩展,服务之间通常通过RESTful API进行通信,这些服务围绕业务能力构建,且每个服务均可使用不同的编程语言和不同的数据存储技术。

微服务设计的本质在于使用功能较明确、业务较精炼的服务去解决更大、更实际的问题。

二、服务网格的概念

服务网格通常通过一组轻量级网络代理实现,这些代理与应用程序一起部署,而无需感知应用程序本身。

服务网格作为Sidecar运行在服务旁,对应用来说是透明的,所有通过应用的流量均会经过Sidecar,因此Sidecar实现了流量控制功能,包括服务发现、负载均衡、智能路由、故障注入、熔断器、TLS终止等。服务网格的出现将微服务治理从应用自身中抽离出来,通过Sidecar的形式极大降低了代码耦合度,使得微服务管理不再复杂。

目前较为流行的服务网格有Istio、Linkerd、Envoy、NginMesh、Conduit等,其中Istio凭借着社区热度以及大厂联合开发投入成为了服务网格的业界标准。

三、lstio(istio)介绍

3.1、Istio架构

Istio是一款微服务管理框架,也被认为是服务网格的代表实现,由Google、IBM、Lyft联合开发的开源项目。架构图如下:

在这里插入图片描述

Istio架构的设计类似软件定义网络(SDN),主要分为控制平面和数据平面两个部分,其中数据平面由一组代理组成并以Sidecar的形式部署在服务旁,这些代理负责管理服务间的所有网络通信;控制平面用于对数据平面的代理进行管理和配置。这种设计的好处有很多,首先无需更改业务容器代码,从而可以最大程度的透明化使应用程序对代理注入无感知;另一方面,Istio的开放化接口和灵活的部署机制在很大程度提升了可扩展性和可移植性;最后Istio的统一策略管理也将基于服务的诸多策略从Sidecar内部解耦,并通过API进行统一管理,从而简化了操作成本。

3.2、数据平面

Istio的数据平面由一组网络代理构成,Istio默认使用的代理为Envoy,当然这里也可以替换为其它代理,例如linkerd、nginmesh、moison或开发者自己编写的代理。Envoy是以C++为基础开发的高性能代理,用于调解服务网格中服务的所有入站和出站流量。Envoy代理是唯一与Istio数据平面流量进行交互的组件。

Envoy的核心为L3/L4和L7层网络代理,通过Envoy内部的Filter机制及开放化的Filter编程接口,开发人员可使用Envoy现有的Filter或自定义Filter对业务流量进行细粒度化管理。

Envoy的内置功能包括“服务发现”、“负载均衡”、“TLS终止”、“HTTP/2”、“GRPC代理”、“熔断器”、“健康检查”、“基于百分比流量拆分的灰度发布”、“故障注入”等。

Envoy在Istio中通常以Sidecar的方式部署,Sidecar与业务容器部署在同一个pod中。这种部署模式允许Istio提取大量流量相关的信息作为元数据。Istio可以利用这些元数据实施相应策略,并同时将元数据发送至外部监控系统,例如Prometheus,Zipkin,Jaeger等,以将服务网格中发生的行为可视化。

3.3、控制平面

Istiod为Istio的控制平面组件,istiod下又包括Pilot、Citadel、Galley三个子组件。

Pilot

Pilot负责为Envoy Sidecar提供服务发现功能,为智能路由和弹性(A/B测试,金丝雀部署,超时,重试,熔断等)提供流量管理功能,将控制流量的高级路由规则转换为特定于Envoy的配置,并在运行时传播至Envoy/Sidecar容器中。

在这里插入图片描述

由上图我们可以看出交互流程主要分为以下三个步骤:

1、平台启动一个服务的新实例,该实例通知Pilot的平台适配器;
2、平台适配器使用Pilot的抽象模型注册实例;
3、Pilot将流量规则和配置下发至数据平面的Envoy代理;

可以看出这种松耦合设计允许Istio在Kubernetes、Consul或Nomad等多种环境中运行,同时维护相同的Operator接口来进行流量管理。

Citadel

Citadel是Istio的安全模块,通过内置的身份和证书管理,可支持强大的服务到服务以及最终用户的身份验证,同时,我们可以使用Citadel来升级服务网格中未经加密流量。

Galley

Galley是Istio配置过程中进行验证、提取、处理和分发的核心组件,其并不直接向数据平面提供业务能力,而是在控制平面上向其它组件提供支持,这样其它组件只用和Galley打交道,从而与底层平台(例如Kubernetes)解耦。

四、Istio的特性

4.1、Istio流量管理

Istio拥有丰富的流量管理功能,其中主要包括请求路由、故障注入、流量迁移三种。

请求路由

Istio支持用户下发请求路由策略,该策略主要用于将访问服务流量重定向至特定版本,从而实现金丝雀部署(金丝雀发布指的是在生产环境中分阶段逐步更新后端应用的版本(需要具备流量控制能力),在小范围验证符合预期之后,再推广至整个生产环境),这种方式在测试新项目上线时带来了诸多好处。

故障注入

Istio的故障注入机制主要用于测试整个应用的故障恢复能力,最终可以确保故障策略不会出现不兼容以及限制较多的情况,与在其它网络层引入故障机制不同,Istio是在应用层注入故障,从而可以获得更多结果,例如使用http状态码来标明故障结果。

流量迁移

流量迁移指将流量从应用的一个版本逐步迁移到另一个版本,在Istio中,可以通过配置一系列规则来实现这一目标,例如可以将请求中50%的流量发送到某服务A的v1版本,剩余的50%流量发送到服务A的v2版本。然后,通过调整阈值最终将100%的流量发送至服务A的v2版本来完成迁移。

4.2、Istio安全性

Istio通过Citadel组件可为服务网格中的服务提供签名证书从而保证微服务间的通信安全,此外,Istio的认证及授权机制为服务网格服务间提供了相对安全的访问环境。

4.3、Istio可观察性

由于Istio整个架构中包含kiali、Prometheus、Grafna等监控及可视化工具,因而可对服务网格中的服务调用链和请求数进行可视化,从而使服务网格具有较好的可观察性。

猜你喜欢

转载自blog.csdn.net/wutianxu123/article/details/128449214