Azure VM上にホストされているAPIマイクロサービスインフラストラクチャがあります。各VMはKestrel上で動作する別々のサイトであるいくつかのAPIをホストします。すべての外部トラフィックは、RPを介して(IIS上で実行されます)マイクロサービス用にAzureロードバランシングを設定するにはどうすればよいですか?
私たちには、外部リクエストを受け入れるように設計されたAPIと、内部APIのみがあります。
内部APIはスケールセットでホストされ、各スケールセットVMはすべての内部APIをホストするレプリカです。スケールセットの前に内部ロードバランサ(ILB)/ VIPがあります。根本的な問題は、同じスケールセットでホストされる他の内部APIを呼び出す内部APIがあることです。理想的には、これらのコールはVIPに送られ(内部DNSを使用して)、VIPはスケールセット内のマシンの1つにルーティングされます。しかし、Azureはこれを許可していないようです...ドキュメントごと:
You cannot access the ILB VIP from the same Virtual Machines that are being load-balanced
これで、マイクロサービスでどのように設定するのですか?私は3つの方法を見ることができますが、いずれも理想的ではありません。
- APIを別のスケールセットに分けてください。 サービスは非常に軽量で、Azure VM を3倍にしたくないので理想的ではありません。
- 内部LBを外部LBに変換します(公開するには、 IPアドレスを追加します)。次に、そのLBを自分のネットワークセキュリティ グループ/サブネットに置き、AzureのIP範囲からの呼び出しのみを許可します。私は ここでより多くの待ち時間を予想し、外部にエンドポイントを公開するでしょう どんな方法でも、より多くの攻撃表面領域を作成するだけでなく、より多くの構成が複雑になります
- ILBを呼び出す必要がある場合、VMをループバックに設定します。つまり、VMから発信されたすべての要求は、同じVMによって処理される になります。これは、VIPの背後にあるマイクロサービス の目的を破っています。何らかの理由で同じ マシンで内部マイクロサービスがダウンしていて、別のマシンで利用できる可能性があります...原因は です。各サービスごとに個別にILBのヘルスプローブを設定します。 が同じマシンに戻った場合、弾力性は失われます。
他の人がこれにどのように近づいてきたかについての指針はありがたいです。
ありがとうございます!
Azure Service Fabricをご覧ください。 VMのエンドポイントスケーリングにもこの動作を使用し、チャームのように機能します。マイナス点は、現在のところARMを介してのみ動作するということです。 – Ben