こんにちは。takada@福岡オフィスです。 NLB(Network Load Balancer)と聞いて、NPBに見間違えた程度に野球が好きです。 日本野球機構について書きたいところですが、ニーズもなさそうなので、NLBにいて書きます。
NLBの概要
暖気申請が不要で、高トラフィックを処理できるL4ロードバランサーです。 詳細は、AWSの公式ページに説明がありますので、そちらをご覧ください。
気になって試してみたこと
以下、2017/9/8時点で確認した動作です。
固定IPアドレス
上記ブログにも記載がありますが、NLBを作成すると、作成時に指定したサブネットごとにグローバルIPアドレスが割り当てられます。
東京リージョンで、AZごとに1つずつサブネットを指定したところ、都合2つのグローバルIPアドレスが割り当てられました。
(このグローバルIPアドレスを、手持ちのEIPとすることも可能です。)
サブネットごとに作成されることからも分かるように、ひとつのグローバルIPアドレスのトラフィック分散先は、その紐付けられたサブネットに限定されるようです。
このため、NLBのグローバルIPアドレスを直接してしてアクセスしている場合、紐づけされたサブネット上にいるEC2が全てダウンしてしまうと、応答を返さなくなることを確認しました。
NLBを作成すると、DNS名が付与されますが、上記のケースですと、DNS名に対して2つAレコードが割り当てられます。
この状態で、片方のグローバルIPアドレス上に紐づくサブネット上のEC2が全てダウンすると、一定時間後、DNS名に対するAレコードから、そのIPアドレスが削除されました。
これらの結果から、マルチAZ構成で負荷分散を行う場合は、冗長性を考慮する場合は、これまでどおり、DNS名を使用することがよいと思われます。
送信元アドレスの保持による戻りパケットの処理
NLBでは、ターゲットのEC2に届くパケットの送信元IPアドレスが保持される仕様です。このため、EC2からの戻りパケットの宛先IPアドレスは、クライアントのIPアドレスとなります。
ここで2つ疑問をもちました。
- ターゲットのEC2がプライベートサブネットに配置されている場合、NAT GatewayもしくはNATインスタンスは必要なのか?
- 戻りパケットの送信元アドレスは、EC2のグローバルIPアドレスか、NATが必要な場合は、NAT Gateway/NATインスタンスのグローバルIPアドレスになるはずであるが、NLBのIPアドレスとしてクライアントに戻っている。どこで変換されているのか?
1番目の疑問ついては、実際に、プライベートサブネットにEC2を配置してみたところ、NAT処理を行うリソースがないと、NLB宛のリクエストの応答は返りませんでした。
やはり構成上、NAT GatewayもしくはNATインスタンスは必要なようです。
2番目の疑問については、NLBを作成後、ルートテーブル等を確認してみたのですが、変換処理を行っている設定はありませんでした。おそらく、AWSの基盤側でVPCからでるタイミングで変換しているものと推測されます。
以上、NLBを触ってみて、気になった点をまとめてみました。まだ、公式ドキュメントが公開されていないようなので、公開後、これらの細かい仕様が分かるかもしれません。