如何为现有内部部署群集配置和启用Azure Service Fabric反向代理?

时间:2016-08-10 18:31:58

标签: web-services azure configuration reverse-proxy azure-service-fabric

Azure内部服务结构反向代理是否可在内部部署群集中使用?如果是这样,我如何为现有群集启用它?

描述了here服务结构反向代理。它允许群集外部的客户端通过名称使用特殊URL访问应用程序服务,而无需知道运行服务实例的确切主机:端口(可能会随着服务自动移动而更改)。

默认情况下,似乎没有为具有两个无状态服务实例的本地群集启用Service Fabric反向代理。我尝试使用documented端口19008,但无法使用推荐的URI语法访问该服务。

即,这有效:

http://fqdn:20001/api/odata/v1/$metadata

但这不是:

http://fqdn:19008/MyApp/MyService/api/odata/v1/$metadata

在用于设置我的本地群集的ClusterConfig JSON的NodeTypes部分中,有一个属性“httpGatewayEndpointPort”:“19080”,但该端口似乎不能用作反向代理(它是服务Fabric Explorer Web-app端点)。我猜测在集群配置JSON中以某种方式指定了所需的配置。 referenced article中有说明解释了如何在云中配置反向代理,但不是内部部署。

我正在寻找的是有关如何在本地多机群集或开发群集中设置Service Fabric反向代理的说明。

3 个答案:

答案 0 :(得分:14)

是的,反向代理可在本地使用。

要使其适用于现有群集,必须在群集配置XML中对其进行配置和启用,然后必须部署新配置,如下所述。

对于新群集,请在创建群集之前在群集配置JSON中进行设置,如@Scott Weldon所述。

@Senj提供了线索(谢谢!),这让我得到答案。我最近在我的开发盒上更新了我的Service Fabric位到5.1.163.9590。当我查看C:\ SfDevCluster \ Data \ FabricHostSettings.xml时,我注意到以下内容:

 <Section Name="FabricNode">
    ...
    <Parameter Name="NodeVersion" Value="5.1.163.9590:1.0:0" />
    ...
    <Parameter Name="HttpApplicationGatewayListenAddress" Value="19081" />
    <Parameter Name="HttpApplicationGatewayProtocol" Value="http" />
    ...
  </Section>

有趣!随着开发群集的爆发,我浏览了:

http://localhost:19081/MyApp/MyService/api/odata/v1/$metadata
瞧,瞧!我的API返回了预期的数据。所以@Senj是正确的,它与HttpApplicationGateway设置有关。我猜测在最新的SDK版本中,它是预先配置并默认启用的。 (让我失望的是所有文档都引用了端口19008,但实际配置的端口是19081!)

为了让反向代理在“真正的”多机(VM)集群上工作,我做了以下(注意:我不认为升级集群代码包是必要的,但因为我什么也没有我的映像存储用于集群升级,集群升级过程需要一个代码包,我使用的是最新版本):

  1. 复制现有群集清单(从Service Fabric Explorer中的“清单”选项卡),粘贴到新的XML文件中,修改版本号并按如下所示进行修改:
  2. 在NodeType Endpoints部分,添加:

    <NodeTypes>
        <NodeType Name="NodeType0">
          <Endpoints>
            <HttpApplicationGatewayEndpoint Port="19081" Protocol="http" />
            ...
          </Endpoints>
        </NodeType>
    </NodeTypes>
    

    并在<FabricSettings>下添加以下部分:

    <Section Name="ApplicationGateway/Http">
      <Parameter Name="IsEnabled" Value="true" />
    </Section>
    
    1. 使用Service Fabric PowerShell命令:

      • 将新群集配置(以前复制的manifest.xml)复制到结构图像存储
      • 注册新群集配置
      • 将Service Fabric运行时群集代码包(可用here - 请参阅release notes以获取指向MSI的链接)复制到映像存储
      • 注册群集代码包
      • 启动并完成集群升级(我使用了不受监控的手动模式,它一次只能运行一个VM,并且在每个节点完成后需要手动恢复命令)
    2. 群集升级完成后,我可以使用反向代理端点和appname / servicename URL语法查询我的服务API:

      http://fqdn:19081/MyApp/MyService/api/odata/v1/$metadata
      

答案 1 :(得分:2)

我在独立安装程序版本(5.1.156)中启用了此功能,方法是将以下行添加到nodeTypes元素下的JSON配置文件中(我使用ClusterConfig.Unsecure.MultiMachine.json但我假设任何JSON文件会工作):

"httpApplicationGatewayEndpointPort": "19081"

所以最后的nodeTypes看起来像这样:

"nodeTypes": [
    {
        "name": "NodeType0",
        "clientConnectionEndpointPort": "19000",
        "clusterConnectionEndpoint": "19001",
        "httpGatewayEndpointPort": "19080",
        "httpApplicationGatewayEndpointPort": "19081",
        "applicationPorts": {
            "startPort": "20001",
            "endPort": "20031"
        },
        "ephemeralPorts": {
            "startPort": "20032",
            "endPort": "20062"
        },
        "isPrimary": true
    }
]

答案 2 :(得分:1)

我认为它与HttpApplicationGatewayEndpoint属性有关,另请参阅我在https://github.com/Azure/service-fabric-issues/issues/5上的问题 但它对我不起作用..

另请注意

<Section Name="ApplicationGateway/Http">
            <Parameter Name="IsEnabled" Value="true" />
</Section>

对我来说是对的。

编辑:

我注意到在我的仅安装Windows上,HttpApplicationGatewayListenAddress在FabricHostSettings.xml中的值为0

<Parameter Name="HttpGatewayListenAddress" Value="19080" />
<Parameter Name="HttpGatewayProtocol" Value="http" />
<Parameter Name="HttpApplicationGatewayListenAddress" Value="0" />
<Parameter Name="HttpApplicationGatewayProtocol" Value="" />