[Amazon FSx for NetApp ONTAP] エンドポイントIPアドレスにVPCのCIDR範囲内のIPアドレスを指定する場合はNLBで接続する方式が使えない件
「Network Load Balancer のターゲットグループを作成する際に、ターゲット IP で指定した VPC のサブネットの一部であるかを確認するため、本記事で説明した手法は採用できなくなりました。」って本当?
こんにちは、のんピ(@non____97)です。
以前、Amazon FSx for NetApp ONTAP(以降FSxN)において、Multi-AZ構成とする場合にTransit Gatewayの用意が難しければNLBでも対応できるという記事を書きました。
その後AWS Blogsで類似のブログ記事が投稿されました。
こちらの記事の冒頭を見ると以下のような記載がありました。
更新(2023 年 3 月 13 日):Network Load Balancer のターゲットグループを作成する際に、ターゲット IP で指定した VPC のサブネットの一部であるかを確認するため、本記事で説明した手法は採用できなくなりました。
本当にそうなのでしょうか。
手を動かさずに鵜呑みするのもアレなので検証します。
いきなりまとめ
- エンドポイントIPアドレスとしてVPCのCIDR内を選択した場合はNLBで接続できない
- ターゲットグループのVPCのCIDR内だが、サブネットのCIDR外のIPアドレスをターゲットに指定すると
IP アドレスは既存のサブネットに属している必要があります
とエラーになる その他のプライベートIPアドレス
を指定してもThe IP address 'IPアドレス' is within the VPC, but is not within a VPC subnet so it can't be registered
とエラーになる
- ターゲットグループのVPCのCIDR内だが、サブネットのCIDR外のIPアドレスをターゲットに指定すると
- エンドポイントIPアドレスとしてVPCのCIDR外のCIDRを指定した場合はNLBで接続できる
- PrivateLinkでの接続も可能
- エンドポイントIPアドレスでVPC内のCIDRを指定した際に、別ネットワークから接続する場合は必然的にTransit Gatewayが必要になる
- エンドポイントIPアドレスの範囲はFSxNファイルシステム作成後変更することはできないので、Transit Gateway と NLBどちらで接続するのかよく考えた上で設定をすること
やってみる
検証環境
検証環境は以下のとおりです。
Multi-AZ構成のFSxNファイルシステムを作成します。それぞれエンドポイントIPアドレスがVPC内、VPC外となるように設定します。
FSxNファイルシステムの作成
それではFSxNファイルシステムの作成を行います。珍しくマネジメントコンソールから作成してみました。
作成する際は、デプロイタイプでマルチAZ
を選択します。
また、エンドポイントIPアドレス範囲はVPCから未割り当てのIPアドレス範囲
を選択します。
こちらを選択すると、VPCのCIDR末尾64個のIPアドレスが指定されます。こちらのアップデートは以下記事でも解説しているので併せてご覧ください。
作成後のFSxNファイルシステムは以下のとおりです。
VPCのCIDRは10.0.0.0/20 (10.0.0.0 - 10.0.15.255)
です。確かにエンドポイント IP アドレス範囲として10.0.15.255/26
とVPCのCIDR末尾64個(6bit)のCIDRが指定されていますね。
SVMのエンドポイントも確認しておきましょう。
10.0.15.206
とエンドポイント IP アドレス範囲の10.0.15.255/26
内のIPアドレスになっていますね。
同じ要領でエンドポイントIPアドレス範囲がVPC外のFSxNファイルシステムを作成します。
IPアドレスの範囲はVPC外であれば何でも良いという訳ではありません。ターゲットグループに指定可能なIPアドレスには制限があります。
- ターゲットグループの VPC のサブネット
- 10.0.0.0/8 (RFC 1918)
- 100.64.0.0/10 (RFC 6598)
- 172.16.0.0/12 (RFC 1918)
- 192.168.0.0/16 (RFC 1918)
抜粋 : Network Load Balancers のターゲットグループ - Elastic Load Balancing
また、FSxNとしても指定可能なCIDRに制限があります。
次の CIDR 範囲に該当するものは、 FSx for ONTAP と互換性がないため選択しないでください。
- 0.0.0.0/8
- 127.0.0.0/8
- 198.19.0.0/20
- 224.0.0.0/4
- 240.0.0.0/4
- 255.255.255.255/32
今回は100.64.0.0/27
にしました。
作成後のFSxNファイルシステムを確認します。
指定した範囲内で管理IPアドレスやNFS IPアドレスが割り当てられていますね。
ちなみに、FSxNファイルシステム作成時に選択したルートテーブルのルートは以下のようになっています。
エンドポイント IP アドレス範囲内のIPアドレスはフローティングIPアドレスとなります。そのため、ENIに到達できるように明示的にルーティング情報を定義する必要があります。
ここの挙動は以下記事の「本当に「VPCのCIDR : local」のルートはENIに紐づいていないIPアドレスに対してルーティングできないのか
」という章でも検証しています。
ターゲットグループのターゲットとしてIPアドレスを指定してみる
それでは、ターゲットグループのターゲットとしてIPアドレスを指定してみます。
まず、ターゲットグループを作成します。ターゲットタイプにはIPアドレス
を選択し、ターゲットとするプロトコルはTCP/22にしました。また、VPCのFSxNのVPCと同じものを選択しました。
IPアドレスにVPC内のエンドポイントIPアドレスである10.0.15.208
を選択します。
すると、IP アドレスは既存のサブネットに属している必要があります
とエラーになってしまいました。
ネットワークをその他のプライベートIPアドレス
に変更して再チャレンジします。
しかし、こちらもThe IP address '10.0.15.208' is within the VPC, but is not within a VPC subnet so it can't be registered
とエラーになりました。
どうやら、指定したIPアドレスがVPCのCIDR内に含まれるかどうか、指定したIPアドレスを含むCIDRのサブネットがあるかどうかのチェックをするようです。
これが冒頭のAWS公式ブログの伝えたかったことでしょうか。
IPアドレスにVPC外のエンドポイントIPアドレスである100.64.0.17
を選択します。
問題なくターゲットグループのターゲットIPアドレスとして指定できました。
つまりはエンドポイントIPアドレスにVPCのCIDR内のものを選択した場合はNLBで接続できないようです。
NLBの作成
NLBの作成をします。作成する際に先ほど作成したターゲットグループを指定します。
作成後、しばらくするとNLBのステータスがアクティブになりました。
また、ターゲットのIPアドレスもhealthy
となりました。
NLB経由でのアクセス
それでは、NLB経由でアクセスしてみましょう。
事前にFSxNファイルシステムの管理者パスワードを設定しておきます。
設定後、同じVPCのEC2インスタンスからNLBのDNS名を指定してSSHします。
$ ssh [email protected] The authenticity of host 'nlb-fsxn-42959afaed71c11e.elb.us-east-1.amazonaws.com (10.0.9.32)' can't be established. ECDSA key fingerprint is SHA256:1oXwNWIJOh2qWosg3eZCC/KfjEOQ37xyM0m3Wcp3mFY. ECDSA key fingerprint is MD5:a5:4f:97:66:57:6b:13:4b:69:5c:07:26:94:16:7e:bf. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'nlb-fsxn-42959afaed71c11e.elb.us-east-1.amazonaws.com,10.0.9.32' (ECDSA) to the list of known hosts. Password: This is your first recorded login. FsxId069bcd83ab561b56c::> vserver show Admin Operational Root Vserver Type Subtype State State Volume Aggregate ----------- ------- ---------- ---------- ----------- ---------- ---------- svm data default running running svm_root aggr1 FsxId069bcd83ab561b56c::> lif show (statistics lif show) FsxId069bcd83ab561b56c : 8/6/2023 07:31:53 *Recv Sent Recv Data Recv Sent Data Sent Current LIF Vserver Packet (Bps) Errors Packet (Bps) Errors Port -------------------- ------- ------ ----- ------ ------ ----- ------ ------- nfs_smb_management_1 svm 0 0 0 0 0 0 e0e iscsi_2 svm 0 0 0 0 0 0 e0e iscsi_1 svm 0 0 0 0 0 0 e0e inter_2 FsxId069bcd83ab561b56c 0 0 0 0 0 0 e0e inter_1 FsxId069bcd83ab561b56c 0 0 0 0 0 0 e0e fsxadmin FsxId069bcd83ab561b56c 0 0 0 0 0 0 e0e FsxId069bcd83ab561b56c-02_mgmt1 FsxId069bcd83ab561b56c 0 0 0 0 0 0 e0a FsxId069bcd83ab561b56c-02_clus_2 Cluster 0 0 0 0 0 0 e0a.pv1 FsxId069bcd83ab561b56c-01_mgmt1 FsxId069bcd83ab561b56c 0 0 0 0 0 0 e0a FsxId069bcd83ab561b56c-01_clus_1 Cluster 0 0 0 0 0 0 e0a.pv1
問題なく接続でき、ONTAP CLIも叩けていますね。
接続元のIPアドレスも確認してみましょう。
::> security audit log show -fields timestamp, node, application, vserver, username, input, state, message, location -application ssh -state Error|Success timestamp node application location vserver username input state message -------------------------- ------------------------- ----------- --------- ---------------------- -------- ---------- ------- ------- "Sun Aug 06 07:31:26 2023" FsxId069bcd83ab561b56c-01 ssh 10.0.9.32 FsxId069bcd83ab561b56c fsxadmin Logging in Success - "Sun Aug 06 07:31:53 2023" FsxId069bcd83ab561b56c-01 ssh 10.0.9.32 FsxId069bcd83ab561b56c fsxadmin statistics lif show Success - 2 entries were displayed.
10.0.9.32
というのはNLBのENIのIPアドレスです。
ターゲットグループのターゲットタイプをIPアドレスで、プロトコルがTCPの場合のデフォルトの「クライアントIPアドレスの保持」は「無効」です。
デフォルトでは、UDP プロトコルと TCP_UDP プロトコルを使用するインスタンスおよび IP タイプのターゲットグループに対して、クライアント IP の保存が有効になっています (無効にすることはできません)。ただし、preserve_client_ip.enabled ターゲットグループ属性を使用して、TCP および TLS ターゲットグループのクライアント IP の保存を有効または無効にできます。
デフォルト設定
- インスタンスタイプのターゲットグループ: 有効
- IP タイプのターゲットグループ (UDP、TCP_UDP): 有効
- IP タイプのターゲットグループ (TCP、TLS): 無効
セキュリティグループやエクスポートポリシーでIPアドレスを制御する場合は意識しておくと良いでしょう。
PrivateLinkで接続
エンドポイントサービスの作成
せっかくなので、PrivateLinkで接続できるかも検証してみましょう。
図にすると以下のとおりです。
PrivateLinkを使うことで送信元、送信先のVPCのCIDRが重複していても接続することが可能になります。
まず、エンドポイントサービスを作成します。
作成後のエンドポイントサービスは以下のとおりです。
VPCエンドポイントの作成
続いて、先ほど作成したエンドポイントサービスのVPCエンドポイントを作成します。
作成後のVPCエンドポイントは以下のとおりです。ステータスが承認の保留中
となっていますね。
エンドポイントサービスのエンドポイント接続
タブから承認をしてあげます。
承認をすると、VPCエンドポイントのステータスが使用可能
になりました。
動作確認
VPCエンドポイントがあるVPC上のEC2インスタンスからVPCエンドポイントのDNS名に対してSSHをします。
$ ssh fsxadmin@vpce-047c35f984d5235d0-tukm5csr.vpce-svc-03055408cd8736619.us-east-1.vpce.amazonaws.com The authenticity of host 'vpce-047c35f984d5235d0-tukm5csr.vpce-svc-03055408cd8736619.us-east-1.vpce.amazonaws.com (10.0.0.30)' can't be established. ED25519 key fingerprint is SHA256:OSABO3q+vJenLabRqYf9pHuurcKGt/ML7QZuD9vWFos. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added 'vpce-047c35f984d5235d0-tukm5csr.vpce-svc-03055408cd8736619.us-east-1.vpce.amazonaws.com' (ED25519) to the list of known hosts. (fsxadmin@vpce-047c35f984d5235d0-tukm5csr.vpce-svc-03055408cd8736619.us-east-1.vpce.amazonaws.com) Password: Last login time: 8/6/2023 07:45:12 FsxId069bcd83ab561b56c::> FsxId069bcd83ab561b56c::> vserver show Admin Operational Root Vserver Type Subtype State State Volume Aggregate ----------- ------- ---------- ---------- ----------- ---------- ---------- svm data default running running svm_root aggr1 FsxId069bcd83ab561b56c::> FsxId069bcd83ab561b56c::> security audit log show -fields timestamp, node, application, vserver, username, input, state, message, location -application ssh -state Error|Success timestamp node application location vserver username input state message -------------------------- ------------------------- ----------- --------- ---------------------- -------- ---------- ------- ------- "Sun Aug 06 07:31:26 2023" FsxId069bcd83ab561b56c-01 ssh 10.0.9.32 FsxId069bcd83ab561b56c fsxadmin Logging in Success - "Sun Aug 06 07:31:53 2023" FsxId069bcd83ab561b56c-01 ssh 10.0.9.32 FsxId069bcd83ab561b56c fsxadmin statistics lif show Success - "Sun Aug 06 07:45:12 2023" FsxId069bcd83ab561b56c-01 ssh 10.0.9.32 FsxId069bcd83ab561b56c fsxadmin Logging in Success - "Sun Aug 06 08:02:47 2023" FsxId069bcd83ab561b56c-01 ssh 10.0.9.32 FsxId069bcd83ab561b56c fsxadmin Logging out Success - "Sun Aug 06 08:03:00 2023" FsxId069bcd83ab561b56c-01 ssh 10.0.8.55 FsxId069bcd83ab561b56c fsxadmin Logging in Success - 5 entries were displayed.
接続できましたね。SSHの接続元IPとして記録されている10.0.8.55
というのはNLBのENIのIPアドレスです。
FSx for ONTAPファイルシステムをフェイルオーバーさせてみる
ついでにFSxNファイルシステムをフェイルオーバーした後も接続できるのか確認します。
まず、現在のネットワークインターフェイスの状態を確認します。
::> 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 ---------------------- -------- ----------- ------ ------------------------- --------- ------------------------- --------- ----------- ------- --------------------- ----------- -------------- FsxId069bcd83ab561b56c fsxadmin 100.64.0.17 false FsxId069bcd83ab561b56c-01 e0e FsxId069bcd83ab561b56c-01 e0e up true broadcast-domain-wide true Fsx FsxId069bcd83ab561b56c inter_1 10.0.8.205 false FsxId069bcd83ab561b56c-01 e0e FsxId069bcd83ab561b56c-01 e0e up true disabled false Fsx FsxId069bcd83ab561b56c inter_2 10.0.9.98 false FsxId069bcd83ab561b56c-02 e0e FsxId069bcd83ab561b56c-02 e0e up true disabled false Fsx svm iscsi_1 10.0.8.229 false FsxId069bcd83ab561b56c-01 e0e FsxId069bcd83ab561b56c-01 e0e up true disabled false Fsx svm iscsi_2 10.0.9.252 false FsxId069bcd83ab561b56c-02 e0e FsxId069bcd83ab561b56c-02 e0e up true disabled false Fsx svm nfs_smb_management_1 100.64.0.8 false FsxId069bcd83ab561b56c-01 e0e FsxId069bcd83ab561b56c-01 e0e up true system-defined true Fsx 6 entries were displayed.
スループットキャパシティを変更してフェイルオーバーさせます。
すると、すぐ以下のメッセージを出力しSSHのセッションが切れてしまいました。
::> client_loop: send disconnect: Broken pipe
再接続します。
$ ssh fsxadmin@vpce-047c35f984d5235d0-tukm5csr.vpce-svc-03055408cd8736619.us-east-1.vpce.amazonaws.com (fsxadmin@vpce-047c35f984d5235d0-tukm5csr.vpce-svc-03055408cd8736619.us-east-1.vpce.amazonaws.com) Password: Last login time: 8/6/2023 08:03:00 Unsuccessful login attempts since last login: 1 FsxId069bcd83ab561b56c::> FsxId069bcd83ab561b56c::> 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 ---------------------- -------- ----------- ------ ------------------------- --------- ------------------------- --------- ----------- ------- --------------------- ----------- -------------- FsxId069bcd83ab561b56c fsxadmin 100.64.0.17 false FsxId069bcd83ab561b56c-01 e0e FsxId069bcd83ab561b56c-02 e0e up false broadcast-domain-wide true Fsx FsxId069bcd83ab561b56c inter_1 10.0.8.205 false FsxId069bcd83ab561b56c-01 e0e FsxId069bcd83ab561b56c-01 e0e - true disabled false Fsx FsxId069bcd83ab561b56c inter_2 10.0.9.98 false FsxId069bcd83ab561b56c-02 e0e FsxId069bcd83ab561b56c-02 e0e up true disabled false Fsx svm iscsi_1 10.0.8.229 false FsxId069bcd83ab561b56c-01 e0e FsxId069bcd83ab561b56c-01 e0e - true disabled false Fsx svm iscsi_2 10.0.9.252 false FsxId069bcd83ab561b56c-02 e0e FsxId069bcd83ab561b56c-02 e0e up true disabled false Fsx svm nfs_smb_management_1 100.64.0.8 false FsxId069bcd83ab561b56c-01 e0e FsxId069bcd83ab561b56c-02 e0e up false system-defined true Fsx 6 entries were displayed.
再接続をすると、fsxadmin
のcurr-node
が変更され、フェイルオーバーしていることが分かります。
ターゲットグループのVPCのCIDR内だが、サブネットのCIDR外のIPアドレスをターゲットに指定すると怒られます
エンドポイントIPアドレスにVPCのCIDR範囲内のIPアドレスを指定する場合はNLBで接続する方式が使えないことを検証しました。
つまりは、PrivateLinkで別ネットワークから接続することもできなくなります。
エンドポイントIPアドレスでVPC内のCIDRを指定した際に、別ネットワークから接続する場合は必然的にTransit Gatewayが必要になります。
エンドポイントIPアドレスの範囲はFSxNファイルシステム作成後変更することはできません。Transit Gateway と NLBどちらで接続するのかよくよく考えてから選択しましょう。
この記事が誰かの助けになれば幸いです。
以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!