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