Service Mesh未来发展趋势浅析

Posted by     "Pu Ming" on Thursday, August 31, 2023

本文转自绿盟科技研究通讯公众号 《Service Mesh未来发展趋势浅析》

专题:【云原生安全】

往期回顾:

Istio系列一:Istio的认证授权机制分析

Istio系列二:Envoy组件分析

Istio系列三:Mixer、Pilot组件分析实践

Istio系列三:Mixer、Pilot组件分析实践

云原生攻防研究 — Istio访问授权再曝高危漏洞

一. Service Mesh背景及定义

2017 年底,Service Mesh依托其非侵入式特性在微服务技术中崭露头角, Service Mesh 又译作“服务网格”,作为微服务间通信的基础设施层,Service Mesh主要用来治理微服务,Buoyant 公司的 CEO William Morgan在文章《WHAT’S A SERVICE MESH? AND WHY DO I NEED ONE? 》[2] 中解释了什么是 Service Mesh,为什么云原生应用需要使用 Service Mesh。Service Mesh通常通过一组轻量级网络代理实现,这些代理与应用程序一起部署,而无需感知应用程序本身, 图1为Service Mesh的架构图:

image
图1. Service Mesh架构图

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

Service Mesh的典型代表为Istio,Istio起始于2016年,最初由Google、IBM、Lyft联合开发的开源项目,2017年5月发布第一个release 0.1.0,它是一个完全开源的服务网格,其中,数据平面可以透明的注入至现有的分布式应用中,Istio也是一个平台,包括允许它集成到任何日志记录平台,遥测或策略系统的API。自2017年第一个版本发布以来,Istio已经经历了两次技术架构的变更。最初的控制平面微服务架构被转换为单体架构,以降低系统自身的复杂性。然后,引入了全新的“Ambient mesh”数据平面模式,以提供更广泛的兼容性并降低基础设施的成本。这表明Istio社区在持续创新,在不断解决实际问题的道路上从未停止前进。2022年4月25日,Istio社区宣布正在申请项目捐赠给CNCF,。同年9月28日,CNCF正式宣布将Istio作为CNCF孵化项目。2023年7月12日,Istio项目正式从CNCF毕业,成为最快毕业的CNCF项目。

Gartner将Service Mesh定义为一种分布式计算中间件,主要部署在如Kubernetes等容器编排管理系统中,该中间件可实现、保护和优化微服务间的通信过程。同时提供动态服务发现、请求路由、可观测、可追溯性和通信安全性等能力。

二.Service Mesh趋势分析

Gartner预测,截至2026年,将会有少于25%使用Kubernetes的组织会使用Service Mesh[1],以上预测我们可以看出,Gartner认为Service Mesh将不会在未来3年内被大规模应用,那么限制其大规模应用的主要因素有哪些?笔者认为应当从Service Mesh的市场导向、架构设计、交付模式、使用用户等多方面因素去分析。

2.1 市场导向

2016年Service Mesh概念诞生至今已过7年半载,单谈论热度,Service Mesh在市场上早已过了早期的炒作期,Service Mesh市场实际上并未取得预期收入上的增长或是商业上的成功[1]。虽然容器和容器编排工具近些年在企业得到了广泛地应用,但Service Mesh解决方案却未能渗入市场太多,早期的炒作主要与将微服务作为应用程序的首选架构选项有关。但这也同时导致了针对微服务的可观测性及管理的需求量激增。然而,实施和运营Service Mesh的复杂性以及容器编排平台提供的网络和服务治理功能的重叠导致商业市场受到了不利影响。如Kubernetes可对微服务进行治理(弹性扩缩容、负载均衡等),尽管治理粒度不如Service Mesh细,但对于用户而言,由于Service Mesh自身需要一定运维成本,因而在缺乏成熟的DevOps实践的情况下,运营负担会增加。随着容器和服务数量的指数级增长,这些挑战会变得更加严峻,特别是在多云环境中。

相比开源Service Mesh,商业Service Mesh凭借易用性、操作简便性以及一些附加高级功能有望取得更长远的发展,比如Google的Anthos Service Mesh[5],一款基于Istio的全托管Service Mesh,也得到了市场的需求;此外,满足特定复杂需求的解决方案也可能会有更长远的发展,如支持处理毫秒级请求,跨多个Service Mesh进行管理等。

