自由気ままに書いちゃおう

好きなことをつらつらと・・・

【Azure】AzureLoadBalancer(内部)の負荷分散規則とインバウンドNAT規則について

今回はAzureLoadBalancerを利用する際の注意点についてです。

■前提

ここでは、AzureLoadBalancerの機能の中の一つである、内部LBのことについて記載しております。
外部LBについては記載しておりません。

■AzureLoadBalancerの機能について

大別すると、以下2つの機能があります。
※後々重要になってきます。
① 負荷分散
② NAT

■①負荷分散について

負荷分散なので、LBの後ろにバックエンドサーバ(リアルサーバ)が複数台存在するケースで利用します。

そのため、設定が必要な項目は、
0.LBの作成
1.バックエンドプール
2.正常性プローブ
3.負荷分散規則
です。

■0.LBの作成

Azureポータルから「ロードバランサー」を選択します。

f:id:guri2o1667:20210305172858p:plain

「ロードバランサーの作成」もしくは「追加」をクリックします。

f:id:guri2o1667:20210305172823p:plain


詳細な設定は割愛しますが、「種類」は「内部」を選択します。
内部LBに設定するIPアドレスは「静的」を選び、内部LBのIPアドレスは10.3.1.11としました。

■1.バックエンドプール

「設定」>「バックエンドプール」で設定します。

f:id:guri2o1667:20210305164055p:plain

バックエンドプールを追加する際、
「仮想マシン」もしくは「仮想マシンスケールセット」を選択することで、
バックエンドサーバ(群)を登録することができます。

f:id:guri2o1667:20210305164310p:plain

ここでは、仮想マシンを2台登録しています。(testvm03,testvm04)
※尚、仮想マシンにパブリックIPアドレスが付与されている場合、候補として仮想マシンが表示されないため、パブリックIPはデタッチする必要があります。
※登録が完了するまで5分程度かかりました。

f:id:guri2o1667:20210305171516p:plain

■2.正常性プローブ

「設定」>「正常性プローブ」で設定します。

f:id:guri2o1667:20210305164501p:plain

バックエンドプール内のサーバが正常に動作しているかの判定基準をここで設定します。

f:id:guri2o1667:20210305164613p:plain

※「正常性プローブ」を設定しない場合、この後の「3.負荷分散規則」が設定できません。

■3.負荷分散規則

「設定」>「負荷分散規則」で設定します。

f:id:guri2o1667:20210305164825p:plain

f:id:guri2o1667:20210305172221p:plain

■動作確認

事前に、testvm03,testvm04にはapacheをインストールし、index.htmlに以下の通り設定しております。
testvm03(10.3.1.6) ⇒ <h3>test message-vm03</h3>
testvm04(10.3.1.7) ⇒ <h3>test message-vm04</h3>

まずは、踏み台サーバから接続状況を確認します。
問題なく接続できました。

f:id:guri2o1667:20210305172608p:plain

では、内部LBに設定したIPアドレス(静的)にアクセスしてみます。
※内部LBのIPアドレスは10.3.1.11

f:id:guri2o1667:20210305173209p:plain

この時点ではtestvm03の結果が返されました。
では連続してアクセスしてみます。(途中でvm03 ⇒ vm4に切り替わっています。)

f:id:guri2o1667:20210305173436p:plain


ここまでがAzureLoadBalancer(内部)の負荷分散の動作です。

続いて、NAT動作についてです。

■②NATについて

まず、どんな動作ができるのかを先に記載致します。
いわゆる、宛先NATができます。
例えば、クライアントからの接続がAzureLoadBalancerに80番ポートに届いた場合に、バックエンドサーバの80番ポートに転送する、ようなことができます。

設定が必要な項目は、
0.LBの作成
1.インバウンドNAT規則
です。
※NAT機能を使いたい場合には、「バックエンドプール」や「正常性プローブ」「負荷分散規則」の設定は不要です。

■0.LBの作成

ここは①負荷分散の項目と同じため、割愛します。
「種類」は「内部」を選択します。
内部LBに設定するIPアドレスは「静的」を選び、内部LBのIPアドレスは10.3.1.10としました。
※負荷分散で作成したAzureLoadBalancer(内部)とは別に、新しくAzureLoadBalancer(内部)を作成しています。

■1.インバウンドNAT規則

「設定」>「インバウンドNAT規則」をクリックします。

f:id:guri2o1667:20210305173928p:plain

「追加」をクリックします。

f:id:guri2o1667:20210305174009p:plain


「フロントエンドIPアドレス」には、AzureLoadBalancerのIPアドレスを入力します。
※デフォルトでは「LoadBalancerFrontEnd」という名前になります。

「サービス」にはAzureLoadBalancerが受け付けるプロトコルを定義します。複数プロトコルが設定可能です。HTTP通信を受け付けるのであれば、「HTTP」を選択します。

f:id:guri2o1667:20210305174129p:plain


「ポート」には、AzureLoadBalancerが待ち受けているポートを入力します。

「ターゲット仮想マシン」「ネットワークIP構成」にはAzureLoadBalancerで受け付けた通信を転送するサーバ情報を入力します。

「ポートマッピング」は「既定」の場合、AzureLoadBalancerが受け付けたポートと同じポート番号で転送先サーバに通信を転送します。
「カスタム」の場合には、転送先サーバで待ち受けているポート番号を任意で設定できます。
※今回は「カスタム」を選択し、AzureLoadBalancerで90番で待ち受けて、バックエンドサーバでは80番ポートで受け取ります。

最終的な設定値は以下の通りです。

f:id:guri2o1667:20210305175053p:plain

■動作確認

事前に、testvm01にはapacheをインストールし、
index.htmlに以下の通り設定しております。
testvm01(10.3.1.4) ⇒ <h3>test messages</h3>

では、踏み台サーバからアクセスしてみます。
AzureLoadBalancerのIPは10.3.1.10です。

f:id:guri2o1667:20210305175227p:plain


期待通り、AzureLoadBalancer(内部)が90番ポートで受け取った通信を、
バックエンドサーバであるtestvm01の80番ポートに転送できています。

■補足1

今回は、同一サブネット上にAzureLoadBalancerを2台作成しました。
1台は負荷分散用AzureLoadBalancer
もう1台はNAT用AzureLoadBalancer
です。

2台ではなく1台に負荷分散機能とNAT機能を持たせることもできます。

AzureLoadBalancerの各設定項目が「負荷分散」「NAT」のどちらの設定項目で利用するのかをはっきりさせるために、今回はあえて2台用意しました。


■補足2

以下サイトが本記事の続きです。
以下サイトでは「負荷分散機能」と「NAT機能」の両方を利用したケースを紹介しています。

www.guri2o1667.work

 



以上です。