4

プラットフォームを従来の IIS ホスティングからサービス ファブリック マイクロ サービス アーキテクチャに移行しようとしています。ここまでで、サービス ファブリックが仮想マシン スケール セットに存在し、ロード バランサーを使用して外部と通信することがわかりました。

現在直面している問題は、アプリケーションへのアクセス ポイントが異なることです。ブラウザ用、モバイルアプリ用のように。どちらも標準の https ポートを使用しますが、アプリケーションは異なります。

iis では、ホスト ヘッダーを使用してトラフィックをいずれかのアプリケーションに転送できます。しかし、サービス ファブリックではそれができません。私たちにとって最も簡単な方法は、複数のパブリック IP です。これで、dns で処理できるようになりました。いくつかの解決策を検討しましたが、成功しませんでした。

  1. 複数のパブリック IP を持つロード バランサー。問題: それは Cloud Services でのみ機能するようで、新しい Resource Manager World を使用する必要があるため、複数のパブリック IP を持つことはできないようです。

  2. 複数のパブリック ロード バランサー。問題: スケール セットは、ロード バランサー タイプごとのロード バランサー インスタンスでのみ受け入れます。

  3. アプリケーション ゲートウェイ。複数のパブリック IP またはホスト ヘッダー マッピングをサポートしていないようです。

  4. パス マッピング。問題: 異なるアプリケーションに同じパスがあります。

私の質問は次のとおりです。

複数の IP を使用し、トラフィックを内部的に異なるポートにマップするソリューションはありますか?

Service Fabric でホスト ヘッダー マッピングを使用するオプションはありますか?

私の問題を解決する方法について何か提案はありますか?

4

2 に答える 2

2

Eli の回答に Service Fabric 固有の情報を追加する: はい、これをすべて実行し、http.sys ベースの自己ホスト型 Web サーバーを使用して、Katana や WebListener などの単一の VIP で異なるホスト名を使用して複数のサイトをホストできます。 ASP.NET Core 1 で。

Service Fabric に現在欠けている部分は、ServiceManifest.xml のエンドポイント定義でホスト名を構成する方法です。Service Fabric サービスは、Windows では既定で Network Service の下で実行されます。つまり、サービスは、エンドポイントを開く URL の URL ACL を作成するためのアクセス権を持っていません。これを支援するために、ServiceManifest.xml のエンドポイント定義で HTTP エンドポイントを指定すると、Service Fabric によって URL ACL が自動的に作成されます。ただし、現在、ホスト名を指定する場所がないため、Service Fabric では、すべてに一致する強力なワイルドカードである "+" が使用されます。

現時点では、 netsh を実行して URL ACL を手動でセットアップするために、昇格された特権で実行されるサービスでセットアップ エントリ ポイントを作成する必要があるため、これは単なる不便です。

これを簡単にするために、ServiceManifest.xml にホスト名フィールドを追加する予定です。

于 2016-04-26T19:27:45.553 に答える
1

ARM テンプレートを使用して、複数の IP を持つ Service Fabric クラスターをデプロイすることは間違いなく可能です。テンプレートを少し調整する必要があります。

  • 複数の IP アドレス リソースを作成します (例: を使用copy) - IP を使用してすべてのリソースを確認し、適切に変更してください。
  • ロードバランサーで:
    • 複数の を追加しfrontendIPConfigurations、それぞれが独自の IP に関連付けられている
    • 特定のフロントエンド IP 構成から VM にリダイレクトするポートごとに追加loadBalancingRulesします。
    • プローブを追加する

ホスト ヘッダー マッピングに関しては、これは Windows HTTP Server API によって処理されます (この記事を参照してください)。HTTP リスナー URL を (OWIN/ASP.NET Core で) 構成するときに、特定のホスト名 (または URL パス) を使用するだけです。

于 2016-04-26T03:51:49.510 に答える