跳转到主要内容

链接

  • 第1部分:介绍和体系结构<--本文
  • 第2部分:建立Kubernetes和Kafka
  • 第3部分:设置Vault
  • 第4部分:建立微型服务
  • 第5部分:部署和测试


介绍

微服务是一种设计模式,其中大型单片应用程序被分离为更小、更易于管理的组件。这些组件可以协同工作以解决特定的业务问题。

为此,组件需要相互通信。组件之间的通信可以通过多种方式实现:RESTful web服务、SOAP web服务、RPC、消息传递等。消息传递(发布/订阅)的一个流行实现是Kafka。

与大多数消息传递系统相比,Kafka具有更好的吞吐量、内置分区、复制和容错能力,这使其成为大规模消息处理应用程序的一个很好的解决方案。

发布订阅

Kafka遵循发布-订阅模式。这种模式就像一个公告板。例如,如果爱丽丝在公告板上张贴公告。鲍勃和查尔斯都能读。他们可以同时阅读,或者一个接一个地阅读。鲍勃今天可以读黑板,查尔斯明天可以读。爱丽丝的公告将一直保留在公告板上,直到过期为止。

在消息传递系统中,我们将有发布者(Alice)和订阅者(Bob和Charles)。公告板称为主题,公告称为事件或消息。

No alt text provided for this image

如您所见,Topic需要在指定的时间段内保留数据。因此,需要保护Topic中的数据。不幸的是,Kafka(在撰写本文时)没有处理端到端的数据加密。

No alt text provided for this image

这就是Vault的用武之地。

Vault

Vault为我们提供加密服务。这使我们能够为消息提供端到端加密方案。

但为什么选择Vault?我们真的需要它吗?当然,现在,我们只需要一个私钥/公钥基础设施来加密从发布者到订阅者的消息。只需创建这些密钥并将其嵌入发布服务器和订阅服务器服务中,这非常简单,如下所示:

No alt text provided for this image

问题是当我们有多个订户时,每个订户都有自己的私钥/公钥集。当我们需要管理密钥的生命周期时,问题就会出现。例如,当到期时,两个密钥都需要更换。如果嵌入了密钥,则可能需要重新部署。

另一个问题是密钥需要临时撤销和替换。使用嵌入式密钥没有简单的方法。

在微服务环境中,不同的服务具有不同的密钥集,例如下面的服务网格,问题变得更加严重:

No alt text provided for this image

试图在仅仅4个服务网格内管理或撤销密钥几乎是不可能的。

Vault允许我们集中管理所有这些密钥:

No alt text provided for this image

此外,Vault允许我们动态分配哪个服务可以访问哪个密钥。如果某个特定的服务遭到破坏,一旦系统再次受到保护,密钥就很容易被撤销和恢复。

架构

我们的应用程序架构如下所示。它支持使用Vault和Kafka进行安全的端到端通信(消息传递):

No alt text provided for this image

应用流程:

  • 交易服务将启动资金从一个存款账户转移到另一个账户。
  • 事务消息由事务微服务创建,并由Vault加密。
  • 加密的事务消息被传递到请求主题
  • 订户将消费消息并执行交易-将资金从一个帐户转移到另一个帐户。
  • 然后,订户将通过Response Topic将结果余额回复给Transaction服务
文章链接