2022年7月7日木曜日

Nutanix FilesのマルチVLAN構成

Nutanix Filesバージョン4.1にて、クライアントネットワークのマルチVLANを構成を設定する機能が追加されました。

Multi-VLAN Network Management

詳細は上記のドキュメントをご覧ください。


これまでのFilesネットワーク構成について

Filesは各FSVMにクライアントネットワークとストレージネットワークの2つのネットワークが存在し、それぞれが異なるネットワークに所属するか、または両方のネットワークをまとめて一つのネットワークに所属するような構成を取っていました。

▲(図1)クライアントネットワークとストレージネットワークを分離した構成
▲(図2)クライアントネットワークとストレージネットワークをまとめた構成


このような構成において、実際にユーザーが利用する際にアクセスするクライアントネットワークをセキュリティの観点から分離したいといった要件がある場合、これまでのFilesはクライアントネットワークに複数のネットワークを持つことができなかったため、複数のFilesを展開するという手法を取る必要がありました。

▲(図3)従来のFilesでネットワークを分離するための構成
規模にもよりますが、複数セットのFilesを展開するこの手法は小規模環境において、余分なリソースが増加してしまう傾向がありました。


バージョン4.1で追加されたマルチVLAN構成

マルチVLAN構成が可能になったことで、1つのFilesで複数のネットワークにファイルサービスを提供することができるようになりました。

これにより、一つのFilesでネットワークを分離したいなどの要件に対して柔軟に対応することができるようになりました。

ただし、マルチVLAN構成を取るにはいくつか条件があるため、予め制限を把握しておく必要があります。
特に引っかかりそうな条件としては、初期の展開時に図2のようなクライアント、ストレージ両方のネットワークを一つのネットワークで構成した、いわゆるシングルネットワークの構成を取っているFilesを後からマルチVLAN構成に変更することはできないため注意が必要です。


設定方法

まずは上の方で説明した通り、クライアントとストレージのネットワークを分けたFilesを用意します。

Filesの新機能ははじめは大体CLIから設定できるパターンが多いです。
この機能も例に漏れず、まずはCLIからの設定方法のみ提供されています。

まずはSSHでFSVMに接続して、以下のコマンドで現在のクライアントネットワークを確認してみます。
※なお、はじめにafsコマンドのみを実行するとafsモードに切り替わるので、移行のコマンドは頭にあるafsの記述は不要です。
afs net.list_external

現在はvlan316(no ipam)というネットワークがクライアントネットワークとして構成されていることがわかります。
※ネットワーク名が変な名前ですが、AHVで作成する普通のVLANネットワークです。
UUID                                  Name              Virtual UUID                          Managed  Gateway      Netmask/Prefixlen  IPs                                                  Primary  Vlan
5467672e-31b3-40bd-a7fb-dba996a282df  vlan316(no ipam)  898963d1-a37a-4768-83bf-8adb77972486  No       172.17.16.1  255.255.255.0      [u'172.17.16.14', u'172.17.16.15', u'172.17.16.16']  No       -

このFilesに新たなクライアントネットワークを追加してみます。
公式ドキュメントを見ると、以下のコマンドで追加すると記載されています。
afs net.add_external <input-json-file-path>

後ろの<>内は追加するネットワーク情報を記載したjsonファイルを指定するのですが、このjsonファイルの作り方が非常にわかりづらいです。

一応jsonファイルの作り方は以下のコマンドで確認してくれと記載されていますが、

afs help net.add_external

このコマンドの実行結果が以下になります。

net.add_external:
  Add external networks.

  Usage: "net.add_external <input-json-file-path>"
  Input JSON file schema:
  [
    {
      "virtual_network_uuid": "<uuid>"
    },
    {
      "virtual_network_uuid": "<uuid>",
      "gateway_ip": "<gateway-ip-address>",
      "netmask_ip": "<netmask-ip-address>",
      "ip_list": [
        "<fsvm-ip-address>",
        "<fsvm-ip-address>",
        ...
      ]
    },
    ...
  ]

  1. Managed network entry only requires "virtual_network_uuid" field.
  2. Unmanaged network entry requires "virtual_network_uuid", "gateway_ip",
     "netmask_ip" and "ip_list" fields.

  Usage:
    net.add_external <json_file_path> [key=val ...]

  Required arguments:
    json_file_path (string): Input JSON file path

