如何将请求路由到正确的租户 API 网关?

Posted

技术标签:

【中文标题】如何将请求路由到正确的租户 API 网关?【英文标题】:How to route requests to right tenant api gateway? 【发布时间】:2021-12-19 18:13:17 【问题描述】:

我正在创建一个多租户孤岛模式架构来支持 SAAS 应用程序。关注这个link。

我可以像这样注册新租户并创建他们各自的堆栈:

到目前为止一切顺利,下一步是为每个租户创建自己的域,例如:tenant1.admin.foo.com,以访问相同的 CloudFront 分配(Web 前端必须对所有人都相同)。我可以通过在 Route53 *.admin.foo.com 中创建一个可以访问 CloudFront 的记录来实现这一点

问题:

我需要将每个请求路由到各自的租户堆栈,例如:tenant1.api.foo.com/whatever 应该路由到为租户 1 创建的 api 网关。

起初我想在 CloudFront 中创建一个路由到 api 网关的源,这样做的问题是 CloudFront 源被限制为 25 个。

我想在 Route53 中创建一条记录以指向它们各自的 api 网关,但问题是我必须在 api 网关中使用自定义域,因为它们限制为 120,我希望有更多租户超过 120 人。

如何进行此路由?

这是一个用例的图示:

PS:欢迎任何建议。

【问题讨论】:

【参考方案1】:

您可以使用为备用域名 (CNAME) 设置的通配符 (*.api.foo.com) 设置分配。如果您将 Lambda@Edge 附加到源请求(在缓存行为设置下),您可以动态修改主机标头以指向适当的 API 网关主机 (xxxxxx.execute-api.us-east-1.amazonaws.com) .

AWS 博客,他们在其中使用 S3 存储桶作为源。 它应该相当接近地转换为 APIGateway 主机名:

https://aws.amazon.com/blogs/networking-and-content-delivery/dynamically-route-viewer-requests-to-any-origin-using-lambdaedge/

【讨论】:

因为我需要检查 subdomian (tenant.foo.com) 我应该使用 origin-request 还是 viewer-request?我需要获取域的“租户”部分

以上是关于如何将请求路由到正确的租户 API 网关?的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 abp 的 ocelot 时如何将租户 ID 发送到下游服务

本地测试时微服务如何路由

如何在 .net api 网关中使用 gRPC 服务?

如何设计一个亿级API网关?

什么是API网关 如何设计亿万级统一网关

如何在 api 网关架构中获取 JWT 令牌