■背景
新機能でインスタンスのVNICにIP CIDRアドレスをアタッチすることができるようになりました。
今までだと、VNICに対して1つずつしかIPアドレスをアタッチできませんでしたが、今回のアップデートで「IP CIDRアドレス」(=CIDR範囲のネットワーク=複数のIPアドレス)をVNICにアタッチできるようになりました。
「複数のIPアドレスを一度にアタッチ」が重要です。

この仕組みの理解と実際に割り当てられるかを確認することが、今回の目的です。
■インスタンスとVNICとIPオブジェクトの関係
■構成
CIDR IPアドレス割り当てたインスタンス <-> 別インスタンスとの接続
10.0.1.8 <-> 10.0.1.254
10.0.1.9 <-> 10.0.1.254
■実際の割り当て
コンソールでの割り当て

プライマリVNICにセカンダリIP CIDRアドレス10.0.1.8/29(=8つのIPアドレス)を割り当てしました。
自動と手動が選べます。手動の場合はCIDRの最初のアドレスを選択します。
OS側で割り当て
OSではVNICのプライマリIPアドレスしか認識していません。
ドキュメント セカンダリ・プライベートIPアドレスを使用するためのLinuxの構成 を参考に認識させます。
ip addr add <address>/<subnet_prefix_len> dev <phys_dev> label <phys_dev>:<addr_seq_num>
<address>: セカンダリ・プライベートIPアドレス
<subnet_prefix_len>: サブネットの接頭辞の長さ。たとえば、サブネットが192.168.20.0/24の場合、サブネット接頭辞の長さは24です
<phys_dev>: アドレスを追加するインタフェース(例: ens3)
<addr_seq_num>: デバイス上のアドレス・スタックの連続した番号(例:1,2,3と増やして追加した)
コマンド
sudo ip addr add 10.0.1.8/29 dev ens3 label ens3:1
sudo ip addr add 10.0.1.9/29 dev ens3 label ens3:2
※割り当てを解除するコマンド
sudo ip addr del 10.0.1.8/29 dev ens3:1
(展開ください) $ ip addr show 結果
[opc@allocate-cidr-nicins ~]$ ip addr show
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens3: mtu 9000 qdisc fq_codel state UP group default qlen 1000
link/ether 02:00:17:11:73:55 brd ff:ff:ff:ff:ff:ff
altname enp0s3
inet 10.0.1.2/24 brd 10.0.1.255 scope global dynamic ens3
valid_lft 83172sec preferred_lft 83172sec
inet 10.0.1.8/29 scope global ens3:1
valid_lft forever preferred_lft forever
inet 10.0.1.9/29 scope global secondary ens3:2
valid_lft forever preferred_lft forever
inet6 fe80::17ff:fe11:7355/64 scope link
valid_lft forever preferred_lft forever
(展開ください) $ ifconfig 結果
[opc@allocate-cidr-nicins ~]$ ifconfig
[opc@allocate-cidr-nicins ~]$ ifconfig
ens3: flags=4163 mtu 9000
inet 10.0.1.2 netmask 255.255.255.0 broadcast 10.0.1.255
inet6 fe80::17ff:fe11:7355 prefixlen 64 scopeid 0x20
ether 02:00:17:11:73:55 txqueuelen 1000 (Ethernet)
RX packets 46130 bytes 314825958 (300.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 17435 bytes 9186323 (8.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens3:1: flags=4163 mtu 9000
inet 10.0.1.8 netmask 255.255.255.248 broadcast 0.0.0.0
ether 02:00:17:11:73:55 txqueuelen 1000 (Ethernet)
ens3:2: flags=4163 mtu 9000
inet 10.0.1.9 netmask 255.255.255.248 broadcast 0.0.0.0
ether 02:00:17:11:73:55 txqueuelen 1000 (Ethernet)
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 2372 bytes 5377899 (5.1 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2372 bytes 5377899 (5.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[opc@254-ins ~]$ ping 10.0.1.8
PING 10.0.1.8 (10.0.1.8) 56(84) bytes of data.
64 bytes from 10.0.1.8: icmp_seq=1 ttl=64 time=0.588 ms
64 bytes from 10.0.1.8: icmp_seq=2 ttl=64 time=0.396 ms
^C
--- 10.0.1.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1061ms
rtt min/avg/max/mdev = 0.396/0.492/0.588/0.096 ms
[opc@254-ins ~]$ ping 10.0.1.9
PING 10.0.1.9 (10.0.1.9) 56(84) bytes of data.
64 bytes from 10.0.1.9: icmp_seq=1 ttl=64 time=0.482 ms
64 bytes from 10.0.1.9: icmp_seq=2 ttl=64 time=0.369 ms
^C
--- 10.0.1.9 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1023ms
rtt min/avg/max/mdev = 0.369/0.425/0.482/0.060 ms
割り当てしたCIDR IPアドレスに対してpingの疎通確認ができました。
10,000個以上のIPアドレスをアタッチしてみる
ここまで仕組みを理解したので、あとは繰り返すだけです。
OCI側でサブネットに10.3.0.0/16(※)のCIDRを割り当てて、インスタンスのVNICに10.3.64.0/18のCIDR IPアドレスをアタッチします。
また、OS側はスクリプトを作って回せば完成です。

実際、VNICに10.3.64.0〜10.3.127.254/18のIPアドレス(16,383個)を割り当てて、pingレベルで疎通できることを確認できました。
■ まとめ
「IP CIDRアドレス」を使えば一度にたくさんのIPアドレス割り当てすることを理解しました。
VCN内に作成できるプライベートIPオブジェクトの最大数は64,000 と書いてありますが、「プライベートIPオブジェクト」なので膨大な数のIPアドレスを割り当てできそうです。
現時点でのユースケースとしては、KubernetesのPodのように、1つのpodに1つのIPアドレスを割り当てる前提で、膨大なPodが存在し膨大な数のIPアドレスが必要となる場合に、今回のアップデートが有効です。
他にもIPv6の膨大なIPを使ったユースケースがあれば探してみたいです。
■参考ブログ・注釈
参考ブログ:Announcing OCI IP CIDR Addresses for VNICs
(※)VCNとサブネットに対してもCIDRを16個まで割り当てできるようになったため、新しいCIDR 10.3.0.0/16を追加
以上です。