なんとなく、追加するネットワーク情報を記入してやれば良いのはわかりますが、正直わかりづらいと思います。

余計な記述を削っていき、最終的には以下のような形式でjsonファイルを作成します。

[
        {
          "virtual_network_uuid": "<追加するネットワークのUUID>",
          "gateway_ip": "<追加するネットワークのGW>",
          "netmask_ip": "<追加するネットワークのサブネットマスク>,
          "ip_list": [
            "<FSVMのクライアント側IPアドレス①>",
            "<FSVMのクライアント側IPアドレス②>",
"<FSVMのクライアント側IPアドレス③>"
] } ]

FSVMのIPアドレスはFSVMの台数に合わせて追加してください。

行の始め辺りにある「virtual_network_uuid」はPrimsのNetwork Configから対象のネットワークを編集する際に確認することができます。

今回はこのVLAN300というネットワークを追加することにします。


この内容にて任意の名前で拡張子を[.json]で保存し、以下のコマンドを実行します。

afs net.add_external <作成したjsonファイル>

※コマンド実行時にjsonファイルのパスを指定しない場合は、home直下が参照されます。


以下のように結果が表示されれば、正常にコマンドが実行できています。

Created network-add task: d3c723bf-8b0a-4a0c-ae7e-798eea768c0e

再度クライアントネットワークの一覧を確認すると、クライアントネットワークが2つに追加されていることがわかります。

UUID                                  Name              Virtual UUID                          Managed  Gateway      Netmask/Prefixlen  IPs                                                  Primary  Vlan
eb047398-594a-45f3-97e8-4fdb169ae48f  VLAN.300          8e803826-495d-4d61-ac49-f37217510471  No       172.17.0.1   255.255.255.0      [u'172.17.0.91', u'172.17.0.92', u'172.17.0.93']     No       300
5467672e-31b3-40bd-a7fb-dba996a282df  vlan316(no ipam)  898963d1-a37a-4768-83bf-8adb77972486  No       172.17.16.1  255.255.255.0      [u'172.17.16.14', u'172.17.16.15', u'172.17.16.16']  Yes      316


Files Consoleから構成情報を確認すると、クライアントネットワーク情報あたりに「+ 1 more」と表示されていますので、クリックします。


追加したVLAN300がクライアントネットワークが認識されていることが確認できます。

なお、Filesを展開する際に選択したクライアントネットワークには「Primary」と表示されます。
本手順で追加したネットワークは削除することができますが、プライマリネットワークは削除できないことに留意してください。


クライアントユーザーから接続時の注意点

マルチVLANの設定は完了しましたが、実際にマルチVLANのFilesを利用するにはいくつか注意点があります。

・ホスト名による接続

マルチVLANの設定ができると、FSVMはクライアントネットワーク側に各ネットワークごとのIPアドレスを持つことになります。
ただし、Filesのホスト名は展開時に指定した一つしか設定できないため、各ネットワークで同一のDNSを参照する場合は名前解決によって、異なるネットワークごとに正確なIPアドレスを取得することができません。
※Filesは直接FSVMのIPアドレスからも接続することは可能ですが、バランシングの仕組み上、FQDNでアクセスすることが推奨されます。

回避策として、DNSのレコードに異なるホスト名を手動で登録し、クライアント側IPアドレスと関連付けを行います。

これにより、プライマリネットワークと異なるネットワークでは、対応する異なるホスト名を指定することで、名前解決によって疎通可能なIPアドレスを取得することができます。


ただし、この方法は公式ドキュメントに記載された方法ではないため、あくまで自己責任となることをご留意ください。
※一応DNSレコード追加方法は以下のURLに記載されていますが、用意されている方法がよくわからないので、手動で入れてしまってもいい気がします。

https://portal.nutanix.com/page/documents/details?targetId=Files-v4_1:fil-fs-manage-dns-server-t.html



FilesのマルチVLAN機能の紹介は以上です。

一部課題もありますが、Filesで提供できる構成が増える、注目の新機能になりますので、活用できるシチュエーションがありましたら、ぜひお試しください。