根据Gartner报告分析得出[1],目前Service Mesh市场规模相对较小,共约40家供应商。这些供应商主要提供了不同类型的Service Mesh,如Sidecar、Node Proxy或多集群Proxy的解决方案。虽然Service Mesh技术架构创新在缓慢且稳步地发展中,但获取商业上成功并非易事,笔者认为未来短期内不太可能吸引更多新的供应商进入这一市场中。

2.2 架构设计

如各位读者所知,Service Mesh解决方案提供多种架构设计模式,包括边车模式(Sidecar Proxy-Based)、网络中心模式(Network-Centric-Based)、主机代理(Host Proxy-Based)模式、联邦集群模式(Multimesh-Based),下面笔者将对这四种模式进行简要分析。

2.2.1 边车模式

Istio早期的部署模式一直在推广Sidecar模式,即下图所示:

image
图2. Sidecar模式

图2我们即能看出Sidecar的生命周期是随业务Pod地变化而变化的, 边车模式让服务治理能贴近每个业务Pod从而可达到精细化管控的目的,但这种模式无疑也带来了性能上的瓶颈,笔者认为主要体现在两方面:

  • 由于Sidecar和业务容器位于同一Pod,Sidecar自身会截获进出Pod的流量并处理,最后再将流量返回至业务容器,每个请求的通信链路共会经历两跳,这在简单的业务系统中并无不妥,但云原生环境下,微服务数量呈指数增长,频繁的东西向流量交互成为常态,延迟必然会升高,导致性能瓶颈;

  • 由于Sidecar和业务容器一比一的配置,因而当业务Pod数量增多时,Sidecar自身占用的CPU及内存也会呈指数增长,从而影响业务,带来了额外的资源开销,导致性能瓶颈。

2.2.2 网络中心模式

我们知道,Service Mesh的许多功能都围绕着微服务流量管理(L3/L4/L7层)而设计。网络中心模式的Service Mesh聚焦于网络层(L3/L4层)。这种模式常通过底层基础设施提供的内核级功能实现,从而可以消除对Sidecar模式的依赖。目前,市场上已有多种实现此模式的方案供选择,如Antrea[6]可通过扩展容器网络接口(CNI)来提供微服务网络连接及安全性。Cilium[7]利用eBPF技术在内核层实现微服务可观测性,并结合Envoy代理在用户空间实现7层流量管理。与传统Sidecar模式相比,网络中心模式的Service Mesh可实现更低的延迟和更少的CPU、内存占用率。但目前市场上,网络中心模式的Service Mesh方案提供的整体功能并不成熟,易用性也较低,仍有待时间的考验[1]。

2.2.3 主机代理模式

主机代理模式通常指在节点级别共享代理,而非Sidecar在Pod级别共享代理,这种模式无疑带来了许多优势。如可以大幅减少Sidecar数量,解决CPU、内存资源利用不足的问题;再如可不侵入业务Pod,自身升级或重启时不会影响主线业务;目前Istio Ambient mesh[8] 提供了一种新的无Sidecar数据平面的模式,即主机代理模型。笔者了解到,Ambient mesh将Istio分成了上下两层,底层主要处理L4层流量及零信任安全,通常以Kubernetes 的Daemonset资源部署在每个节点上,上层处理L7层流量,通常以Deployment部署,可动态伸缩。需要注意的是,上下层对应的能力是独立的,如果用户无需L7层流量管理那么只部署底层能力即可,此外两层均无需对业务Pod进行修改。

image
图3. Ambient mesh逻辑分层

虽然主机代理模式很大程度上解决了资源使用率的问题,但由于在市场上相对较新,供应商支持有限,仍有待验证。

2.2.4 联邦集群模式

联邦集群模式是具有多个Service Mesh管理的解决方案,用户业务可能部署分散在不同的Service Mesh环境下,联邦集群模式的出现是为了实现不同集群网格间出入口流量控制、安全、身份和访问管理、微隔离和API管理。如Greymatter企业应用网络管理平台[3]提供针对多个Service Mesh支持以此来简化微服务的治理工作。Kong Mesh也同时实现了基于Kuma的企业Service Mesh,用于多Kubernetes集群[4]。据笔者了解,联邦集群模式目前在国内应用并不广泛,应该是受限于Service Mesh本身市场规模不大及现有应用落地案例较少的缘故。

