ネットワーク視点で見るAWS ELB(Elastic Load Balancing)のタイプ別比較[NLB対応]

ELB

ども、大瀧です。
本日、新しいELBとしてNLB(Network Load Balancing)がリリースされました。 NLB自体の使い方については大栗の以下の記事をご覧ください。ここでは全部で3種類になったELBをネットワークの視点から区分けしてみたいと思います。

ELBの種類と特徴

現在利用できるELBは以下の3種類で、一般名称と対応付けてみました。

  • [NEW!!]Network Load Balancer(以下NLB) : L4 NATロードバランサ
  • Application Load Balancer(以下ALB) : L7リバースプロキシ
  • Classic Load Balancer(以下CLB) : L4/L7リバースプロキシ

ざっくり言うと、NLBとそれ以外で扱う雰囲気が結構違います。誤解を恐れずに言うと、NLBは従来のELB(ALBやCLB)よりもNAT GatewayやElastic IPなどVPCの機能に分類される、ネットワークコンポーネントに近い印象です。以下、ポイントごとに解説します。

クライアントとの通信経路が異なる

ALBとCLBはリバースプロキシと書いた通り、行き帰りともにロードバランサを介してクライアントと通信します。一方NLBはトラフィックの宛先IP をターゲットのIPに書き換えて転送するため、帰りはロードバランサを介さず、ターゲットからクライアントに直接通信する形になります。

desc-elb01

ロードバランサとしての処理がより少なく済むため、NLBはより低遅延でスケールする仕組みというわけですね(その分、機能はシンプルです)。ちなみにGCPにもNLBがありますが、あちらはDSRで宛先IPを書き換えない方式のため、ターゲット側でトラフィックを受け取るための設定が必要です。ELBのNLBの方がシンプルに対応できる点が異なるかなと思います。

このため、ALBやCLBのターゲットではクライアントまでのネットワーク到達性を意識する必要が無いのに対して、NLBのターゲットはクライアントまでのネットワーク到達性を考慮する必要があります。Internet Facingのロードバランサであれば、ターゲットを配置するVPCサブネットのルーティングテーブルにIGWないしNAT Gateway、Internalのロードバランサであればルーティングテーブルにピア接続やVGWを設定することになるでしょう。

NLBにはセキュリティグループがない

ALBやCLBにはロードバランサ自身のセキュリティグループ設定があります。これには以下2つのはたらきがあります。

  1. クライアント→ロードバランサのアクセス制限
  2. ロードバランサ→ターゲットのアクセス制御

特に2については、セキュリティグループのグループID指定が便利で、ターゲット側で「ロードバランサからのTCP80番のみ許可」という設定が手軽に行えるようになっています。

一方でNLBはセキュリティグループに対応しないため、ロードバランサへのアクセス制限はできません。加えて、「ロードバランサのみ許可」というターゲットでのセキュリティグループ設定もできないため、クライアントからターゲットへの直接アクセスを抑制する手段がありません。 *1

desc-elb02

CLBやALBからNLBへの移行を検討する場合は、セキュリティグループの設計はやり直しになることに注意しましょう。

NLBはIPアドレスが固定

ALBおよびCLBはIPアドレスが可変のため、クライアントからのアクセスにはDNS名を利用する必要がありました。DNSで独自ドメインを向けるのであれば、CNAMEレコードないしALIASレコード(Route 53のみ)を設定します。

一方でNLBはIPアドレスの決め打ちはできないもの、一度アサインされたIPアドレスは固定されるので独自ドメインを向ける先はDNS名とIPアドレスの両方が指定できます。Aレコードが使えるのは、ALBやCLBと比べて柔軟に適用できそうですね。

まとめ

NLBが加わって3種類になったELBについて、ネットワーク視点からあれこれとコメントしてみました。それぞれの特徴を踏まえつつ、うまく使い分けていきたいですね。あと、そろそろNLBの詳細なドキュメントの公開を正座待機してます!

参考URL

脚注

  1. ちなみにトラフィックは送信元IPがクライアントのIPアドレスの状態でターゲットに届くため、ターゲットグループのOSおよびアプリケーションでも、直接アクセスとロードバランサ経由のアクセスを区別する手段はありません。