OCI ComputeにセカンダリVNICを追加する Part 3


前回の続き

前回から続いた内容なので、6から始まる連続した段落番号をつけている。

※7系と書いてあるところは、7系と8系共通と読み替えていただきたい。

6. セカンダリVNICを永続的に設定する(2)

6系と7系では起動の仕組みがsystemdに代わっているので、それぞれ別に説明する。なお7系では、ocidサービスによる自動割り当てが簡単だ。

6-1. 7系Linux OSで設定する

  1. secondary_vnic_all_configure.shスクリプトをダウンロードする。以前にダウンロードしているときは省略可能。
sudo su -
cd /tmp
curl -O https://docs.cloud.oracle.com/en-us/iaas/Content/Resources/Assets/secondary_vnic_all_configure.sh
chmod u+x secondary_vnic_all_configure.sh

スクリプトのURIが変わることがあるので、そのときにはマニュアルで確認すること。

2.スクリプトを/usr/local/sbinに配置する。

cp /tmp/secondary_vnic_all_configure.sh /usr/local/sbin

3.オーナーがrootで実行権限があることを確認する。

ls -l /usr/local/sbin
total 56
-rwxr--r--. 1 root root 55601 Jun 16 17:30 secondary_vnic_all_configure.sh

4.OS起動時にスクリプトを実行するユニットファイルを作成する。

vi /etc/systemd/system/secondary_vnic.service
/etc/systemd/system/secondary_vnic.service
[Unit]
Description=Setting the secondary vnic 
After=default.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/secondary_vnic_all_configure.sh -c

[Install]
WantedBy=multi-user.target

5.secondary_vnicサービスが自動起動するように設定する。

systemctl enable secondary_vnic.service

6.自動起動が有効になっていることを確認する。

systemctl list-unit-files | grep secondary
secondary_vnic.service                        enabled ★有効になっている

6-2. 6系Linux OSで設定する

  1. secondary_vnic_all_configure.shスクリプトをダウンロードする。以前にダウンロードしているときは省略可能。
sudo su -
cd /tmp
curl -O https://docs.cloud.oracle.com/en-us/iaas/Content/Resources/Assets/secondary_vnic_all_configure.sh
chmod u+x secondary_vnic_all_configure.sh

2.スクリプトを/usr/local/sbinに配置する。

cp /tmp/secondary_vnic_all_configure.sh /usr/local/sbin

3.オーナーがrootで実行権限があることを確認する。

ls -l /usr/local/sbin
total 56
-rwxr--r--. 1 root root 55601 Jun 16 17:30 secondary_vnic_all_configure.sh

4.OS起動時にスクリプトを実行するように/etc/rc.localの末尾に追記する。

vi /etc/rc.local
/etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local

★ここから下の2行を追記する
# for Secondary VNIC
/usr/local/sbin/secondary_vnic_all_configure.sh -c

6-3. 動作確認する(6系7系共通)

OSを再起動して、正しく設定されていることを確認する。このようにVM2からの応答があれば成功だ。

VM1~]# reboot
VM1~]# ping 10.1.1.6
PING 10.1.1.6 (10.1.1.6) 56(84) bytes of data.
64 bytes from 10.1.1.6: icmp_seq=1 ttl=64 time=0.266 ms
64 bytes from 10.1.1.6: icmp_seq=2 ttl=64 time=0.254 ms

7. ocidサービスによるIPアドレスの割り当て

これまでsecondary_vnic_all_configure.shを使った、セカンダリVNICへのIPアドレス割り当てを説明してきた。しかし、もっと簡単な方法がある。それはoci-utilsパッケージに含まれるocidサービスだ。

7-1. ocidサービスを有効にする

デフォルトでは無効になっているが、有効にするとセカンダリVNICに自動でIPアドレスを割り当ててくれる。検出間隔は60秒。

systemctl enable ocid -now

実際に試したところ、IPアドレスが自動設定されるだけで無く、ポリシーベース・ルーティングも設定されていた。

7-2. ocidによる自動割り当ての仕組み

ocidサービスが起動していると、セカンダリVNICを自動検知してIPアドレスやポリシーベースルーティングを設定するようになっている。

もし、IPアドレスの割り当てに失敗するときは、yum update oci-utilsでアップデートを試してほしい。

詳しくはman ocidを参照のこと。CentOS 7で使うときは、リポジトリをOracle Linux 7に切り替えればよいだろう。

ヒント
以前のoci-utilsにはsecondary_vnic_all_configure.shが含まれていた。しかしバージョン0.11.1以降はスクリプトが削除され、新たにPythonベースに置き換えられている。

8. おわりに

セカンダリVNICを使う機会は少ないかもしれないが、シチュエーションによっては便利なときもあるだろう。

また当初はifcfgファイルを手動で設定するほうが慣れているのでいいと思ったけれど、ルーティングに手こずった。それと共にsecondary_vnic_all_configure.shの高機能さには驚いた。

OCIマニュアルは不親切だと思っていたら、MOSにNoteを発見。アカウントを持っている人はどうぞ。

MOS DocID:
2470326.1 OCI : Automatically add a Secondary VNIC in OL7 using an Unit file
2470376.1 OCI : Automatically add a Secondary VNIC in OL6 using systemV

9. まとめ(総合)

機能編

  • セカンダリVNICを使用すると、1つのインスタンスから複数サブネットに簡単に接続できる
  • セカンダリVNICを追加しても、インスタンスの最大帯域幅は変わらない
  • 使用可能なVNIC数はシェイプサイズによって異なる
  • セカンダリVNICは、同一AD内であれば異なるVCNにも接続できる

設定編

  • セカンダリVNICを設定する方法がいくつかあり、Oracle提供のスクリプトがオススメ
  • Oracle Linux 7/8ならばスクリプトよりocidサービスがオススメ
  • Oracle提供のスクリプトやocidでは、セカンダリVNICに対してポリシーベースルーティングが設定される
  • スクリプトによる設定内容は再起動すると失われる。そのためOS起動時にスクリプトを実行するような設定を追加する
  • main以外のルーティングテーブルを見落とさないように、ルーティングでうまくいかないときはip rule showコマンドで確認する

10. コピペ用コマンドまとめ

  • 7/8系Linux OS版
sudo su -

# スクリプトのダウンロード
curl -o /usr/local/sbin/secondary_vnic_all_configure.sh https://docs.cloud.oracle.com/iaas/Content/Resources/Assets/secondary_vnic_all_configure.sh

# パーミッション変更
chmod u+x /usr/local/sbin/secondary_vnic_all_configure.sh

# systemd用のユニットファイル作成
cat <<_EOL_ >/etc/systemd/system/secondary_vnic.service
[Unit]
Description=Setting the secondary vnic 
After=default.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/local/sbin/secondary_vnic_all_configure.sh -c

[Install]
WantedBy=multi-user.target
_EOL_

# サービス有効化
systemctl enable secondary_vnic.service
  • 6系Linux OS版
sudo su -

# スクリプトのダウンロード
curl -o /usr/local/sbin/secondary_vnic_all_configure.sh https://docs.cloud.oracle.com/iaas/Content/Resources/Assets/secondary_vnic_all_configure.sh

# パーミッション変更
chmod u+x /usr/local/sbin/secondary_vnic_all_configure.sh

# /etc/rc.localでスクリプト実行
cat <<_EOL_ >>/etc/rc.local

# for Secondary VNIC
/usr/local/sbin/secondary_vnic_all_configure.sh -c
_EOL_