Consul和服务网格的智能网络

在过去的一年里,服务网格技术获得了极大的兴趣。尽管服务网格的概念并不新鲜,但是实现细节对某些人来说却是新鲜的。HashiCorp Consul是一个开源工具,提供服务发现、健康检查、负载均衡和全局分布的键值存储。这些特性使Consul可以作为服务网格理想的控制平面。这篇文章讨论了一些关于采用服务网格的基本原则,以及Consul如何类似Istio, Linkerd和Envoy当作项目的控制平面。

在深入研究服务网格之前,了解基本原则和在考虑服务网格等技术时可用的选项是有帮助的。

哑管道或智能网络

“哑管道”设计注重简单性,并假设网络是“哑”的。这个设计框架可以用端到端原则来最好地解释。它指出,通信或网络特性应该尽可能地接近应用程序,因此应用程序最终要做大量的繁重工作(重试、回退、断路、请求路由等)。因此,在每个应用程序中都可能存在重复的代码来重新实现这些特性。通常情况下,负载均衡器用于在应用程序之外实现这种功能。这使得网络操作简单,易于推理。

“智能网络”设计在重试、回退、断路、负载平衡等方面采取了一种带外的方式。它提供了基于网络的这些特性的实现,因此多个应用程序可以从这些特性中获益,而应用程序的实现工作很少甚至没有。这基本上是服务网格所采用的方法。遥测、流量控制、服务发现和网络策略控制等功能也可以直接提供。然而,服务网格成为了应用程序的隐式依赖关系,因此很难对整个系统进行推理。例如,请求重试行为可能在应用程序源代码和网络配置中都指定。

控制与数据平面分离

与联网类似,服务网格通常由控制平面和数据平面组成。这将性能敏感的数据路径与系统的其他部分分隔开来。

控制平面负责决定在何处发送流量和配置数据平面。此外,它还负责网络策略执行和向数据平面提供服务发现数据等功能。由于控制平面是服务网格的一个重要组成部分,它必须是高度可用和分布式的。

数据平面提供了从应用程序转发请求的能力,由于是数据路径,因此得名。数据平面还可以提供更复杂的特性,比如健康检查、负载均衡、断路、超时和重试、身份验证和授权。数据平面处于从一个应用程序到另一个应用程序的数据流的关键路径,因此需要高吞吐量和低延迟。

协议感知

协议感知是设计数据平面时要考虑的另一个重要因素。数据平面可能在OSI模型的不同层实现,可能知道也可能不知道协议。

让我们以四层协议—传输层为例。第4层协议的两个常见示例是TCP和UDP。TCP用于大多数常见协议,如HTTP、SSH、SMTP和大多数数据库。UDP用于延迟敏感的应用程序,如VOIP、视频会议和对等协议。使用此层的数据平面可以认为是“普遍”兼容的,因为它使用TCP/UDP等较低级别的协议来执行请求转发。这个数据平面可以提供高性能,因为转发是在不考虑数据包内容的情况下进行的。这种方法的一个缺点是很难提供复杂的或请求敏感的特性。

现在让我们以七层协议—应用层为例。使用此层的数据平面具有应用程序感知,可以使用附加信息来执行复杂的路由决策。例如,通过解析HTTP请求,可以使用请求路径或请求头等请求内容来更改路由和转发行为。这种方法的一个缺点是,由于正在检查包的内容,因此它可能产生较低的性能。另一个挑战是应用层协议的多样性。虽然HTTP很常见,但是有无数其他的协议被使用。

Consul 作为控制平面

Consul提供了许多功能,使其成为一个理想的控制平面。Consul的体系结构确保了它的高可用性,并支持多数据中心拓扑。Consul的主要目标之一是提供服务发现,它可以与哑管道和智能网络方法一起工作。在Dumb Pipe设计中,Consul可以提供一流的DNS接口,应用程序可以使用它来发现其他应用程序并直接通信,而无需使用中间数据平面或服务网格。此外,这些应用程序可以使用Consul的键值存储来存储重试、超时和断路设置,并在需要时请求它们。

在智能网络设计用例中,Consul可以通过配置数据平面的API提供服务发现和健康检查信息。Consul K/V存储也可以用于持久状态,比如网络策略。在之前的一篇博客文章中,我们探讨了Consul如何用于负载均衡,当查看在微服务体系结构中Consul负载均衡的常见策略时,这可能是一个很好的解读。

Consul如何配合服务网格?

服务网格的目标是为服务通信提供服务,并提供一些更高级别的特性,如可观察性、策略执行、重试、备份和安全性。它由一个控制平面,一个(典型的)附带可以提供诸如政策实施等的适配器的7层数据平面组成。Consul可以用作控制平面,而数据平面有很多选择,包括项目Envoy,Linkerd,NGINX,HAProxy,Traefikand,Fabio。

让我们以Istio为例。Istio是一个连接、管理和保护微服务的平台。Istio的控制平面由导航仪、混合器和Istio-auth组成。

Pilot旨在抽象特定于平台的服务发现机制,并提供数据平面(Envoy)可使用的标准数据格式。由于Consul提供了丰富的服务发现API,因此可以将Pilot配置为使用该数据来发现在数据中心中运行的服务。在Consul旁边安装Istio的说明可以在https://istio.io/docs/setup/consul/找到。

Istio Consul Integration

mix的目标是成为Istio的策略执行组件。它将策略决策从应用程序转移到操作人员可以管理的配置中。Consul有一个键值存储,可用于存储操作符定义的策略,混合器可以与Consul接口,并在服务网格中执行这些策略。

Istio-Auth旨在提供服务,以服务于使用相互TLS的终端用户身份验证,并为网格中运行的每个服务提供身份验证。在HashiCorp中,我们还构建了具有PKI秘密后端Vault,该后端可用于动态生成证书。Istio-Auth可以使用这个特性向数据平面提供证书,数据平面将强制执行服务到服务通信的相互TLS。

结论

Consul提供了许多功能,使其作为服务网格理想的控制平面。这篇文章详细介绍了在查看服务网格时应该考虑的一些基本原则,并展示了Consul如何可以用来驱动服务网格。

对Consul的功能感兴趣,如服务发现,关键价值存储等?首先查看https://www.consul.io/downloads.html

猜你喜欢

转载自blog.csdn.net/zl1zl2zl3/article/details/83060334