【微服务安全】使用 Spring Boot、Kafka、Vault 和 Kubernetes 保护微服务间通信——第 1 部分:简介和架构

简介: 【微服务安全】使用 Spring Boot、Kafka、Vault 和 Kubernetes 保护微服务间通信——第 1 部分:简介和架构

链接

  • 第 1 部分:简介和架构 <--本文
  • 第 2 部分:设置 Kubernetes 和 Kafka
  • 第 3 部分:设置保险柜
  • 第 4 部分:构建微服务
  • 第 5 部分:部署和测试

介绍

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

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

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

https://kafka.apache.org/

发布订阅

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

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

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

这就是 Vault 的用武之地。

保险库

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

但为什么是保险柜?我们真的需要它吗?现在,当然,我们需要加密从发布者到订阅者的消息是私钥/公钥基础设施。创建这些密钥并将它们嵌入到发布者和订阅者服务中非常容易,如下所示:

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

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

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

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

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

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

架构

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

申请流程:

  1. 交易服务将启动从一个存款账户到另一个存款账户的资金转移。
  2. Transaction Message 由 Transaction 微服务创建并由 Vault 加密。
  3. 将加密的交易消息传递给请求主题
  4. 订阅者将消费消息并执行交易——将资金从一个账户转移到另一个账户。
  5. 然后,订阅者将通过响应主题将结果余额回复给事务服务

Tags

本文:https://architect.pub/secure-inter-micro-service-communication-spring-boot-kafka-vault-and-kubernetes-part-1-introduction

相关文章
|
8月前
|
Java 数据库 数据安全/隐私保护
Spring Boot四层架构深度解析
本文详解Spring Boot四层架构(Controller-Service-DAO-Database)的核心思想与实战应用,涵盖职责划分、代码结构、依赖注入、事务管理及常见问题解决方案,助力构建高内聚、低耦合的企业级应用。
1515 1
消息中间件 Java Kafka
605 0
|
8月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
530 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
|
8月前
|
Kubernetes Java 微服务
Spring Cloud 微服务架构技术解析与实践指南
本文档全面介绍 Spring Cloud 微服务架构的核心组件、设计理念和实现方案。作为构建分布式系统的综合工具箱,Spring Cloud 为微服务架构提供了服务发现、配置管理、负载均衡、熔断器等关键功能的标准化实现。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
666 0
|
10月前
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
737 0
|
11月前
|
负载均衡 Java API
基于 Spring Cloud 的微服务架构分析
Spring Cloud 是一个基于 Spring Boot 的微服务框架,提供全套分布式系统解决方案。它整合了 Netflix、Zookeeper 等成熟技术,通过简化配置和开发流程,支持服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)、配置管理(Config)等功能。此外,Spring Cloud 还兼容 Nacos、Consul、Etcd 等注册中心,满足不同场景需求。其核心组件如 Feign 和 Stream,进一步增强了服务调用与消息处理能力,为开发者提供了一站式微服务开发工具包。
888 0
|
12月前
|
Java 开发者 Spring
Spring框架 - 深度揭秘Spring框架的基础架构与工作原理
所以,当你进入这个Spring的世界,看似一片混乱,但细看之下,你会发现这里有个牢固的结构支撑,一切皆有可能。不论你要建设的是一座宏大的城堡,还是个小巧的花园,只要你的工具箱里有Spring,你就能轻松搞定。
459 9
|
消息中间件 Java Kafka
Spring Boot整合kafka
本文简要记录了Spring Boot与Kafka的整合过程。首先通过Docker搭建Kafka环境,包括Zookeeper和Kafka服务的配置文件。接着引入Spring Kafka依赖,并在`application.properties`中配置生产者和消费者参数。随后创建Kafka配置类,定义Topic及重试机制。最后实现生产者发送消息和消费者监听消息的功能,支持手动ACK确认。此方案适用于快速构建基于Spring Boot的Kafka消息系统。
1833 7
|
前端开发 Java API
微服务——SpringBoot使用归纳——Spring Boot集成 Swagger2 展现在线接口文档—— Swagger 简介
第6课介绍了在Spring Boot中集成Swagger2以展示在线接口文档的方法。随着前后端分离架构的发展,API文档成为连接前端与后端开发的重要纽带。然而,代码更新频繁导致文档难以同步维护,Swagger2解决了这一问题。通过Swagger,在线API文档不仅方便了接口调用方查看和测试,还支持开发者实时测试接口数据。本文使用Swagger 2.2.2版本,讲解如何在Spring Boot项目中导入并配置Swagger2工具,从而高效管理接口文档。
436 0