在微服务架构中service mesh是什么?
在微服务架构中service mesh是什么
什么是 service mesh ?
微服务架构将软件功能隔离为多个独立的服务,这些服务可独立部署,高度可维护和可测试,并围绕特定业务功能进行组织。
这些服务通过简单的,可通用访问的API相互通信。在技术层面上,微服务可实现大型复杂应用程序的持续交付和部署。在更高的业务水平上,微服务有助于为试图在快速发展的市场中实现敏捷性的公司提供速度,可伸缩性和灵活性。
但是,如前所述,微服务架构会很快变得复杂。我们如何处理这种复杂性?
service mesh
是一种基础结构层,允许我们的服务实例相互通信。service mesh
还允许我们配置服务实例如何执行关键操作,例如服务发现,负载平衡,数据加密以及身份验证和授权。
因为service mesh
提供了一层抽象(应用程序代码通常不了解service mesh
执行的工作),所以我们获得了很大的灵活性;例如,我们可以将微服务移至其他服务器或集群,而无需重写应用程序。实际上,service mesh
使管理微服务的最无聊和重复的工作自动化。
service mesh 是如何工作的?
服务网格的体系结构分为两个不同的部分:数据平面和控制平面。
数据平面实质上是处理服务之间通信的代理服务。在Istio中,数据平面被部署为sidecar
,这是添加到主应用程序中的支持服务。例如,在Kubernetes
基础架构中,代理与具有共享网络名称空间的应用程序部署在同一个pod
中。
数据平面还提供对微服务的可观察性,尤其是以日志和度量标准聚合的形式。
NGINX
,HAProxy
和Envoy
均提供数据平面功能。尤其是Envoy
,已成为广受欢迎的代理,因为它专门用于微服务体系结构,提供用于配置的动态API并增强了可观察性。
同时,控制平面,监控数据平面的策略和配置-它不处理任何数据。 Nelson
,SmartStack
和Istio
等工具都以某种形式提供控制面板功能,并且每种工具都有自己的策略来管理与代理的关系。例如,在Kubernetes
中,控制平面与业务流程系统协同工作,以调度服务及其代理,跟踪服务发现并通过API配置代理。
我们可以将Envoy
作为没有控制平面的独立代理运行,但这是Istio
对控制平面/数据平面工作流的独特方法,以及其与Envoy
结合使用时的核心功能(流量管理,安全性,可观察性)功能齐全的服务网格越来越吸引着许多用户
service mesh 之 istio 的内部机制
Istio
的体系结构包括四个主要部分。 Istio
使用Envoy sidecar
代理作为其数据平面,其他三个工具组成了Istio
控制面板。
如下图:
-
Envoy:
Envoy sidecar
代理充当Istio
的数据平面。诸如故障处理(例如,运行状况检查和有限制的重试),动态服务发现和负载均衡等内置功能使Envoy
成为功能强大的工具。Envoy
还通过属性提供有关服务请求的信息。 -
Mixer:
Istio
的策略和遥测中心收集有关网状网中服务请求的Envoy
属性,并提供API,以便DevOps
团队可以构建插件(或适配器)以在任意数量的第三方后端中重新利用这些属性,包括日志记录,授权或监控工具,例如New Relic
(更多信息请参见下文)。Mixer
还使用相互TLS处理代理之间的授权。 -
Pilot:
Istio
使用Pilot
根据我们的Envoy
配置管理负载均衡流量控制。与Mixer
一样,我们可以包含适配器,以便Pilot
可以通过API与Kubernetes
基础架构通信,以了解影响流量的部署更改。Pilot
还将身份验证规则分发给代理。 -
Citadel:借助
Citadel
,Istio
为Envoy
代理之间的身份验证和凭据管理提供了一个强大的,策略驱动的安全层。Citadel
管理整个网格中的密钥和认证。