【Consul on VMs】什么是Consul?

欢迎来到 HashiCorp 的学习平台!

在这里,您将找到如何执行常见 Consul 任务的分步示例。 本合集将教你Consul的基础知识以及如何操作Consul。

在深入了解 Consul 之前,您必须了解什么是服务网格。

什么是 Service Mesh?

服务网格是为本地、云或多云基础设施提供安全的服务到服务通信的专用层。 服务网格通常与微服务架构模式一起使用,可以在涉及复杂网络的任何场景中提供价值。

服务网格通常由控制平面数据平面组成。
控制平面维护一个中央注册表,跟踪所有服务及其各自的 IP 地址,这称为服务发现
只要应用程序在控制平面上注册,控制平面就可以与服务网格的其他成员共享如何与应用程序通信,并强制执行谁可以相互通信的规则。

控制平面负责保护网格、促进服务发现、健康检查、策略实施和其他类似的操作问题。
数据平面处理服务之间的通信。 许多服务网格解决方案使用 sidecar 代理来处理数据平面通信,因此限制了服务对网络环境所需的感知水平。

什么是 Consul?

Consul 是服务网格的控制面。

Consul 是一个多网络工具,提供功能齐全的服务网格解决方案,可解决运营微服务和云基础设施的网络和安全挑战。 Consul 提供了一种软件驱动的路由和分段方法。 它还带来了额外的好处,例如故障处理、重试和网络可观察性。 这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格并实现零信任安全。

您可以将 Consul 与虚拟机 (VM)、容器或容器编排平台(例如 Nomad 和 Kubernetes)一起使用。 Consul 与平台无关,因此非常适合所有环境,包括遗留平台。

如前所述,Consul 是一种多网络工具,可提供服务网格之外的功能。 出于本教程的目的,范围将仅限于服务网格。 要了解有关 Consul 网络功能的更多信息,请访问 consul.io。

Consul 是如何工作的?

架构概述

Consul 是一个分布式系统,旨在运行在节点集群上。
Consul 节点可以是物理服务器、云实例、虚拟机或容器。
Consul 运行的节点集连接在一起,称为数据中心。 一个数据中心将有 3 到 5 台服务器和许多客户端。


架构.png

Consul agent

Consul 可以作为单个二进制文件使用,并且可以作为长时间运行的守护进程运行。
运行 Consul 二进制文件的节点经常被称为 Consul agent。
Consul 可以在两种模式下运行,服务器或客户端。
服务器 agent 为 Consul 维护一致的状态。 保持一致的状态包括许多责任,但在高层次上,它包括以下(但不限于):

  • 跟踪可用服务、它们的 IP 地址以及它们当前的运行状况和状态
  • 跟踪可用节点、它们的 IP 地址以及它们当前的运行状况和状态
  • 构建了解服务和节点可用性的服务目录 (DNS)
  • 维护和更新 K/V 存储
  • 向所有 agent 传达更新(八卦协议)

客户端是一个轻量级进程,在运行服务的每个节点上运行。
请访问 Consul agent 文档页面以深入了解 Consul agent。

应用程序开发人员通常会作为客户端与 Consul 进行交互。应用程序通过使用 Envoy 等 第三方代理与 Consul 集成。 Sidecar 与应用程序和 Consul agent一起部署。

下图显示了 Consul 如何与应用程序集成。


image.png

Consul and proxies

Consul 服务网格中的数据平面由代理(proxies)支持和拥有。

使用 Consul 的应用程序,将指向 localhost 并将所有流量(传入和传出)引导到本地接口。 代理将打开 localhost 上的端口,并将流量从应用程序引导到其他微服务。 代理还将接收流量并将此流量引导回应用程序。
Consul agent(客户端)通过有关服务网格的信息使代理保持最新。 这包括诸如哪些服务可用(服务发现)以及应用程序是否可以与其他服务通信(服务网格)等信息。

在下面的示例代码中,同一应用程序的两个实例与另一个服务(订单服务)进行通信。
第一个示例选项卡代表应用程序直接查询 API 的传统方法。
第二个示例选项卡使用 Consul 和代理。 注意 Consul 示例应用程序是如何指向 localhost 而不是 API URL。 这种抽象为应用程序引入了新的灵活性。 它允许动态网络行为,例如故障转移,而无需更改应用程序。

  • 传统方法
resp, err := http.Get("http://api.example/v1/orders")
if err != nil {
   log.Fatalln(err)
}
  • Consul
resp, err := http.Get("http://localhost/v1/orders")
if err != nil {
   log.Fatalln(err)
}

Consul agent 为应用程序和代理提供了许多其他好处,例如生成代理配置、为 mTLS 创建 x509 证书、以及动态轮换证书。 通过将所有网络责任委托给代理,应用程序开发人员可以将注意力集中在开发业务逻辑上。 请访问 Consul 服务网格文档页面以了解有关 Consul 为应用程序提供的好处的更多信息。

你可能感兴趣的:(【Consul on VMs】什么是Consul?)