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

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

L4ロードバランサーとL7ロードバランサーの違いについて

L4ロードバランサーとL7ロードバランサーの違いについてです。

■L4ロードバランサーの特徴

・送信元IP、送信元ポート、宛先IP、宛先ポート、プロトコルの5つ(5タプルハッシュ)の条件を利用して振り分け先を決めます。
 ※ IPとかポートの世界の話なので、L4ロードバランサーと呼ばれます。

・TCPコネクションが続く限りは同じ振り分け先に通信が届きます。
 TCPコネクションが切れると、振り分け先が変更される可能性もあります。
 ※UDPはコネクションレス

・SSL終端はできません。(L4なので)

・L4ロードバランサーではTCPコネクションは終端せず、接続元クライアントと接続先バックエンドサーバ間で一つのコネクションが利用されます。
 ※L7ロードバランサーの場合には、二つのコネクションが張られます。

・接続元クライアントから見たとき、接続先IPはL4ロードバランサーのIPです。(ここまではL7ロードバランサーと一緒です。)
 L4ロードバランサーに届いた通信はバックエンドサーバに届きますが、
 その際の接続元IPは
 ①「接続元クライアントになる場合(宛先NAT。ロードバランサーが宛先アドレスを変換する)」
 ②「L4ロードバランサーになる場合(送信元NAT。ロードバランサーが送信元アドレスを変換する)」
 の2つがあります。
 ※どちらを使うかは設定次第です。

・L4ロードバランサーで宛先NATを利用する場合、バックエンドサーバのデフォルトゲートウェイはL4ロードバランサーに向ける必要があります。(非対称ルーティングを避ける必要があります。)

・AWSだとNLB、AzureだとLoadBalancerです。

■L7ロードバランサーの特徴

・URLのドメイン名(ホストベース)やパス名(パスベース)により振り分け先の決定を行います。
※アプリケーション層の話なので、L7ロードバランサーと呼ばれます。

・ホストベース、パスベースで振り分け先が決定されるため、基本的には同じ振り分け先が使われ続けます。
 ※振り分け先がサーバA,サーバBのように2つ以上設定されている場合には、ロードバランサーに設定した振り分けルール(ラウンドロビンやURLルーティング、等)に基づいて通信が届きます。

・SSL終端できます。(L7なので)

・接続元クライアントから見たとき、接続先IPはL7ロードバランサーのIPです。(ここまでは、L4ロードバランサーと一緒です。)
 L7ロードバランサーに届いた通信はバックエンドサーバに届きますが、バックエンドサーバが認識する接続元IPはL7ロードバランサーです。
 ※バックエンドサーバで接続元クライアントのIPを知りたい場合には、X-Forwarded-Forヘッダーをバックエンドサーバで利用するように設定する必要があります。

・TCPコネクションは以下の通り2つ張られます。
 ①「接続元クライアント ⇔ L7ロードバランサー」
 ②「L7ロードバランサー ⇔ バックエンドサーバ」
 ※L4ロードバランサーは「接続元クライアント ⇔ バックエンドサーバ」となり一気通貫になっています。

・AWSだとALB、AzureだとApplicationGatewayです。

■注意

一般的なL4ロードバランサー、L7ロードバランサーについて記載しております。
そのため、AWSのELB、AzureのLoadBalancer/ApplicationGatewayの内容と異なる内容のものもあります。
各クラウドの各サービスの詳細は公式ページ等をご確認ください。


以上です。