spring - 如何使用 JWT 和 Kubernetes 设置 Spring 后端
问题描述
我实现了一个 Spring 后端,它负责存储不同的数据(用户、讲座等)。该后端由 JWT 保护,一切正常。对于我的学习,我想增强后端,现在我想使用微服务架构而不是单体。为此,我有使用 Docker 和 Kubernetes 的要求。当我想在微服务架构中使用 JWT 时,我总是阅读一些文章,其中写道我需要一个授权服务器和一个资源服务器。那是对的吗?我是否需要一个网关(例如 Zuul)来实现我的目的?有人可以帮助我构建项目并为技术堆栈提供建议。最后,整个项目将在一台服务器上运行。
我实现了一个 molotithical 后端,由 JWT 保护。
解决方案
Kubernetes 官方支持通过OpenID Connect工具使用 OAuth 2.0 协议对JSON Web Tokens(JWT) 内的 API 服务器进行身份验证,用于用户请求识别。但是,这仅代表授权模型的一部分,它决定了如何为经过身份验证的用户授予适当的安全策略或角色来管理 Kubernetes 集群资源。
为了构建应用程序或将应用程序迁移到 Kubernetes,您可能会考虑将应用程序暴露在集群之外,为此,入口代理请求通过匹配请求路径来精确服务。实际上,Ingress
是一个逻辑资源元素,它描述了一组通过Ingress Controller进行流量管理的规则。因此,Ingress 控制器可以通过提供 L7 网络设施来发挥 API 网关的作用,例如:负载平衡、SSL 终止和用于嵌套应用程序服务的 HTTP/HTTPS 流量路由。
正如您提到的, Zuul网关可以是 Kubernetes 集群前面的边缘代理服务的选项之一,但是我建议寻找更多面向 Kubernetes 的解决方案。Istio就是一个很好的例子,因为它带来了广泛的网络路由器功能,并通过其核心服务网格设计非常简单地集成到 Kubernetes 集群中。Istio 在声明的身份验证策略中通过 JWT 提供最终用户身份验证。
或者,您也可以通过已宣布的 JWT 身份验证来使用Nginx plus功能。
推荐阅读
- swift - NSScrollview“粘性”滚动行为
- javascript - 如何使此按钮响应并运行列出的功能?
- java - 如何通过带有 RFH 的 IBM MQ 远程队列发送消息头属性?
- amazon-web-services - 如何使用 BootstraplessSynthesizer 将 DynamoDB 复制到多个区域?
- collections - 迭代一个列表,当不知道哪一个应该在外循环时
- python - Django,为什么不发布到数据库?
- curl - 在这个 URL 中使用 curl 有什么不合法的?
- python - 使用 SQL 结果作为附件在 Python 中安排每月电子邮件
- php - PHP:有没有比循环“while ($row = $results->fetchArray(SQLITE3_ASSOC))”更好的方法?
- r - 如何将 R 函数应用于每一行并组合结果