Service Fabric(本地)路由到多租户容器化应用程序

Service Fabric (On-premise) Routing to Multi-tenancy Containerized Application

我正在尝试为 Service Fabric 中的多租户容器化 ASP.NET MVC 应用程序获取概念证明。这个想法是每个客户将获得分布在集群中的 1+ 个应用程序实例。我无法规划的一件事是路由。

每个应用程序的分区方式与 类似。到目前为止的计划是让外部负载均衡器将每个请求路由到 SF 反向代理服务。

例如: tenant1.myapp.com 将路由到 <SF cluster node>:19081/myapp/tenant1 的反向代理(19081 是 SF 反向代理的默认端口),tenant2.myapp.com -> <SF Cluster Node>:19081/myapp/tenant2,等等,然后代理将路由它到应用程序实例正在侦听的正确 node:port

由于每个应用程序都必须映射到不同的端口,因此 SF 计划在创建每个应用程序时动态分配一个端口。这似乎并不完全可扩展,因为理论上我们可以达到端口限制 (~65k)。

我的问题是,这是 valid/suggested 方法吗?有更好的方法吗?我有什么东西 missing/overlooking 吗?我是 SF 的新手,所以任何 help/insight 将不胜感激!

假设你不需要在每个节点上都有一个实例,你最多可以有 (nodecount * 65K) 服务,这将使其再次可扩展。

看看 Azure API management and Traefik,其中有一些 SF 集成选项。这比有限的内置反向代理要好得多。例如,他们提供路由规则。

我认为临时端口限制对您来说不是问题,您可能会在消耗这些端口的一半之前消耗所有服务器资源(CPU + 内存)。

做你需要的是可能的,但它需要你创建一个脚本或一个应用程序来负责为部署的服务实例创建和管理配置。

我不会使用内置的反向代理,它非常有限,对于你想要的只会添加额外的配置而没有任何好处。

目前我认为 traefik 是最合适的解决方案。 Traefik 使您能够将特定域路由到特定服务,这正是您想要的。

因为您将使用多个域,所以需要动态配置,而动态配置不是开箱即用的,这就是为什么我建议您创建一个单独的应用程序来部署这些实例。一个非常高级别的步骤是:

  • 您使用 traefik 默认规则定义您的服务,如图所示 here
  • 从您的应用程序管理器,您为新租户部署此服务的新命名服务
  • 部署实例后,您将其配置为在特定域中侦听,将规则 traefik.frontend.rule=Host:tenant1.myapp.com 设置为正确的租户名称

您可能需要添加一些额外的配置,但这会引导您走向正确的道路。

关于集群架构,您可以通过多种方式实现,首先,我建议您保持简单,一种前端节点类型包含 traefik 服务,另一种后端节点类型用于您的服务,从那里您可以决定如何正确规划集群,已经有很多关于如何定义集群的答案。

请查看以下链接的更多信息:

https://blog.techfabric.io/using-traefik-reverse-proxy-for-securing-microservices-on-azure-service-fabric/

https://docs.traefik.io/configuration/backends/servicefabric/