【发布时间】:2021-02-17 14:26:09
【问题描述】:
我有一个带有微服务架构的项目(在 Docker 和 Kubernetes 上),两个主要的应用程序是使用 AIOHTTP 和 Django 用 Python 编写的(还有 Ingress 代理、静态文件服务器,还有几个是用 NginX 制作的)。我想将这些 Python 应用程序拆分为单独的更小的微服务,但为了实现这一点,我可能还应该将身份验证移到单独的应用程序中。但是我该怎么做呢?
也许我还应该补充一点,我问的不是特定的身份验证方法,如 OAuth、JWT 等,而是集群架构内的依赖关系和职责划分。
在我看来,一个不错的解决方案是 Ingress NginX 代理服务器的一些插件,或者之前的微服务,这样我的 Python 身份验证代理就不会关心方法的目的地,就像一些中间件一样,只需读取 headers/cookies,检查访问令牌或sessionId,如果访问有效则设置userId,并进一步传递请求。
一个简短的简化架构如下所示:
这就是我的想象,提及更少的复杂连接:
但我不确定这是否合理。此外,这种方法会降低 K8s Ingress 的优势,它为从 bash 更新路径表提供了惊人的接口,但是据我所知,它不允许在它之前运行任何请求处理程序,所以我必须在没有很好的 K8s 集成的情况下运行自定义 NginX 代理。
那么,还有哪些其他可能的架构解决方案?
我只能想象创建一个请求处理程序,它执行所有授权并将请求传递给其他不关心身份验证的微服务(或通过 RPC),但我认为这通常不是完美的解决方案。
【问题讨论】:
标签: python authentication kubernetes proxy architecture