ネットワーク視点で見るAWS ELB(Elastic Load Balancing)のタイプ別比較[NLB対応]
ども、大瀧です。
本日、新しいELBとしてNLB(Network Load Balancing)がリリースされました。
NLB自体の使い方については大栗の以下の記事をご覧ください。ここでは全部で3種類になったELBをネットワークの視点から区分けしてみたいと思います。
また、機能面の比較はAWS公式の以下のページが詳しいです。
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に書き換えて転送するため、帰りはロードバランサを介さず、ターゲットからクライアントに直接通信する形になります。
ロードバランサとしての処理がより少なく済むため、NLBはより低遅延でスケールする仕組みというわけですね(その分、機能はシンプルです)。ちなみにGCPにもNLBがありますが、あちらはDSRで宛先IPを書き換えない方式のため、ターゲット側でトラフィックを受け取るための設定が必要です。ELBのNLBの方がシンプルに対応できる点が異なるかなと思います。
このため、ALBやCLBのターゲットではクライアントまでのネットワーク到達性を意識する必要が無いのに対して、NLBのターゲットはクライアントへのネットワーク到達性を考慮する必要があります。Internet Facingのロードバランサであれば、ターゲットを配置するVPCサブネットのルーティングテーブルにIGWないしNAT Gateway、Internalのロードバランサであればルーティングテーブルにピア接続やVGWを設定することになるでしょう。
NLBにはセキュリティグループがない
ALBやCLBにはロードバランサ自身のセキュリティグループ設定があります。これには以下2つのはたらきがあります。
- クライアント→ロードバランサのアクセス制限
- ロードバランサ→ターゲットのアクセス制御
特に2については、セキュリティグループのグループID指定が便利で、ターゲット側で「ロードバランサからのTCP80番のみ許可」という設定が手軽に行えるようになっています。
一方でNLBはセキュリティグループに対応しないため、ロードバランサへのアクセス制限はできません。加えて、「ロードバランサのみ許可」というターゲットでのセキュリティグループ設定もできないため、クライアントからターゲットへの直接アクセスを抑制する手段がありません。 *1
CLBやALBからNLBへの移行を検討するときには、セキュリティグループの設計をやり直すことになるでしょう。
NLBはIPアドレスが固定
ALBおよびCLBはIPアドレスが可変のため、クライアントからのアクセスにはDNS名を利用する必要がありました。DNSで独自ドメインを向けるのであれば、CNAMEレコードないしALIASレコード(Route 53のみ)を設定します。
一方でNLBはIPアドレスの決め打ちはできないものの、一度アサインされたIPアドレスは固定されるので、独自ドメインを向ける先はDNS名とIPアドレスの両方が指定できます。IPアドレスに向けたAレコードが使えるのは、ALBやCLBと比べて柔軟に使えそうですね。
まとめ
NLBが加わって3種類になったELBについて、ネットワーク視点からあれこれとコメントしてみました。それぞれの特徴を踏まえつつ、うまく使い分けていきたいですね。あと、そろそろNLBの詳細なドキュメントの公開を正座待機してます!