OpenStackの仮想ネットワーク管理機能「Quantum」の基本的な設定 3ページ

ネットワークノードの設定

 ネットワークノードでは、制御ノードで設定したquantum.confおよびapi-paste.iniファイルの編集に加え、以下の設定が必要だ。

  • L3 Agentの設定
  • DHCP Agentの設定
  • プラグインの設定
  • sudoersファイルの設定
  • ブリッジ関連のカーネルパラメータ変更
  • dnsmasqパッケージのバージョン確認とアップデート

 なお、L3 AgentやDHCP Agent、プラグインの設定作業はOS_USERNAMEやOS_PASSWORD、OS_AUTH_URL、OS_TENANT_NAMEといった環境変数を定義した状態で実行する必要がある。以下のようにこれらを定義しておこう。

$ export OS_USERNAME=<管理用ユーザー>
$ export OS_TENANT_NAME=<管理用のテナント名>
$ export OS_PASSWORD=<管理用ユーザーのパスワード>
$ export OS_AUTH_URL=http://<keystoneが稼働しているホスト名>:5000/v2.0/

 さて、まずはL3 Agentの設定だが、これはquantum-l3-setupコマンドを実行するだけで良い。

# quantum-l3-setup
Please select a plugin from: linuxbridge openvswitch
Choice:
linuxbridge  ←使用するプラグインを指定する
Quantum plugin: linuxbridge
Configuration updates complete!

 続いてDHCP Agentの設定だが、こちらはquantum-dhcp-setupコマンドで行える。

# quantum-dhcp-setup
Please select a plugin from: linuxbridge openvswitch
Choice:
linuxbridge  ←使用するプラグインを指定する
Quantum plugin: linuxbridge
Please enter the Quantum hostname:
192.168.100.20  ←AMQPサーバーが稼働しているホスト名を指定する
Configuration updates complete!

 quantum-dhcp-setupコマンドはquantum.confの設定ファイルを書き換えるため、コマンド実行後にquantum.confおよびapi-paste.iniファイルを制御ノードで設定したものと同じになっているか確認しておこう。

 Plugin Agentであるlinuxbridge-agentの設定については、/etc/quantum/linuxbridge/linuxbridge_conf.iniというファイルに記述されている。ここで設定が必要なのは「tenant_network_type」および「sql_connection」、「network_vlan_ranges」、「physical_interface_mappings」の4つだ。

 まずtenant_network_typeだが、こちらは通常は「vlan」を指定する。

tenant_network_type = vlan

 sql_connectionでは以下の形式で使用するデータベースの情報を記述する。

sql_connection = <プロトコル>//<ユーザー名>:<パスワード>@<ホスト名>:<ポート番号>/<データベース名>

 たとえばデータベースにMySQLを使用し、ユーザー名およびパスワードが「quantum」、データベースのホスト名が「192.168.100.20」、データベース名が「quantum_linux_bridge」(quantum-server-setupコマンドがデフォルトで作成するデータベース名)、だった場合、下記のようになる。

sql_connection = mysql://quantum:quantum@192.168.100.20:3306/quantum_linux_bridge

 「physical_interface_mappings」は、仮想ネットワークの作成に利用するネットワークインターフェイスの指定と、それを参照するための名称の定義を行うものだ。たとえばeth0を使って仮想ネットワークを作成し、そのネットワークを「physnet1」という名称で参照する場合、次のようになる。

physical_interface_mappings = physnet1:eth0

 eth0以外のネットワークインターフェイスを仮想ネットワークの作成に使用する場合、eth0の部分を適切なものに置き換えておこう。

 「network_vlan_ranges」は、使用するVLANのタグの範囲を指定するものだ。たとえば先に定義したphysnet1でVLANのタグとして1000から2999の間の数を利用する場合、以下のようになる。

network_vlan_ranges = physnet1:1000:2999

 通常この値は適当なもので問題ないが、利用できるVLANのタグに制限がある場合は変更が必要だ。

 続いて、Quantum関連サービスを実行するquantumユーザーがroot権限でコマンドを実行できるよう、/etc/sudoersファイルに下記を追加しておく。

quantum ALL=(ALL)       NOPASSWD:ALL

 カーネルパラメータの設定は、ネットワークノードにおいてiptablesによるパケットの転送を正しく行うために必要だ。Linuxカーネルでは、bridge-nf-call-iptablesおよびbridge-nf-call-ip6tables、bridge-nf-call-arptablesといったパラメータで、ブリッジデバイスを通過するTCP/IPパケットについてiptablesによるフィルタリングを適用するかどうかを指定できる。Quantumを利用する場合、これらの値が0になっている(フィルタリングを適用しない)設定となっている必要がある。

 これらの値は、次のようにcatコマンドを実行することで確認できる。

# cat /proc/sys/net/bridge/bridge-nf-call-iptables
0
# cat /proc/sys/net/bridge/bridge-nf-call-ip6tables
0
# cat /proc/sys/net/bridge/bridge-nf-call-arptables
0

 もし1に設定されている項目があった場合、以下のようにして「0」に変更しておこう。

# echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
# echo 0 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
# echo 0 > /proc/sys/net/bridge/bridge-nf-call-arptables

 また、念のためIPフォワーディングが有効になっていることも確認しておく。

# cat /proc/sys/net/ipv4/ip_forward
1

 なお、これらのデフォルト値は/etc/sysctl.conf内に記述されているのだが、Red Hat Enterprise Linux 6.3(およびその互換環境)ではbridge-nf-call-iptablesおよびbridge-nf-call-ip6tables、bridge-nf-call-arptablesの値が正しく反映されないというバグが確認されている。もし/etc/sysctl.conf内でこれらの値を0に設定しているにも関わらずデフォルト値が1になっている場合は、下記を/etc/rc.localファイルに記述しておくことで対処できるとのことだ。

echo 0 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 0 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
echo 0 > /proc/sys/net/bridge/bridge-nf-call-arptables

 これらに加え、DHCP Agentが利用するdnsmasqパッケージのバージョンの確認も必要だ。記事作成時点でCentOS 6.3で提供されているdnsmasqのバージョンは2.48なのだが、DHCP Agentはdnsmasq 2.59以上を必要とする。そのため、より新しいバージョンのdnsmasqを別途インストールする必要がある。今回は、DAGリポジトリで提供されているdnsmasqパッケージをインストールすることにする。DAGリポジトリ(x86_64向け)もしくはDAGリポジトリ(x86向け)からdnsmasqパッケージをダウンロードしてインストールしておこう。たとえばdnsmasq-2.63-1.el6.rfx.x86_64.rpmというパッケージをインストールする場合、以下のようにすれば良い。

rpm -Uvh http://apt.sw.be/redhat/el6/en/x86_64/extras/RPMS/dnsmasq-2.63-1.el6.rfx.x86_64.rpm

 以上の設定がすべて完了したら、serviceコマンドでサービスを稼働させておく。

# service quantum-linuxbridge-agent start
# service quantum-l3-agent start
# service quantum-dhcp-agent start