什么是服务网格?有哪些可用的开源服务网格?
在微服务架构中进行开发时,DevOps 团队需要配置许多单独的组件。为了让微服务协同工作,它们需要建立用于信息共享和数据传输的通信渠道。
管理和监控服务之间通信的一种方法是使用服务网格。
什么是服务网格?
服务网格 是添加到微服务架构中的专用基础设施层。它的主要作用是确保快速和安全的服务到服务通信。这种低延迟工具可管理和监控服务间通信和数据共享。
它由一个控制平面组成 开发人员从中实施特定的规则和策略到网络层。控制平面直接与数据平面一起工作,数据平面是与服务一起运行的边车代理的集合。这些代理负责服务之间的所有通信。此外,它们还可以监控并提供对整体应用程序性能的宝贵见解,并帮助发现潜在问题并避免停机。
代理提供有价值的功能,包括:
- 动态服务发现
- 负载平衡
- 健康检查
- 加密
- 可观察性
- 断路器
- 基于百分比的流量分配分阶段推出
- 身份验证
- 丰富的指标
- 授权
服务网格架构的兴起
为了完全理解服务网格是如何工作的,我们需要研究为什么要开发这样的工具。 Service Mesh 架构的兴起是为解决许多与微服务相关的问题而出现的。
许多开发团队进行了从开发单体应用程序到微服务架构的转变 .这将应用程序从单一单元划分为协同工作的单个服务系统。该应用程序由具有各自功能的多个自治服务组成。
开发此类应用程序的困难在于配置这些服务相互通信的最佳方式。应用程序性能取决于协同工作和共享数据以提供最佳用户体验的服务。例如,网上商店可能包含一个登录服务 与购买服务通信 需要来自库存数据库的信息 等等。
随着微服务通过 API 进行通信,寻找解决发现的最佳解决方案 和路由 很重要。此外,开发人员需要确保系统内的通信安全 .虽然防火墙可以保护应用免受外部攻击,但微服务架构中有一个平坦、开放的网络。
在网格服务架构之前,此任务由负载平衡器处理 .然而,由于部署和成本问题,这不是一个实用的解决方案,尤其是在更大规模的情况下。服务网格是作为上述所有问题的最终解决方案而开发的。它提供了一个网络层,带有一个集中的注册表(控制平面),通过它的 sidecar 代理管理所有服务。与负载均衡器相比,它们更容易配置和扩展。开发者可以根据需要对代理进行扩容和缩容,并在不修改服务的情况下更改路由规则。
服务网格的好处
服务网格最显着的好处是:
- 提高安全性 – 将服务网格实现到微服务架构中可以提高整体安全性。此网络层引入了自动授权 , 身份验证 , 加密 ,以及政策执行 .它使用相互传输层安全性 (mTLS) 以确保所有服务到服务的通信都是安全的。服务使用其 TLS 证书标识自己以建立连接。一旦他们验证了自己的身份,他们就会建立一个用于数据共享的加密通道。
- 交通控制和可见性 – 服务网格的主要功能之一是提供流量控制。它管理东西流量,以及服务之间的流量。所有通信都是通过由控制平面管理的边车代理完成的。流量是透明路由的,让开发人员更好地了解所有数据交换。通过更清晰地了解应用程序性能,更容易发现系统中的潜在问题。
- 可观察性 – 由于平台管理所有流量,它收集有关流量行为和用户交互的宝贵见解。借助如此大量的数据,业务分析师可以制定改进应用程序的策略。
- 开发人员专注于应用开发而不是网络 – 无需开发团队设置和管理整个网络层,他们可以将服务网格实现到架构中。虽然该平台确实需要初始配置,但它可以自动执行与网络管理相关的耗时任务。这使开发人员可以专注于微服务。让服务网格来管理服务到服务的交互可以节省时间和金钱,同时还可以提高生产力。
- 弹性 – 服务网格提供有助于创建弹性微服务应用程序的功能。其中一项功能是断路器模式,它有助于检测故障和延迟峰值。此外,服务网格使用负载平衡来进行服务发现和跨微服务网络路由流量。增加其弹性的其他功能包括重试、超时和截止日期。
- 更快的测试和部署周期 – 使用 sidecar 代理进行 pod 到 pod 的通信设置起来更加简单和快捷。他们没有将冗余功能编码到每个服务中,而是部署代理并将它们连接到服务。这加快了整体开发和测试周期。
开源服务网格列表
有许多可用的开源服务网格。 Istio、Linkerd 和 Consul 使用最广泛。
您将在下面找到有关每个平台的更多详细信息。
Istio
Istio 是由 Google、IBM 和 Lyft 设计的开源基础架构。它是最早的服务网格平台之一。它使用 Istiod ,由多个组件组成的控制平面(Pilot , 城堡 ,以及混音器 ) 用于操作和配置服务网格。数据平面由 Envoy 组成 使用 C++ 开发的代理 . HTTP/TCP 连接由网关管理 , Istio 的负载均衡器。 虚拟服务 和DestinationRules 定义路由规则和策略。
链接器
Linkerd 是由云原生计算基金会 (CNCF) 项目开发的轻量级开源服务网格。无需额外配置即可轻松安装在任何平台之上的 Kubernetes 集群中。在使用较小的集群时,没有配置是有益的。但是,大型项目需要配置的可能性才能成功管理集群中的所有服务。
它的 sidecar 代理是用 Rust 编写的 . Linkerd 使用 控制器 用于控制平面和 Web 部署 对于仪表板。此外,它利用 Prometheus 探索和存储指标,利用 Grafana 渲染和显示仪表板。
领事连接
Consul 最初被设计为服务发现工具,后来演变为服务网格。与 Linkerd 不同,Consul Connect 包含大量配置,让您可以更好地控制网络环境。因此,它比 Linkerd 更难使用。这种开源服务网格与平台无关,这意味着它不需要 Kubernetes 或 Nomad。不过,游牧民族 确实简化了通过 Consul 管理微服务通信的过程。
微软的开放式服务网格
开放式服务网格 (OSM) 是一个 CNCF Envoy 项目 它实现了一个服务网格接口来管理和保护动态微服务应用程序。它使用 Envoy xDS 作为边车容器。其主要功能包括流量转移、证书管理、启用 mTLS、自动 Sidecar 注入和访问控制策略。
隈研吾
Kuma 是一个开源控制平面,用于在服务网格中运行的 Kubernetes 和 VM。它具有 L4+L7 策略架构 它实现了服务发现、路由、零信任安全性和可观察性等功能。该平台具有高度可扩展性且易于设置。
OpenShift 服务网格红帽
红帽开发了用于管理微服务应用程序的 OpenShift 服务网格。它通过Security Context Constraint提供多个网络接口并提高安全性 .它使用 Jager 衡量性能 并使用 Kiali 观察服务之间的交互 .此外,OpenShift 还包括 Red Hat 3scale Istio Mixer Adapter 为了更好的 API 安全性。
AWS 应用网格
亚马逊开发了 App Mesh,这是一款免费的服务网格软件,可在微服务架构中管理您的所有服务。它为您的微服务应用程序提供高可用性和端到端的可见性。 AWS App Mesh 与 AWS Fargate 集成 , 亚马逊 ECS , 亚马逊 EC2 , 亚马逊 EKS , Kubernetes ,以及 AWS Outposts .借助其监控工具,它可以自动导出监控数据。
网络服务网格
Network Service Mesh 是一个开源的 CNCF Sandbox 项目 .它是一个混合/多云 IP 服务网格,使用一组简单的 API 来促进连接。它在容器内运行的服务与外部端点之间建立连接。实施后,它只需要对 Kubernetes 进行最少的更改。
结论
服务网格简化了使用微服务架构开发的应用程序的管理和维护。它提高了微服务架构内的整体安全性,并确保流量的可见性和可观察性。总体而言,服务网格功能增强了性能并加快了开发周期。有多种可用的开源解决方案,找到最适合您的应用程序需求的解决方案。
云计算