2.3 交付模式

根据交付模式不同,企业或组织在选取Service Mesh的类型上也有不同,据Gartner统计,主要包括开源、商业、自主管理、供应商、云服务商这几种模式。

2.3.1 开源解决方案

自从Service Mesh问世以来,开源社区一直非常活跃。除了以Istio为代表的Service Mesh,还有HashiCorp Consul[9]、Kumap[10]、Linkerd[11]等解决方案,这些开源解决方案在业内得到广泛应用。其中一个主要原因是它们与Kubernetes和容器管理生态系统密切相关,并且在一定程度上增强了服务治理功能。大多数开源Service Mesh解决方案都与Kubernetes发行版相互集成,通常以组件形式打包,并可以通过Helm进行安装。尽管开源Service Mesh在基础功能方面具有较高的一致性,但在高级功能方面存在明显差异,例如出入口流量控制、分布式支持、金丝雀部署、数据丢失防护等。开源Service Mesh为大多数希望采用Service Mesh的企业提供了可行的选择,是一个很好的入门教材。

2.3.2 商业解决方案

尽管开源解决方案在推动企业了解Service Mesh方面做出了诸多贡献,但对于企业而言,未来战略规划中的Service Mesh最终需要实际落地。熟悉Service Mesh的读者应该清楚,它的内部架构相对复杂。除了需要具备基础的专业知识外,还需要丰富的运维经验。然而,目前大多数中小型企业并没有掌握开源解决方案的运维专业知识。

商业Service Mesh可以很好地解决上述问题。它们具有更强大的产品功能、稳定的托管支持和专业的服务,能够为持续集成/交付部署(CI/CD)和运营支持提供更好的产品功能。然而,商业解决方案也会增加IT预算和运营成本。

根据Gartner的预测,在未来几年内,商业Service Mesh方案可能比开源解决方案更受广大企业采用[1]。

2.3.3 自主管理方案

自主管理方案是指用户个体可以自行管理的Service Mesh方案。用户可以选择使用开源方案作为基础架构,然后根据自己的需求进行定制开发,并将其部署在公有云或私有云环境中。自主管理方案的优势在于灵活度较高,但也面临一些挑战,特别是在Service Mesh的部署和运维方面。

2.3.4 供应商解决方案

供应商解决方案是指一些供应商为Service Mesh提供专有的服务,以帮助客户更简单地拥有和运行Service Mesh。通常,这些服务以软件即服务(SaaS)的形式提供。在供应商解决方案中,供应商负责管理Service Mesh的控制平面的安装、配置和运行,并维护数据平面中的代理。

具体而言,供应商可以自动升级数据平面代理,同步数据平面策略等。对于企业而言,只需定期向供应商支付费用,便可以享受这些服务。另外,还有一些供应商接管控制平面,而用户负责管理数据平面。

2.3.5 云服务商托管解决方案

目前,全球主流云服务提供商都提供包含Service Mesh在内的云服务产品,例如AWS App Mesh[12]、Microsoft Open Service Mesh[13]和Google的Anthos Service Mesh等。这些云服务商提供的Service Mesh通常基于开源解决方案,并且以托管方式提供,这有助于企业节省管理基础设施资源的成本。然而,企业在使用云服务商提供的Service Mesh时,会持续增加云运营成本,并且在云环境之外部署和运行Service Mesh会面临一些挑战。

在这种情况下,采用混合云部署方式是一个较好的选择。混合云意味着将Service Mesh部署在既有的云环境中,同时也在企业自己的私有云或本地数据中心中部署Service Mesh。这种方式可以在保持灵活性和控制权的同时,减少企业的云运营成本。

2.4 使用用户

据Gartner报告指出,限制Service Mesh大规模应用的主要原因之一是"人的因素”。笔者将其总结为两个主要方面:

首先,企业领导往往难以确定或有效传达Service Mesh的真正价值,明确所有权和投入成本,从而无法证明商业采购的合理性。这主要是因为对Service Mesh的认知有限,进而限制了Service Mesh的市场潜力。

其次,部署和运维Service Mesh需要大量的人才投资。运营负担可能超过Service Mesh自身的管理和运维。这意味着企业需要投入大量的人力资源来支持Service Mesh的正常运行,这可能会成为限制Service Mesh应用规模的障碍。

