链接
- 第1部分:介绍和体系结构<--本文
- 第2部分:建立Kubernetes和Kafka
- 第3部分:设置Vault
- 第4部分:建立微型服务
- 第5部分:部署和测试
介绍
微服务是一种设计模式,其中大型单片应用程序被分离为更小、更易于管理的组件。这些组件可以协同工作以解决特定的业务问题。
为此,组件需要相互通信。组件之间的通信可以通过多种方式实现:RESTful web服务、SOAP web服务、RPC、消息传递等。消息传递(发布/订阅)的一个流行实现是Kafka。
与大多数消息传递系统相比,Kafka具有更好的吞吐量、内置分区、复制和容错能力,这使其成为大规模消息处理应用程序的一个很好的解决方案。
发布订阅
Kafka遵循发布-订阅模式。这种模式就像一个公告板。例如,如果爱丽丝在公告板上张贴公告。鲍勃和查尔斯都能读。他们可以同时阅读,或者一个接一个地阅读。鲍勃今天可以读黑板,查尔斯明天可以读。爱丽丝的公告将一直保留在公告板上,直到过期为止。
在消息传递系统中,我们将有发布者(Alice)和订阅者(Bob和Charles)。公告板称为主题,公告称为事件或消息。
如您所见,Topic需要在指定的时间段内保留数据。因此,需要保护Topic中的数据。不幸的是,Kafka(在撰写本文时)没有处理端到端的数据加密。
这就是Vault的用武之地。
Vault
Vault为我们提供加密服务。这使我们能够为消息提供端到端加密方案。
但为什么选择Vault?我们真的需要它吗?当然,现在,我们只需要一个私钥/公钥基础设施来加密从发布者到订阅者的消息。只需创建这些密钥并将其嵌入发布服务器和订阅服务器服务中,这非常简单,如下所示:
问题是当我们有多个订户时,每个订户都有自己的私钥/公钥集。当我们需要管理密钥的生命周期时,问题就会出现。例如,当到期时,两个密钥都需要更换。如果嵌入了密钥,则可能需要重新部署。
另一个问题是密钥需要临时撤销和替换。使用嵌入式密钥没有简单的方法。
在微服务环境中,不同的服务具有不同的密钥集,例如下面的服务网格,问题变得更加严重:
试图在仅仅4个服务网格内管理或撤销密钥几乎是不可能的。
Vault允许我们集中管理所有这些密钥:
此外,Vault允许我们动态分配哪个服务可以访问哪个密钥。如果某个特定的服务遭到破坏,一旦系统再次受到保护,密钥就很容易被撤销和恢复。
架构
我们的应用程序架构如下所示。它支持使用Vault和Kafka进行安全的端到端通信(消息传递):
应用流程:
- 交易服务将启动资金从一个存款账户转移到另一个账户。
- 事务消息由事务微服务创建,并由Vault加密。
- 加密的事务消息被传递到请求主题
- 订户将消费消息并执行交易-将资金从一个帐户转移到另一个帐户。
- 然后,订户将通过Response Topic将结果余额回复给Transaction服务
- 登录 发表评论