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リバースプロキシを設定する方法の説明です。
はい、リバースプロキシはオンプレミスで利用できます。
これを既存のクラスターで機能させるには、以下で説明するように、クラスター構成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)クラスターでリバースプロキシを機能させるために、以下を実行しました(注:クラスターのコードパッケージをアップグレードする必要はないと思いますが、イメージストアには何もないためクラスターアップグレードの場合、クラスターアップグレードプロセスにはコードパッケージが必要です。最新バージョンを使用しました):
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>
Service Fabric PowerShellコマンドの使用:
クラスターのアップグレードが完了した後、リバースプロキシエンドポイントとappname/servicename URL構文を使用してサービスAPIをクエリすることができました。
http://fqdn:19081/MyApp/MyService/api/odata/v1/$metadata
スタンドアロンインストーラーバージョン(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
}
]
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="" />