【微服务安全】使用 Spring Boot、Kafka、Vault 和 Kubernetes 保护微服务间通信——第 5 部分:部署和测试

简介: 使用 Spring Boot、Kafka、Vault 和 Kubernetes 保护微服务间通信——第 5 部分:部署和测试
  • 第 1 部分:简介和架构
  • 第 2 部分:设置 Kubernetes 和 Kafka
  • 第 3 部分:设置保险柜
  • 第 4 部分:构建微服务
  • 第 5 部分:部署和测试 <--本文

部署微服务

 

构建镜像并部署到 Kubernetes

 

  • 将命令行控制台指向 $PROJECTS/k8s 文件夹。运行命令

> jhipster kubernetes

 

  • 提出的选择是:
  • which * type *- 选择微服务应用
  • 输入根目录 - 在我们的例子中,我们使用 (../)
  • 当被问及您想要包含哪个应用程序时 - 选择 GatewayKafka、Transaction 和 DepositAccount
  • 确保输入注册表管理员密码
  • 对于 Kubernetes 命名空间 - 选择默认值
  • 对于基础 Docker 存储库 - 使用您的 Docker Hub 用户名
  • 推送 docker 镜像 - 选择 docker push
  • 对于 istio - 设置为否
  • 对于边缘服务的 Kubernetes 服务类型 - 选择 LoadBalancer
  • 对于动态存储配置 - 是
  • 对于存储类,使用默认存储类 - 将答案留空
  • 成功后,您将看到以下屏幕

Kubernetes configuration successfully generated!

WARNING! You will need to push your image to a registry. If you have not done so, use the following commands to tag and push the images:

 docker image tag depositaccount azrulhasni/depositaccount

 docker push azrulhasni/depositaccount

 docker image tag gatewaykafka azrulhasni/gatewaykafka

 docker push azrulhasni/gatewaykafka

 docker image tag transaction azrulhasni/transaction

 docker push azrulhasni/transaction

INFO! Alternatively, you can use Jib to build and push image directly to a remote registry:

 ./mvnw -ntp -Pprod verify jib:build -Djib.to.image=azrulhasni/depositaccount in /Users/azrul/Documents/GitHub/Ebanking-JHipster-Kafka-Vault/DepositAccount

 ./mvnw -ntp -Pprod verify jib:build -Djib.to.image=azrulhasni/gatewaykafka in /Users/azrul/Documents/GitHub/Ebanking-JHipster-Kafka-Vault/GatewayKafka

 ./mvnw -ntp -Pprod verify jib:build -Djib.to.image=azrulhasni/transaction in /Users/azrul/Documents/GitHub/Ebanking-JHipster-Kafka-Vault/Transaction

You can deploy all your apps by running the following kubectl command:

 bash kubectl-apply.sh -f

[OR]

If you want to use kustomize configuration, then run the following command:

 bash kubectl-apply.sh -k

Use these commands to find your application's IP addresses:

 kubectl get svc gatewaykafka

INFO! Congratulations, JHipster execution is complete!

 

  • 我们将使用 Jib 版本。将命令行控制台指向 $PROJECTS/DepositAccount
  • 运行以下命令。这会将 DepositAccount 推送到 Docker Hub。

>./mvnw -ntp -Pprod verify jib:build -Djib.to.image=azrulhasni/depositaccount

 

  • 然后,转到 $PROJECTS/GatewayKafka 并运行以下命令。这会将 GatewayKafka 推送到 Docker Hub。

> ./mvnw -ntp -Pprod verify jib:build -Djib.to.image=azrulhasni/gatewaykafka

 

  • 最后,转到 $PROJECTS/Transaction 并运行以下命令。这会将事务推送到 Docker Hub。

>./mvnw -ntp -Pprod verify jib:build -Djib.to.image=azrulhasni/transaction

 

  • 然后,返回 $PROJECTS/k8s 并运行以下命令。这会将上面的所有三个图像拉到我们的 Kubernetes 集群中。

> bash kubectl-apply.sh -f

 

  • 要验证微服务是否已正确部署并运行,请运行以下命令:

>kubectl get  pods

 

  • 您将在下面看到结果。请注意,我们部署了每个微服务、其对应的数据库以及 JHipster 注册表。

网络异常,图片无法展示
|

测试微服务

 

  • 首先,我们需要安装 JQ。 JQ 是一个允许我们 grep json 数据的工具。 JQ 分布可以在这里找到 https://stedolan.github.io/jq/download/
  • 回想一下我们的架构。为了让我们调用事务微服务,我们必须通过我们的网关。还记得我们在创建网关时选择了 JWT 身份验证。运行以下命令为此类访问创建令牌。令牌将被导出到一个名为 TOKEN 的变量中。请注意,我们使用的是默认管理员用户和密码。我们应该为生产创建合适的用户。

> export TOKEN=`curl  -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{  "password": "admin",  "rememberMe": true,  "username": "admin"  }' 'http://localhost:8080/api/authenticate' | jq -r .id_token`

 

  • 要验证令牌,请运行:

> echo $TOKEN

 

  • 您应该得到如下响应

> echo $TOKEN

