NLB(Network Load Balancer)を触ってみた

記事タイトルとURLをコピーする

こんにちは。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つ疑問をもちました。

  1. ターゲットのEC2がプライベートサブネットに配置されている場合、NAT GatewayもしくはNATインスタンスは必要なのか?
  2. 戻りパケットの送信元アドレスは、EC2のグローバルIPアドレスか、NATが必要な場合は、NAT Gateway/NATインスタンスのグローバルIPアドレスになるはずであるが、NLBのIPアドレスとしてクライアントに戻っている。どこで変換されているのか?

1番目の疑問ついては、実際に、プライベートサブネットにEC2を配置してみたところ、NAT処理を行うリソースがないと、NLB宛のリクエストの応答は返りませんでした。 やはり構成上、NAT GatewayもしくはNATインスタンスは必要なようです。

2番目の疑問については、NLBを作成後、ルートテーブル等を確認してみたのですが、変換処理を行っている設定はありませんでした。おそらく、AWSの基盤側でVPCからでるタイミングで変換しているものと推測されます。

以上、NLBを触ってみて、気になった点をまとめてみました。まだ、公式ドキュメントが公開されていないようなので、公開後、これらの細かい仕様が分かるかもしれません。