我们尝试将平台从传统的IIS托管迁移到服务结构微服务架构。因此,我们了解到服务结构存在于虚拟机规模集中,并使用负载均衡器与外部世界进行通信。
我们现在面临的问题是我们的应用程序具有不同的访问点。就像一个用于浏览器,一个用于移动应用。两者都使用标准的https端口,但它们是不同的应用程序。
在iis中,我们可以使用主机头将流量定向到一个或另一个应用程序。但是服务面料我们做不到。对我们来说最简单的方法就是多个公共IP。有了它,我们可以用dns处理它。 我们考虑了一些没有成功的解决方案。
使用多个公共IP负载均衡器。问题:它看起来只适用于云服务,我们需要使用新的资源管理器世界,似乎不可能有多个公共IP。
多个公共负载均衡器。问题:比例集仅接受负载均衡器实例负载均衡器类型。
应用程序网关。似乎不支持多个公共IP或主机头映射。
路径映射。问题:我们在不同的应用程序中有相同的路径。
我的问题是:
是否有任何解决方案可以使用多个IP并将流量内部映射到不同的端口?
是否可以选择使用主机头映射与服务结构?
有任何建议我如何解决我的问题?
答案 0 :(得分:2)
将一些特定于Service Fabric的信息写入Eli的回答:是的,您可以执行所有这些操作,并使用基于http.sys的自托管Web服务器在一个主机上使用不同的主机名托管多个站点VIP,例如ASP.NET Core 1中的Katana或WebListener。
Service Fabric中当前缺少的部分是一种在ServiceManifest.xml中配置端点定义中的主机名的方法。默认情况下,Windows上的Service Fabric服务在网络服务下运行,这意味着该服务无权为其打开端点的URL创建URL ACL。为此,当您在ServiceManifest.xml中的端点定义中指定HTTP端点时,Service Fabric会自动为您创建URL ACL。但是目前,没有地方可以指定主机名,因此Service Fabric使用" +",这是匹配所有内容的强通配符。
目前,这只是一个不便之处,因为您必须使用setup entry point服务创建runs under elevated privileges来运行netsh以手动设置URL ACL。
我们计划在ServiceManifest.xml中添加主机名字段以使其更容易。
答案 1 :(得分:1)
使用ARM模板部署具有多个IP的Service Fabric群集绝对是可能的。你只需稍微调整一下模板:
copy
) - 确保使用IP审核所有资源并进行相应修改frontendIPConfigurations
,每个loadBalancingRules
绑定到自己的IP operator new[](std::size_t, void*)
对于主机头映射,这由Windows HTTP Server API处理(请参阅this article)。在配置HTTP侦听器URL时(在OWIN / ASP.NET Core中),您所要做的就是使用特定的主机名(甚至是URL路径)。