我可以用更智能的nginx配置替换AKS k8内部的微服务吗?

时间:2019-01-03 13:13:42

标签: kubernetes microservices kubernetes-ingress azure-kubernetes nginx-ingress

问题

在路由到请求的api之前,我可以让Nginx在AKS k8内部调用另一个微服务吗? -目标是加快请求(减少跳数)并简化构建和部署(减少服务)。

说明

在我们当前部署的Azure AKS(Kubernetes)群集中,我们还有一项我希望用nginx替代的附加服务。这是一个路由微服务,在执行路由之前会先调用身份API。

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

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

一个简短的解释是:

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

k8s with our own Router API

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

1 个答案:

答案 0 :(得分:2)

ProxyKit(https://github.com/damianh/ProxyKit)可以替代nginx-它使您可以轻松地向某些请求添加自定义逻辑(例如,我基于URL中的租户查找API密钥),并且可以缓存响应使用CacheCow(请参阅ProxyKit源代码中的食谱)