eyJhbGciOiJIUzUxMiJ9...AE2w

 

  • 首先,我们可能想要创建 2 个存款账户,我们也可以从中借记和贷记。使用下面的 curl 命令。我们将创建一个帐号为 1111 的帐户,余额为 10000。

> curl -X POST "http://localhost:8080/services/depositaccount/api/deposit-accounts" -H "accept: */*" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d "{ \"accountNumber\": \"1111\", \"balance\": 10000, \"openingDate\": \"2020-10-17T11:55:02.749Z\", \"productId\": \"DEPOSIT\", \"status\": 0}"


{"id":1001,"accountNumber":"1111","productId":"DEPOSIT","openingDate":"2020-10-17T11:55:02.749Z","status":0,"balance":10000}

  • 然后创建第二个帐户。账号为2222,余额为0

> curl -X POST "http://localhost:8080/services/depositaccount/api/deposit-accounts" -H "accept: */*" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d "{ \"accountNumber\": \"2222\", \"balance\": 0, \"openingDate\": \"2020-10-17T11:55:02.749Z\", \"productId\": \"DEPOSIT\", \"status\": 0}"


{"id":1002,"accountNumber":"2222","productId":"DEPOSIT","openingDate":"2020-10-17T11:55:02.749Z","status":0,"balance":0}

  • 现在是关键时刻。让我们将 10 从账户 1111 转移到账户 2222

> curl -X POST "http://localhost:8080/services/transaction/api/transaction-kafka/transfer" -H "accept: */*" -H "Content-Type: application/json" -H "Authorization: Bearer $TOKEN" -d "{ \"amount\": \"10\", \"finalBalance\": \"\", \"fromAccountNumber\": \"1111\", \"toAccountNumber\": \"2222\"}"


{"fromAccountNumber":"1111","toAccountNumber":"2222","amount":"10","finalBalance":"9990.00"}

  • 请注意,finalBalance 字段现在是 9990。
  • 您还可以运行下面的 curl 命令来查看两个帐户的当前余额:

> curl -X GET "http://localhost:8080/services/depositaccount/api/deposit-accounts" -H "accept: */*" -H "Authorization: Bearer $TOKEN"

您将收到以下回复:

[

 {

   "id": 1001,

   "accountNumber": "1111",

   "productId": "DEPOSIT",

   "openingDate": "2020-10-17T12:22:57.494Z",

   "status": 0,

   "balance": 9990

 },

 {

   "id": 1002,

   "accountNumber": "2222",

   "productId": "DEPOSIT",

   "openingDate": "2020-10-17T12:22:57.494Z",

   "status": 0,

   "balance": 10

 }

]

结论

我们从一个简单的架构开始,我们希望从一个微服务向另一个微服务发送加密消息(并接收响应)。

我们探索了 Kafka,也安装了 Kubernetes。我们还探索了 Vault 并尝试了它的功能。

最后,我们创建了 2 个微服务,并将加密消息从一个发送到另一个并接收回复。我们的教程到此结束

完整的应用程序可以在这里访问:https://github.com/azrulhasni/Ebanking-JHipster-Kafka-Vault


Tags

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

相关文章
|
3月前
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
955 2
消息中间件 Java Kafka
407 0
|
4月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
348 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
|
6月前
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
306 0
|
7月前
|
人工智能 Java 测试技术
SpringBoot 测试实践:单元测试与集成测试
在 Spring Boot 测试中,@MockBean 用于创建完全模拟的 Bean,替代真实对象行为;而 @SpyBean 则用于部分模拟,保留未指定方法的真实实现。两者结合 Mockito 可灵活控制依赖行为,提升测试覆盖率。合理使用 @ContextConfiguration 和避免滥用 @SpringBootTest 可优化测试上下文加载速度,提高测试效率。
427 5
|
7月前
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
891 0
|
9月前
|
存储 Kubernetes 异构计算
Qwen3 大模型在阿里云容器服务上的极简部署教程
通义千问 Qwen3 是 Qwen 系列最新推出的首个混合推理模型,其在代码、数学、通用能力等基准测试中,与 DeepSeek-R1、o1、o3-mini、Grok-3 和 Gemini-2.5-Pro 等顶级模型相比,表现出极具竞争力的结果。
|
9月前
|
消息中间件 Java Kafka
Spring Boot整合kafka
本文简要记录了Spring Boot与Kafka的整合过程。首先通过Docker搭建Kafka环境,包括Zookeeper和Kafka服务的配置文件。接着引入Spring Kafka依赖,并在`application.properties`中配置生产者和消费者参数。随后创建Kafka配置类,定义Topic及重试机制。最后实现生产者发送消息和消费者监听消息的功能,支持手动ACK确认。此方案适用于快速构建基于Spring Boot的Kafka消息系统。
1637 7
|
10月前
|
存储 Kubernetes 监控
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
978 33
|
10月前
|
Kubernetes 开发者 Docker
集群部署:使用Rancher部署Kubernetes集群。
以上就是使用 Rancher 部署 Kubernetes 集群的流程。使用 Rancher 和 Kubernetes,开发者可以受益于灵活性和可扩展性,允许他们在多种环境中运行多种应用,同时利用自动化工具使工作负载更加高效。
616 19

推荐镜像

更多