[アップデート] Amazon FSx for NetApp ONTAPのエンドポイントIPアドレスにVPCのCIDR範囲内のIPアドレスを指定できるようになりました #reinvent
Transit Gatewayで静的ルートを設定するの面倒だな
こんにちは、のんピ(@non____97)です。
皆さんは「Mutli-AZのAmazon FSx for NetApp ONTAP(以降FSx for ONTAP)に別ネットワークからアクセスするために、Transit Gatewayに静的ルートを追加するのが面倒だな」と思ったことはありますか? 私はあります。
従来、Mutli-AZのFSx for ONTAPファイルシステムを作成する際は、エンドポイントIPアドレスの範囲として、VPC外のCIDRを指定する必要がありました。
エンドポイントIPアドレスの範囲の中からFSx for ONTAPファイルシステムやSVMの管理エンドポイント、NFSのエンドポイントが割り当てられます。そのため、別ネットワークからこれらにアクセスする際は、Transit Gateway route tableで「エンドポイントIPアドレスの範囲の通信はFSx for ONTAPファイルシステムがいるVPCにルーティングする」ような静的ルートを追加する必要がありました。
ここら辺の背景や詳細な説明は以下記事をご覧ください。
Transit Gatewayで接続しているネットワークが増えると、静的ルートの管理をするのも大変です。できるだけPropagationを使ってTransit Gateway route tableにVPCのCIDRを動的に追加したいものです。
また、VPC外のCIDRを選択するとなると、そのCIDRを使用しないようにプールしておく必要があります。
今回のアップデートで、 Amazon FSx for NetApp ONTAPのエンドポイントIPアドレスにVPCのCIDR範囲内のIPアドレスを指定できるようになりました
エンドポイントIPアドレスにVPCのCIDR範囲内のIPアドレスを指定することで、Transit Gatewayに静的ルートを追加する必要がなくなります。これは嬉しい。
マネジメントコンソールからMutli-AZのFSx for ONTAPファイルシステムを作成する際のデフォルトは、VPCのプライマリCIDRの末尾64個のIPアドレスが選択されるようです。
you specify when creating your Multi-AZ file system. If you create your file system from the Amazon FSx console, by default Amazon FSx chooses the last 64 IP addresses from the VPC's primary CIDR range to be used as the endpoint IP address range for the file system.
これは動きが気になりますね。
早速動かしてみたので紹介します。
いきなりまとめ
- エンドポイントIPアドレスにVPCのCIDR範囲内のIPアドレスを指定することで、Transit Gatewayに静的ルートを追加する必要がなくなる
- 別VPC、オンプレミスネットワークからFSx for ONTAPファイルシステムやSVMの管理エンドポイントにアクセスする際は、引き続きTransit Gatewayが必要
- VPCピアリングから入ってきたトラフィックは、VPCのルートテーブルの影響を受けない
- そのため、VPCピアリングから入ってきたトラフィックを任意のENIにルーティングすることはできない
- Transit Gateway attachmentがあるサブネットにFSx for ONTAPのフローティングIPアドレスへのルートが必要
- FSx for ONTAPのフローティングIPはVPCのCIDR内だが、ENIのセカンダリIPアドレスには紐づいていない
- 「VPCのCIDR : local」のルートでルーティングできるのは、ENIに紐づいているIPアドレスのみ
- FSx for ONTAPのフローティングIPへのルートはCreateRoute APIでは設定できない
- FSx for ONTAPファイルシステムで
ルートテーブルを管理
から、フローティングIPへのルートを追加したいルートテーブルを選択して設定をする
- FSx for ONTAPファイルシステムデプロイ後にエンドポイントIPアドレスの範囲を変更することはできない
- よっぽどのことがなければVPCのCIDR範囲内のIPアドレスを指定することになりそう
- よっぽどのことの例) VPCのCIDRに空きがない
検証環境
検証環境は以下の通りです。
エンドポイントIPアドレスにVPCのCIDR範囲内のIPアドレスを指定することにより、「もしかしたらTransit Gatewayが不要になるのでは?」と思ったので、VPCピアリング経由でFSx for ONTAPファイルシステムへのSSH及び、NFSによるマウントを試します。
VPCピアリング経由でアクセスできない場合はTransit Gatewayで接続します。
FSx for ONTAPファイルシステムの作成
それでは、まずFSx for ONTAPファイルシステムを作成します。
今回はマネジメントコンソールから作成します。
エンドポイントIPアドレス範囲にVPCから未割り当てのIPアドレス範囲
が追加されていますね。こちらを選択したままで進めます。
その他のパラメーターは以下の通りです。エンドポイントIPアドレス範囲は作成後に編集できないので気をつけましょう。
40分ほど待つとFSx for ONTAPファイルシステムが作成されていました。
エンドポイントIPアドレス範囲が172.31.255.255/26
と、確かにVPCのCIDR(172.31.0.0/16
)の末尾64個のIPアドレスが指定されていますね。実際に管理エンドポイントのIPアドレスはエンドポイントIPアドレス範囲内のIPアドレスになっています。
AWS CLIからも作成されたFSx for ONTAPファイルシステムとSVMを確認してみましょう。
# FSx for ONTAPファイルシステム $ aws fsx describe-file-systems { "FileSystems": [ { "OwnerId": "<AWSアカウントID>", "CreationTime": "2022-11-29T13:30:06.808000+00:00", "FileSystemId": "fs-02c7c7ebb743b92a2", "FileSystemType": "ONTAP", "Lifecycle": "AVAILABLE", "StorageCapacity": 1024, "StorageType": "SSD", "VpcId": "vpc-0e0796981cea634c1", "SubnetIds": [ "subnet-0e4270793b4b19850", "subnet-00b2246e7a23ec379" ], "NetworkInterfaceIds": [ "eni-097c54b261e931320", "eni-0587f67fff8d801df" ], "KmsKeyId": "arn:aws:kms:us-east-1:<AWSアカウントID>:key/365ae19c-8016-4963-9afd-05f703509254", "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:file-system/fs-02c7c7ebb743b92a2", "Tags": [ { "Key": "Name", "Value": "fsxn" } ], "OntapConfiguration": { "AutomaticBackupRetentionDays": 7, "DailyAutomaticBackupStartTime": "09:30", "DeploymentType": "MULTI_AZ_1", "EndpointIpAddressRange": "172.31.255.255/26", "Endpoints": { "Intercluster": { "DNSName": "intercluster.fs-02c7c7ebb743b92a2.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "172.31.90.26", "172.31.47.250" ] }, "Management": { "DNSName": "management.fs-02c7c7ebb743b92a2.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "172.31.255.240" ] } }, "DiskIopsConfiguration": { "Mode": "AUTOMATIC", "Iops": 3072 }, "PreferredSubnetId": "subnet-0e4270793b4b19850", "RouteTableIds": [ "rtb-04abe1840b02b7ca7" ], "ThroughputCapacity": 128, "WeeklyMaintenanceStartTime": "5:04:00" } } ] } # SVM $ aws fsx describe-storage-virtual-machines { "StorageVirtualMachines": [ { "CreationTime": "2022-11-29T13:00:23.019000+00:00", "Endpoints": { "Iscsi": { "DNSName": "iscsi.svm-09d76a91bcb77b618.fs-02c7c7ebb743b92a2.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "172.31.83.247", "172.31.32.103" ] }, "Management": { "DNSName": "svm-09d76a91bcb77b618.fs-02c7c7ebb743b92a2.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "172.31.255.209" ] }, "Nfs": { "DNSName": "svm-09d76a91bcb77b618.fs-02c7c7ebb743b92a2.fsx.us-east-1.amazonaws.com", "IpAddresses": [ "172.31.255.209" ] } }, "FileSystemId": "fs-02c7c7ebb743b92a2", "Lifecycle": "CREATED", "Name": "SVM", "ResourceARN": "arn:aws:fsx:us-east-1:<AWSアカウントID>:storage-virtual-machine/fs-02c7c7ebb743b92a2/svm-09d76a91bcb77b618", "StorageVirtualMachineId": "svm-09d76a91bcb77b618", "Subtype": "DEFAULT", "UUID": "25813a8b-6fea-11ed-84ff-3df40f843f92" } ] }
SVMの管理エンドポイントとNFSのエンドポイントのIPアドレスもエンドポイントIPアドレス範囲内のIPアドレスになっていますね。
次に、FSx for ONTAPファイルシステムのENIを確認します。
$ aws ec2 describe-network-interfaces \ --network-interface-ids eni-097c54b261e931320 eni-0587f67fff8d801df { "NetworkInterfaces": [ { "Attachment": { "AttachTime": "2022-11-29T13:13:33+00:00", "AttachmentId": "eni-attach-0bce1f64f22f861a9", "DeleteOnTermination": false, "DeviceIndex": 3, "NetworkCardIndex": 0, "InstanceOwnerId": "292200246037", "Status": "attached" }, "AvailabilityZone": "us-east-1a", "Description": "[Do not detach or untag] Amazon FSx network interface for fs-02c7c7ebb743b92a2", "Groups": [ { "GroupName": "default", "GroupId": "sg-09833fa43dc030900" } ], "InterfaceType": "interface", "Ipv6Addresses": [], "MacAddress": "0e:bb:6d:7c:5d:47", "NetworkInterfaceId": "eni-0587f67fff8d801df", "OwnerId": "<AWSアカウントID>", "PrivateDnsName": "ip-172-31-47-250.ec2.internal", "PrivateIpAddress": "172.31.47.250", "PrivateIpAddresses": [ { "Primary": true, "PrivateDnsName": "ip-172-31-47-250.ec2.internal", "PrivateIpAddress": "172.31.47.250" }, { "Primary": false, "PrivateDnsName": "ip-172-31-44-99.ec2.internal", "PrivateIpAddress": "172.31.44.99" }, { "Primary": false, "PrivateDnsName": "ip-172-31-32-103.ec2.internal", "PrivateIpAddress": "172.31.32.103" } ], "RequesterId": "470192892696", "RequesterManaged": false, "SourceDestCheck": false, "Status": "in-use", "SubnetId": "subnet-00b2246e7a23ec379", "TagSet": [ { "Key": "AmazonFSx.FileSystemId", "Value": "fs-02c7c7ebb743b92a2" } ], "VpcId": "vpc-0e0796981cea634c1" }, { "Attachment": { "AttachTime": "2022-11-29T13:13:32+00:00", "AttachmentId": "eni-attach-0a6ad1ccbd0c4d00f", "DeleteOnTermination": false, "DeviceIndex": 3, "NetworkCardIndex": 0, "InstanceOwnerId": "292200246037", "Status": "attached" }, "AvailabilityZone": "us-east-1c", "Description": "[Do not detach or untag] Amazon FSx network interface for fs-02c7c7ebb743b92a2", "Groups": [ { "GroupName": "default", "GroupId": "sg-09833fa43dc030900" } ], "InterfaceType": "interface", "Ipv6Addresses": [], "MacAddress": "12:d8:3a:62:c6:1f", "NetworkInterfaceId": "eni-097c54b261e931320", "OwnerId": "<AWSアカウントID>", "PrivateDnsName": "ip-172-31-90-26.ec2.internal", "PrivateIpAddress": "172.31.90.26", "PrivateIpAddresses": [ { "Primary": true, "PrivateDnsName": "ip-172-31-90-26.ec2.internal", "PrivateIpAddress": "172.31.90.26" }, { "Primary": false, "PrivateDnsName": "ip-172-31-81-49.ec2.internal", "PrivateIpAddress": "172.31.81.49" }, { "Primary": false, "PrivateDnsName": "ip-172-31-83-247.ec2.internal", "PrivateIpAddress": "172.31.83.247" } ], "RequesterId": "470192892696", "RequesterManaged": false, "SourceDestCheck": false, "Status": "in-use", "SubnetId": "subnet-0e4270793b4b19850", "TagSet": [ { "Key": "AmazonFSx.FileSystemId", "Value": "fs-02c7c7ebb743b92a2" } ], "VpcId": "vpc-0e0796981cea634c1" } ] }
プライベートIPアドレスにクラスター間エンドポイントやiSCSIエンドポイントのIPアドレスが割り当てられていますが、エンドポイントIPアドレス範囲内のIPアドレスは割り当てられていないですね。
次に、ルートテーブルのルートを確認します。
エンドポイントIPアドレス範囲内のIPアドレスがFSx for ONTAPファイルシステムのENIにルーティングされるようになっています。これにより、管理エンドポイントやNFSのエンドポイントへのアクセスがFSx for ONTAPに到達するようになっているようですね。
VPCピアリング経由で通信できるか確認
それではVPCピアリング経由でアクセスできるか確認してみます。
VPCピアリングは以下のように設定しました。特殊なことは何もしていません。
各VPCのルートテーブルで、互いのVPCのCIDRへの通信はVPCピアリングにルーティングするよう設定します。
クライアントがいるVPCのルートテーブルは以下の通りです。
FSx for ONTAPがいるVPCのルートテーブルは以下の通りです。
この状態でFSx for ONTAPのボリュームをマウントしてみます。
# マウントポイントの作成 $ sudo mkdir /mnt/fsxn # マウント $ sudo mount -t nfs 172.31.255.209:/vol1 /mnt/fsxn -v mount.nfs: timeout set for Tue Nov 29 14:30:39 2022 mount.nfs: trying text-based options 'vers=4.1,addr=172.31.255.209,clientaddr=10.0.1.46'
はい、いつまで経ってもマウントできませんでした。
FSx for ONTAPファイルシステムに対してSSHしようとしても通信できません。
# SSHしようとする $ ssh fsxadmin@172.31.255.240 -v # SSHできないので、tracerouteで到達できるのか確認 $ sudo traceroute -T -p 22 172.31.255.240 traceroute to 172.31.255.240 (172.31.255.240), 30 hops max, 60 byte packets 1 * * * 2 * * * 3 * * * 4 * * * 5 * * * 6 * * * 7 * * * 8 * * * 9 * * * 10 * * * 11 * * * 12 * * * 13 * * * 14 * * * 15 * * * 16 * * * 17 * * * 18 * * * 19 * * * 20 * * * 21 * * * 22 * * * 23 * * * 24 * * * 25 * * * 26 * * * 27 * * * 28 * * * 29 * * * 30 * * *
エンドポイントIPアドレス範囲内のIPアドレスではない、クラスター間エンドポイントに対するSSHはパスワードの要求をされたため行えそうです。
$ ssh fsxadmin@172.31.90.26 The authenticity of host '172.31.90.26 (172.31.90.26)' can't be established. ECDSA key fingerprint is SHA256:h1L3XGwsFViqzco+E4A5e/4g7HNbeitviCodYeJBh4E. ECDSA key fingerprint is MD5:2a:23:d8:f7:da:9e:5a:54:4e:54:9c:9a:d9:ee:28:62. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.31.90.26' (ECDSA) to the list of known hosts. Password:
そのため、VPCピアリングやルートテーブルの設定については問題なさそうです。
よくよく考えると、VPCのルートテーブルはVPCピアリングから入ってきたトラフィックに対してルーティングすることはできません。また、VPCピアリングではトランジットすることができません。そのため、内部的にVPCピアリングは「VPCのCIDR : local」のルートしか判断できないと予想します。
エンドポイントIPアドレスはENIに直接割り当てられていないフローティングIPです。もしかしたら、フローティングIPのようにENIに紐づいていないIPアドレスについては、そのIPアドレスがVPCのCIDR内で合っても「VPCのCIDR : local」のルートではルーティングできないのではと考えます。
確かに、ルートテーブル上でENIとIPアドレスが紐づいていない以上、どのENIに通信をルーティングすれば良いのか分からないですね。
ということで、VPCピアリング経由でエンドポイントIPアドレスにアクセスするのはできないと判断しました。
Transit Gateway経由で通信できることを確認
VPCピアリング経由でエンドポイントIPアドレスに通信できないことが分かったので、Transit Gateway経由でチャレンジしてみます。
構成図は以下のようになります。
Transit Gatewayと各VPCにTransit Gateway attachmentの作成をしました。デフォルトのTransit gateway route tableへの関連付けと、デフォルトのTransit gateway route tableへのPropagation(伝搬)を有効にしているので、デフォルトのTransit gateway route tableに各VPCのTransit Gateway attachmentへのルートが動的に追加されます。
エンドポイントIPアドレスの範囲にVPCのCIDR外のものを選択した場合は、静的ルートを追加する必要があります。エンドポイントIPアドレスの範囲をVPCのCIDR内にすることで、Propagationにより動的に追加されるルートで事足ります。
あとは各VPCのルートテーブルで、互いのVPCのCIDRへの通信はTransit Gatewayにルーティングするよう設定します。
クライアントがいるVPCのルートテーブルは以下の通りです。
FSx for ONTAPがいるVPCのルートテーブルは以下の通りです。
この状態でFSx for ONTAPのボリュームをマウントしてみます。
# マウント $ sudo mount -t nfs 172.31.255.209:/vol1 /mnt/fsxn # マウントできていることを確認 $ df -ht nfs4 Filesystem Size Used Avail Use% Mounted on 172.31.255.209:/vol1 973M 320K 973M 1% /mnt/fsxn # マウントポイントを確認 $ ls -ld /mnt/fsxn/ drwxr-xr-x 2 root root 4096 Nov 29 13:33 /mnt/fsxn/ # 書き込めることを確認 # rootユーザーにスイッチ $ sudo -i # 書き込み $ echo "test" > /mnt/fsxn/test.txt # 書き込んだファイルがあることを確認 $ ls -l /mnt/fsxn/ total 0 -rw-r--r-- 1 root root 5 Nov 29 15:02 test.txt
マウントでき、書き込み読み込みも問題なくできました。
FSx for ONTAPファイルシステムに対してSSHもしてみましょう。
$ ssh fsxadmin@172.31.255.240 The authenticity of host '172.31.255.240 (172.31.255.240)' can't be established. ECDSA key fingerprint is SHA256:h1L3XGwsFViqzco+E4A5e/4g7HNbeitviCodYeJBh4E. ECDSA key fingerprint is MD5:2a:23:d8:f7:da:9e:5a:54:4e:54:9c:9a:d9:ee:28:62. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '172.31.255.240' (ECDSA) to the list of known hosts. Password: This is your first recorded login. FsxId02c7c7ebb743b92a2::> network interface show -fields vserver, lif, address, is-vip, home-node, home-port, curr-node, curr-port, status-oper, is-home,failover-policy, auto-revert, failover-group vserver lif address is-vip home-node home-port curr-node curr-port status-oper is-home failover-policy auto-revert failover-group ---------------------- -------- -------------- ------ ------------------------- --------- ------------------------- --------- ----------- ------- --------------------- ----------- -------------- FsxId02c7c7ebb743b92a2 fsxadmin 172.31.255.240 false FsxId02c7c7ebb743b92a2-01 e0e FsxId02c7c7ebb743b92a2-01 e0e up true broadcast-domain-wide true Fsx FsxId02c7c7ebb743b92a2 inter_1 172.31.90.26 false FsxId02c7c7ebb743b92a2-01 e0e FsxId02c7c7ebb743b92a2-01 e0e up true disabled false Fsx FsxId02c7c7ebb743b92a2 inter_2 172.31.47.250 false FsxId02c7c7ebb743b92a2-02 e0e FsxId02c7c7ebb743b92a2-02 e0e up true disabled false Fsx SVM iscsi_1 172.31.83.247 false FsxId02c7c7ebb743b92a2-01 e0e FsxId02c7c7ebb743b92a2-01 e0e up true disabled false Fsx SVM iscsi_2 172.31.32.103 false FsxId02c7c7ebb743b92a2-02 e0e FsxId02c7c7ebb743b92a2-02 e0e up true disabled false Fsx SVM nfs_smb_management_1 172.31.255.209 false FsxId02c7c7ebb743b92a2-01 e0e FsxId02c7c7ebb743b92a2-01 e0e up true system-defined true Fsx 6 entries were displayed.
こちらもできました。Transit Gateway経由でのアクセスは問題なくできますね。
本当に「VPCのCIDR : local」のルートはENIに紐づいていないIPアドレスに対してルーティングできないのか
最後に本当に「VPCのCIDR : local」のルートはENIに紐づいていないIPアドレスに対してルーティングできないのか確認してみます。
FSx for ONTAPファイルシステムがいるVPC上に「VPCのCIDR : local」のルートとTransit Gatewayのルートテーブルを作成し、FSx for ONTAPのスタンバイサブネットに割り当てます。
この状態で、FSx for ONTAPファイルシステムに対してSSHしようとしてみます。
$ ssh fsxadmin@172.31.255.240 -v OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 58: Applying options for * debug1: Connecting to 172.31.255.240 [172.31.255.240] port 22.
通信できなくなりましたね。
「VPCのCIDR : local」のルートではやはりENIに紐づいていないIPアドレスに対してルーティングできないですね。
次に、作成したルートテーブルにFSx for ONTAPのエンドポイントIPアドレスへのルートを追加します。
対象のFSx for ONTAPファイルシステムを作成してアクション
-ルートテーブルを管理
をクリックし、追加したいルートテーブルを選択します。すると、更新
タブにルートテーブルの関連付けというイベントが追加されます。こちらのステータスが完了済み
になることを確認します。
追加したルートテーブルのルートを確認すると、エンドポイントIPアドレスへのルートが追加されています。
ちなみにこの関連付けるルートテーブルの追加・削除をする機能もre:Invent期間中のアップデートです。
Change | Description | Date |
---|---|---|
Support added for updating VPC route tables on Multi-AZ file systems | You can now associate (add) a new VPC route table to an existing Multi-AZ FSx for ONTAP file system or disassociate (remove) an existing VPC route table from an existing Multi-AZ FSx for ONTAP file system. For more information, see Updating a file system. | November 28, 2022 |
抜粋 : Document History for Amazon FSx for NetApp ONTAP - FSx for ONTAP
ルートテーブルで直接上述のような「エンドポイントIPアドレス : ENI」というルートを作成しようとすると、Route destination doesn't match any subnet CIDR blocks
と怒られます。
この状態で、再度FSx for ONTAPファイルシステムに対してSSHしようとしてみます。
$ ssh fsxadmin@172.31.255.240 Password: Last login time: 11/29/2022 15:08:28 Unsuccessful login attempts since last login: 1 FsxId02c7c7ebb743b92a2::> FsxId02c7c7ebb743b92a2::> date show (cluster date show) Node Date Time zone --------- ------------------------- ------------------------- FsxId02c7c7ebb743b92a2-01 11/29/2022 15:21:01 Etc/UTC +00:00 FsxId02c7c7ebb743b92a2-02 11/29/2022 15:21:01 Etc/UTC +00:00 2 entries were displayed.
SSHできました。
やはり「VPCのCIDR : local」のルートはENIに紐づいていないIPアドレスに対してはルーティングできないということが分かりました。
Transit Gateway route tableに設定するルートが少なくなります
Amazon FSx for NetApp ONTAPのエンドポイントIPアドレスにVPCのCIDR範囲内のIPアドレスを指定できるようになったアップデートを紹介しました。
エンドポイントIPアドレスにVPCのCIDR範囲内のIPアドレスを指定することで、Transit Gateway route tableに設定するルートが少なくなるのはありがたいですね。VPC内に空きIPアドレスがないなど特に理由がなければ、VPCのCIDR範囲内のIPアドレスを指定することになると思います。
IPアドレスの範囲については後から変更できないため、SVMの数に応じてサイジングをしてください。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!