1

问题

我可以让 Nginx 在 AKS k8s 内调用另一个微服务,然后再路由到请求的 api 吗?- 目标是加快请求(更少的跃点)并简化构建和部署(更少的服务)。

解释

在我们当前部署的 Azure AKS (Kubernetes) 集群中,我们有一个额外的服务,我希望用 nginx 替换。它是一个路由微服务,在执行路由之前调用身份 API。

Authorization原因是我想像的一个常见原因,我们通过一些预定义的标头(标准标头,或者有时一些用于调试令牌和模拟的定制标头)接收某种身份验证令牌,我们从使用这些预定义的标头将 API 路由到身份 API 并获得用户身份对象作为回报。

然后,我们将这个基本用户身份对象传递给微服务,以便它们可以快速轻松地访问用户和角色。

一个简短的解释是:

  • Nginx 接收请求,卸载 SSL 并路由到请求的服务。
  • 路由 API 获取授权标头并调用 Identity API。
  • 身份 API 验证授权信息并返回授权错误(当身份验证失败时)或序列化的用户身份对象。
  • 路由器 API 要么返回那里,然后,如果失败,要么路由到请求的微服务(通过破解请求路径),并将用户身份对象作为标头附加。
  • 例如,在 .NET Core 的情况下,请求的微服务可以将该用户身份对象转换为声明主体。

带有我们自己的路由器 API 的 k8s

显然有合并 Router.API 和 UserIdentity.API 的选项,但保持关注点分离似乎是一个更好的举措。我只想删除 Route.API,以保持这种分离,但让 nginx 为我完成这项工作。

4

1 回答 1

2

ProxyKit ( https://github.com/damianh/ProxyKit ) 可能是 nginx 的一个很好的替代品 - 它允许您轻松地将自定义逻辑添加到某些请求(例如,我根据 URL 中的租户查找 API 密钥),您可以使用 CacheCow 缓存响应(参见 ProxyKit 源代码中的配方)

于 2019-01-28T10:55:42.323 回答