4

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

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

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

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

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

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

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

我的问题是:

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

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

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

4

2 回答 2

2

Piling on some Service Fabric-specific info to Eli's answer: Yes you can do all of this and use an http.sys-based self-hosted web server to host multiple sites using different host names on a single VIP, such as Katana or WebListener in ASP.NET Core 1.

The piece to this that is currently missing in Service Fabric is a way to configure the hostname in your endpoint definition in ServiceManifest.xml. Service Fabric services run under Network Service by default on Windows, which means the service will not have access to create a URL ACL for the URL it wants to open an endpoint on. To help with that, when you specify an HTTP endpoint in an endpoint definition in ServiceManifest.xml, Service Fabric automatically creates the URL ACL for you. But currently, there is no place to specify a hostname, so Service Fabric uses "+", which is the strong wildcard that matches everything.

For now, this is merely an inconvenience because you'll have to create a setup entry point with your service that runs under elevated privileges to run netsh to setup the URL ACL manually.

We do plan on adding a hostname field in ServiceManifest.xml to make this easier.

于 2016-04-26T19:27:45.553 回答
1

绝对可以使用 ARM 模板来部署具有多个 IP 的 Service Fabric 群集。你只需要稍微调整一下模板:

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

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

于 2016-04-26T03:51:49.510 回答