【问题标题】:host multiple public sites on service fabric在服务结构上托管多个公共站点
【发布时间】:2016-12-06 15:14:39
【问题描述】:

我部署了一个域为foo.northcentralus.cloudapp.azure.com 的服务结构集群

它有一个节点类型和一个公共 IP 地址/负载均衡器。

假设我部署了以下两个应用程序:

如何进行设置,以便在端口 80 上托管多个域? (假设我显然拥有这两个域)

我的集群中是否需要多个公共 IP 地址来支持这一点?

【问题讨论】:

    标签: azure dns azure-service-fabric


    【解决方案1】:

    您应该能够通过一些 http.sys 魔术使用单个公共 IP 地址来执行此操作。

    假设您使用 Katana 作为您的网络主机(您引用的字数统计和视觉对象示例使用 Katana),那么它应该就像使用域名中的域名启动服务器一样简单网址:

    WebApp.Start("http://visualobjects.com:80", appBuilder => this.startup.Invoke(appBuilder));
    

    底层Windows HTTP Server API 将使用该URL 注册该服务器,并且任何带有Host: visualobjects.com 标头的HTTP 请求都将自动路由到该服务器。对具有自己主机名的任意数量的服务器重复此操作。这是 http.sys 为单台机器上的多网站托管所做的主机路由,与您在 IIS 中的相同。

    您将遇到的问题是保留主机名,您必须在打开服务器之前在提升的用户帐户下执行此操作。 Service Fabric 以 ServiceManifest.xml 中的 Endpoint 配置形式对此提供了有限的支持:

    <!-- THIS WON'T WORK FOR REGISTERING HOSTNAMES -->
    <Resources>
      <Endpoints>
        <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" Port="80" />
      </Endpoints>
    </Resources>
    

    这里的限制是无法指定主机名,因此 Service Fabric 将始终注册“http://+:[port]”。不幸的是,如果您想在特定主机名上打开服务器,那将不起作用 - 您只需要注册要使用的主机名。您必须使用 netsh 手动完成该部分(并从 ServiceManifest.xml 中删除同一端口的所有端点,否则它将覆盖您的主机名注册)。

    要手动向 http.sys 注册主机名,您必须为运行您的服务的主机名、端口和用户帐户运行 netsh,默认情况下是网络服务:

    netsh http add urlacl url=http://visualobjects.com:80/ user="NT AUTHORITY\NETWORK SERVICE"
    

    但您必须在运行该服务的每台计算机上使用提升的帐户来执行此操作。幸运的是,我们有service setup entry points that can run under elevated account privileges

    编辑

    要使其正常工作,您需要做的一件事是在您正在侦听的同一端口上打开防火墙。您可以通过以下方式做到这一点:

    <Resources>
       <Endpoints>
          <Endpoint Protocol="tcp" Name="ServiceEndpoint" Type="Input" Port="80" />
       </Endpoints>
    </Resources>
    

    请注意,协议是 tcp 而不是 http。这将打开防火墙端口,但不会覆盖您使用 .bat 脚本设置的 http.sys 注册。

    【讨论】:

    • 太棒了,干得好!我在这个深度配置上苦苦挣扎了一段时间,因为我找不到任何关于它的文档。我不得不做一些工作,但这个答案非常明确。
    • 这个限制还存在吗?从您的回答中:“这里的限制是无法指定主机名,因此 Service Fabric 将始终注册“http://+:[port]”。”
    【解决方案2】:

    我相信是的。然后可以设置单独的公共 IP,以允许从这些 IP 路由到相同的后端池,但在不同的端口上。

    【讨论】:

    • 这实际上是比批准的更好的答案。虽然我听说 SF 有 5 个 IP 地址限制(未确认,但需要注意)。
    • 很想知道是否有人试过这个并且有更详细的步骤。
    • 绝对可行。这些站点只需要在集群内的不同端口上运行,这样负载均衡器就可以适当地路由请求。这不是 SF 问题,而是 Azure 网络问题。 SF 只是 Azure VMSS 上的服务。
    猜你喜欢
    • 2013-11-11
    • 2017-09-22
    • 2016-04-22
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多