具有资源管理器的虚拟机规模集上的 Azure 多个 Public IP

Azure Multiple Public IPs on a Virtual Machine Scale Set with Resource Manager

我们尝试将我们的平台从经典的 IIS 托管迁移到服务结构微服务架构。到目前为止,我们了解到服务结构存在于虚拟机规模集中并使用负载均衡器与外界通信。

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

在 iis 中,我们可以使用主机 headers 将流量定向到一个或另一个应用程序。但是对于服务结构,我们不能。对我们来说最简单的方法是多个 public IP。这样我们就可以用 dns 来处理它了。 我们考虑了几个没有成功的解决方案。

  1. 具有多个 public IP 的负载平衡器。问题:看起来这只适用于云服务,我们需要使用新的资源管理器世界,那里似乎不可能有多个 public ip。

  2. 多个 public 负载平衡器。问题:规模集仅接受负载均衡器实例 pert 负载均衡器类型。

  3. 应用程序网关。似乎不支持多个 public ip 或主机 header 映射。

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

我的问题是:

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

是否有任何选项可以将主机 header 映射与服务结构一起使用?

有什么建议可以解决我的问题吗?

用ARM模板部署多IP的Service Fabric集群是绝对可以的。您只需要稍微调整一下模板即可:

  • 创建多个 IP 地址资源(例如使用 copy)- 确保检查所有使用该 IP 的资源并适当修改它们
  • 在负载均衡器中:
    • 添加多个 frontendIPConfigurations,每个绑定到自己的 IP
    • 为要从特定前端 IP 配置重定向到 VM 的每个端口添加 loadBalancingRules
    • 添加探测器

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

根据 Eli 的回答收集一些特定于 Service Fabric 的信息:是的,您可以执行所有这些操作,并使用基于 http.sys 的自托管 Web 服务器来托管多个使用不同主机名的网站VIP,例如 ASP.NET Core 1.

中的 Katana 或 WebListener

目前 Service Fabric 中缺少的部分是在 ServiceManifest.xml 的端点定义中配置主机名的方法。网络服务下的 Service Fabric 服务 运行 默认情况下 Windows,这意味着该服务将无权为其想要打开端点的 URL 创建 URL ACL在。为此,当您在 ServiceManifest.xml 的终结点定义中指定 HTTP 终结点时,Service Fabric 会自动为您创建 URL ACL。但是目前,没有地方可以指定主机名,所以 Service Fabric 使用“+”,这是匹配所有内容的强通配符。

现在,这只是一个不便,因为您必须创建一个 setup entry point with your service that runs under elevated privileges 到 运行 netsh 来手动设置 URL ACL。

我们确实计划在 ServiceManifest.xml 中添加主机名字段以简化此操作。