使用资源管理器在虚拟机规模集上设置Azure多个公共IP

时间:2016-04-22 12:21:18

标签: azure azure-service-fabric azure-virtual-network azure-vm-scale-set azure-application-gateway

我们尝试将平台从传统的IIS托管迁移到服务结构微服务架构。因此,我们了解到服务结构存在于虚拟机规模集中,并使用负载均衡器与外部世界进行通信。

我们现在面临的问题是我们的应用程序具有不同的访问点。就像一个用于浏览器,一个用于移动应用。两者都使用标准的https端口,但它们是不同的应用程序。

在iis中,我们可以使用主机头将流量定向到一个或另一个应用程序。但是服务面料我们做不到。对我们来说最简单的方法就是多个公共IP。有了它,我们可以用dns处理它。 我们考虑了一些没有成功的解决方案。

  1. 使用多个公共IP负载均衡器。问题:它看起来只适用于云服务,我们需要使用新的资源管理器世界,似乎不可能有多个公共IP。

  2. 多个公共负载均衡器。问题:比例集仅接受负载均衡器实例负载均衡器类型。

  3. 应用程序网关。似乎不支持多个公共IP或主机头映射。

  4. 路径映射。问题:我们在不同的应用程序中有相同的路径。

  5. 我的问题是:

    是否有任何解决方案可以使用多个IP并将流量内部映射到不同的端口?

    是否可以选择使用主机头映射与服务结构?

    有任何建议我如何解决我的问题?

2 个答案:

答案 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群集绝对是可能的。你只需稍微调整一下模板:

  • 创建多个IP地址资源(例如,使用copy) - 确保使用IP审核所有资源并进行相应修改
  • 在负载均衡器中:
    • 添加多个frontendIPConfigurations,每个loadBalancingRules绑定到自己的IP
    • 为要从特定前端IP配置重定向到VM的每个端口添加operator new[](std::size_t, void*)
    • 添加探针

对于主机头映射,这由Windows HTTP Server API处理(请参阅this article)。在配置HTTP侦听器URL时(在OWIN / ASP.NET Core中),您所要做的就是使用特定的主机名(甚至是URL路径)。