はじめに
VMware NSX Advanced Load Balancer (NSX ALB) は、クラウドネイティブ時代にピッタリなソフトウェアベースのロードバランサーです。旧 Avi Networks の技術を活用しており、マルチクラウド環境においても、柔軟にスケールし、かつ WAF (Web Application Firewall) や GSLB (Global Server Load Balancing) など、豊富な機能を備えていることが特徴です。
また、トラヒックの可視化や分析の機能が非常に優れており、個人的に、とても好きなソリューションです。
もし、ご興味を持っていただけたら、VMware Japan Blog に、面白い記事が沢山ありますので、ぜひ、参考にしていただければと思います。
今回は、この NSX ALB を使って、DNS サーバー (実体としては DNS 用の Virtual Service) を構成する方法をご紹介します。
ただ、「なぜ、わざわざ LB を使って DNS サーバーなんて建てるの?」と思われるかも知れません。
これは、GSLB を構成する際に必須となることに加えて、Kubernetes と NSX ALB を組合せて、Ingress を構成する際に、NSX ALB が Ingress リソースに対する名前解決を自動で構成してくれるので、非常に便利だからです。
NSX ALB を使った Ingress の構成は、別の機会に記事にできればと思います。
前提
NSX ALB の公式ドキュメントに従って、NSX ALB Controller が構成され、クラウド環境として vCenter との連携が構成されていることを想定しています。
また、利用している製品のバージョンは下記の通りです。
- NSX Advanced Load Balancer 21.1.4-2p3 (Build 9210)
- vCenter 7.0 Update 3h (Build 20395099)
- ESXi 7.0 Update 3g (Build 20328353)
手順
DNS Profile の設定
まず、NSX ALB がホストすべきドメインを Profile として構成します。
[Templates] -> [Profiles] -> [IPAM/DNS Profiles] のページまで進み、右上の [CREATE] のボタンを押して、[DNS Profile] を選択します。
[Name] に、この Profile の名前を設定し、[Domain Name] の部分に、NSX ALB がホストすべきドメイン (の候補) を設定します。
ここでは TTL をデフォルト値のまま、[Save] しています。
DNS Virtual Service の作成
実際に、DNS 用の Virtual Service (VS) を作成していきます。
[Applications] -> [Dashboard] のページまで進み、[CREATE VIRTUAL SERVICE] から [Advanced Setup] で、VS 作成ウィザードを開始します。
[Name] に、この VS の名前を設定し、[Profiles] -> [Application Profile] において [System-DNS] を選択します。
そして、[Service Port] -> [Services] の部分のポート番号が、自動で 53 になっていることを確認します。
[VIP Address] -> [VS VIP] の部分では、[Create VS VIP] から、VS VIP の作成ウィザードを開始します。
[Name] の部分は自動生成されたもので、特に問題無ければ、そのままで構いません。
まずは、[VIPs] の [ADD] ボタンから、VIP を指定していきます。
[IPv4 Address] として、DNS 用の VS が持つべき IP を指定します。
[Placement Network] の部分は、VS が配置されるべきネットワークを指定します。
そして、それぞれ [SAVE] を実行し、下記の画面まで戻って来たら、DNS の部分を指定していきます。
ここでは、VS 名を DNS 用の VS のホスト名として指定しています。
ここまでの内容が [SAVE] できたら、下記の画面まで戻って来ます。
[Pool] の部分はオプションですが、設定することで、NSX ALB でホストしないレコードに関しては、Pool のメンバーに登録された DNS サーバーに名前解決を転送することができます。
ここでは、Health Monitor として [System-DNS] を指定しつつ、
172.19.31.254
という DNS サーバー (実体は DNS Forwarder) を Pool メンバーとして設定しています。
[Advanced] 設定の画面では、利用する Service Engine Group を忘れず、指定してください。
その他は、DNS 用 VS 特有の設定としては、[Static DNS Records] の画面で、静的な DNS レコードを設定することも可能です。
DNS Service の有効化
作成した VS 上での DNS Service を有効化します。
[Administration] -> [Settings] -> [DNS Service] と進み、作成した DNS 用の VS を設定します。
ここまでで、基本的な設定は完了しており、VS の VIP 上で、DNS サーバーが動作しています。
動作確認
構成した VS を DNS サーバーとして指定し、名前解決ができることを確認します。
まずは、VS 自身に対する名前解決を確認します。
$ nslookup dns01.ako.test 172.19.31.230
Server: 172.19.31.230
Address: 172.19.31.230#53
Name: dns01.ako.test
Address: 172.19.31.230
もし、静的な DNS レコードを登録していれば、それに対する名前解決を確認しても良いと思います。
また、オプションとして紹介した機能として、Pool メンバーに上位 DNS サーバーを登録していれば、NSX ALB がホストしてないドメインについては、その DNS にリクエストを転送することができるはずです。
その場合、コマンド応答の Non-authoritative answer
という部分で、リクエストが転送されたことが確認できます。
$ nslookup google.com 172.19.31.230
Server: 172.19.31.230
Address: 172.19.31.230#53
Non-authoritative answer:
Name: google.com
Address: 142.250.189.238
Name: google.com
Address: 2607:f8b0:4005:80e::200e
参考ドキュメント
今回の内容は、公式ドキュメントとしては、下記で解説されています。