web-dev-qa-db-ja.com

既存のオンプレミスクラスターのAzure Service Fabricリバースプロキシを構成して有効にする方法は?

Azure Service Fabricリバースプロキシはオンプレミスクラスターで使用できますか?もしそうなら、どのようにして既存のクラスターに対してそれを有効にできますか?

Service Fabricリバースプロキシについて説明します ここ 。これにより、クラスターの外部のクライアントが、サービスのインスタンスが実行されている正確なHost:portを知る必要なく、サービスの名前が特別なURLでアプリケーションサービスにアクセスできるようになります(サービスが自動的に移動するときに変更される可能性があります)。

デフォルトでは、ステートレスサービスの2つのインスタンスを持つオンプレミスクラスターで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"がありますが、そのポートはリバースプロキシとして機能していないようです(Service Fabric Explorer Webです)。 -アプリのエンドポイント)。必要な構成がクラスター構成のJSONで何らかの方法で指定されていると思います。 参照記事 には、クラウドではなく、オンプレミスではなくリバースプロキシを構成する方法を説明する手順があります。

探しているのは、オンプレミスのマルチマシンクラスターまたは開発クラスターにService Fabricリバースプロキシを設定する方法の説明です。

15
CyberMonk

はい、リバースプロキシはオンプレミスで利用できます。

これを既存のクラスターで機能させるには、以下で説明するように、クラスター構成XMLで構成および有効化してから、新しい構成をデプロイする必要があります。

新しいクラスターの場合は、@ Scott Weldonの説明に従って、クラスターを作成する前にクラスター構成JSONで設定します。

@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ファイルに貼り付けて、バージョン番号をバンプし、次のように変更します。

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ランタイムクラスターコードパッケージ(利用可能 ここ -MSIへのリンクについては リリースノート を参照)をイメージストアにコピーします。
    • クラスターcodepackageを登録する
    • クラスターのアップグレードを開始して完了します(監視されていない手動モードを使用しました。これは、一度に1つVMを実行し、各ノードの完了後に手動のResumeコマンドが必要です)。

クラスターのアップグレードが完了した後、リバースプロキシエンドポイントとappname/servicename URL構文を使用してサービスAPIをクエリすることができました。

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

スタンドアロンインストーラーバージョン(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
Vislor

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="" />
1
Senj