为了克服这些限制,企业需要加强对Service Mesh的了解,并能够清楚地传达其价值和成本效益。此外,他们还需要合理规划和管理Service Mesh的运维人力资源,以确保其可持续发展和成功应用。

三.Service Mesh代表厂商

上文笔者对Service Mesh的趋势进行了分析,从架构设计以及交付模式上看市场上Service Mesh类型很多,如表1所示[1]:

供应商 解决方案
Amazon Web Services(AWS) AWS App Mesh
Antrea Antrea
Apache Software Founddation Apache Service Comb Mesher
Buoyant Buoyant Cloud、Linkerd
Cisco Calisti Service Mesh 、Manager Cisco Service Mesh Manager
F5 Aspen Service Mesh 、NGINX Service Mesh
Google Anthos Service Mesh
greymatter.io Enterprise Application Networking Platform
HashiCorp Consul
Huawei Application Service Mesh
Isovalent Cilium Enterprice
Istio Istio Service Mesh
Kong Kong Mesh、Kuma
Microsoft Open Service Mesh
Network Service Mesh Network Service Mesh
Oracle Oracle Cloud Infrastructure (OCI) Service Mesh
Red Hat OpenShift Service Mesh
Solo.io Gloo Mesh
Tencent Tencent Cloud Mesh
Tetrate Tetrate Service Bridge
Tigera Calico
Tarefik Labs Traefik Mesh
VMware Tanzu Service Mesh

在最终选取具体Service Mesh方案前,笔者建议企业应当首先从以下几方面去考虑:

  • 企业是否大规模构建部署了微服务;
  • 企业是否部署了容器编排平台,如Kubernetes、Openshift等;
  • 企业是否需要管理微服务间依赖关系,是否有可观测性的需求;
  • 企业是否针对微服务有周期性发布的计划;
  • 企业部署的微服务是否存在大量东西向流量交互;
  • 企业是否具备DevSecOps流水线;
  • 企业是否具备相对规范及成熟的大规模运维团队;。

四.Service Mesh安全实践

绿盟科技星云实验室在2018年便开始接触Service Mesh,研究如何将安全能力与Service Mesh结合,早期提出了安全能力容器化、安全能力集成Service Mesh Sidecar、安全能力Sidecar化等思路(更多内容见绿盟科技研究通讯《云原生API安全:背景、态势与风险防护》),并于近年来先后孵化了基于Service Mesh和Kubernetes Ingress场景的云原生API安全解决方案,支持边车代理、主机代理等部署模式。如下图所示:

image
图4. 方案部署逻辑视

Service Mesh场景中,安全容器以主机代理(Host Proxy-Based)模式部署,采用eBPF进行引流,适配全向流量防护场景,可与Service Mesh Istio无缝集成,支持多集群部署。

image
图5. Service Mesh部署逻辑视图

五.总结

本文从市场导向、架构设计、交付模式和用户使用四个方面对Service Mesh的市场发展趋势进行了分析。可以看出,Service Mesh市场受到开源技术的影响很大,同时商业解决方案也越来越受到重视。然而,需要注意的是,Service Mesh社区也在持续发展,企业需要紧跟商业和开源领域的发展,以确定新的趋势,做好战略布局。此外,Service Mesh的最终目标是提高服务之间的运行效率、可见性和安全性,因此企业在选择Service Mesh时应首先考虑方案的实用性、控制平面和数据平面的有效性以及方案自身的成熟度。

六.参考文献

  1. Gartner Market Guide for Service Mesh 2023
  2. https://buoyant.io/2020/10/12/what-is-a-service-mesh/
  3. https://www.greymatter.io/solutions/
  4. https://konghq.com/products/kong-mesh
  5. https://cloud.google.com/anthos/service-mesh?hl=zh-cn
  6. https://antrea.io/
  7. https://cilium.io/
  8. https://istio.io/latest/docs/ops/ambient/architecture/
  9. https://www.consul.io/
  10. https://kuma.io/
  11. https://linkerd.io/
  12. https://aws.amazon.com/cn/app-mesh/
  13. https://openservicemesh.io/

「真诚赞赏,手留余香」

Ming Blog

真诚赞赏,手留余香