OpenStackの仮想ネットワーク管理機能「Quantum」の基本的な設定 2ページ
QuantumのインストールとLinuxBridgeを使った環境構築
それでは、Quantumのインストール手順と各種設定方法について紹介していこう。以下ではOS環境としてRed Hat Enterprise Linux互換のCentOS 6.3を利用し、またFedoraプロジェクトが公開しているパッケージリポジトリ「EPEL(Extra Packages for Enterprise Linux)」を利用してOpenStackのパッケージを入手している。EPELについてはさくらの専用サーバとOpenStackで作るプライベートクラウド記事でその導入方法や使い方を解説しているので、詳しくはそちらを参照してほしい。
利用するプラグインを選択する
Quantumを利用する際、まずはどのプラグインを利用するかを決めなければならない。EPELではQuantum本体とプラグインはそれぞれ別のパッケージとして配布されており、使用するプラグインを含むパッケージをインストールする必要がある。EPELで提供されているプラグインパッケージは表2の7つだ。
パッケージ名 | 仮想ネットワーク構築に利用するバックエンド |
---|---|
openstack-quantum-cisco | シスコ製ルーター |
openstack-quantum-linuxbridge | Linux標準のブリッジ機能やVLAN |
openstack-quantum-metaplugin | なし(複数のプラグインを利用する際に使用) |
openstack-quantum-nec | OpenFlowコントローラ |
openstack-quantum-nicira | nicira |
openstack-quantum-openvswitch | Open vSwitch |
openstack-quantum-ryu | Ryu |
このうち、openstack-quantum-ciscoは専用のハードウェアが必要であり、またopenstack-quantum-necやopenstack-quantum-nicira、openstack-quantum-openvswitch、openstack-quantum-ryuは別途対応するソフトウェアやシステムが必要となる。そのため、今回はLinuxのブリッジ機能やVLANを使って仮想ネットワークを構築できるopenstack-quantum-linuxbridgeを使用する例を紹介する。
Quantum関連パッケージのインストール
EPELにおいて、Quantumの本体は「openstack-quantum」というパッケージで提供されている。制御ノードおよびネットワークノードにこれらのパッケージをインストールしておく。
# yum --enablerepo=epel install openstack-quantum
また、ネットワークノードおよび計算ノードにはopenstack-quantum-linuxbridgeパッケージをインストールしておく。
# yum --enablerepo=epel install openstack-quantum-linuxbridge
なお、今回使用したopenstack-quantumパッケージのバージョンは下記のとおりである。
# rpm -q openstack-quantum openstack-quantum-2012.2.1-1.el6.noarch
サービスの作成
ほかのOpenStackサービスと同様、Quantum関連サービスを稼働させているホストの情報などをKeystoneのデータベースに登録しておく必要がある。今回はKeystoneを稼働させているホストで下記のように実行することで登録を実行した。
QUANTUM_HOST=<Quantum Serverをインストールしたホスト名> REGION=<登録を行うリージョン名> export SERVICE_TOKEN=<keystoneで設定したアクセストークン> export SERVICE_ENDPOINT=http://localhost:35357/v2.0/ keystone service-create --name=quantum --type=network --description="Quantum Network Service" SERVICE_ID=`keystone service-list | grep quantum | awk '{print $2}'` keystone endpoint-create --region $REGION --service_id=$SERVICE_ID --publicurl "http://$QUANTUM_HOST:9696/" --adminurl "http://$QUANTUM_HOST:9696/" --internalurl "http://$QUANTUM_HOST:9696/"
ユーザーの作成
次に、QuantumがKeystoneへのアクセスに使用するquantumユーザーを作成する。Keystoneを稼働させているホスト上で下記のコマンドを実行することで作成を行う。
export SERVICE_TOKEN=<keystoneで設定したアクセストークン> export SERVICE_ENDPOINT=http://localhost:35357/v2.0/ PASSWORD=作成するユーザーのパスワード TENANT_ID=`keystone tenant-list | grep service | awk '{print $2}'` ADMIN_ROLE=`keystone role-list | grep admin | awk '{print $2}'` keystone user-create --tenant-id $TENANT_ID --name quantum --pass $PASSWORD USER_ID=`keystone user-list | grep quantum | awk '{print $2}'` keystone user-role-add --user-id $USER_ID --tenant-id $TENANT_ID --role-id $ADMIN_ROLE
制御ノードの設定:データベースの作成と設定ファイルの編集
Quantumの設定は、各ホスト上の/etc/quantumディレクトリ以下に配置された設定ファイルに記述されている。まず制御ノードでは、quantum.confおよびapi-paste.iniファイルの編集が必要だ。また、データベースの設定も必要となる。データベースとしてMySQLを利用している場合、データベースの設定にはquantum-server-setupコマンドが利用できる。
quantum-server-setupコマンドはデータベースおよびQuantumがデータベースへのアクセスに使用するユーザーの作成を行う。デフォルトでは「quantum」というユーザーが作成される。このときパスワードは「-q」オプションで指定できる。
# quantum-server-setup -q <設定するパスワード> Please select a plugin from: linuxbridge openvswitch Choice: linuxbridge ←使用するプラグインを指定する Quantum plugin: linuxbridge Plugin: linuxbridge => Database: quantum_linux_bridge Please enter the password for the 'root' MySQL user: ←MySQLのrootパスワードを入力する Verified connectivity to MySQL. Please enter network device for VLAN trunking: eth0 ←内部ネットワークに接続されているネットワークインターフェイスを指定する Would you like to update the nova configuration files? (y/n): n ←自動的にnovaの設定ファイルを更新するかを指定する Complete!
quantum-server-setupコマンドはデータベースの設定に加えて設定ファイルの変更も行うため、実行後は必ず設定ファイルを確認しておこう。また、quantum-server-setupコマンドはコマンドを実行したホスト上でMySQLサーバーが稼働していることを前提としている。別のホストでMySQLサーバーを実行している場合、そのホスト上でこのコマンドを実行する必要がある。
続いて、Quantumの全体に関連する設定が記述されたquantum.confを編集する。まず必要なのは、使用するプラグインを指定する「core_plugin」項目だ。今回はlinuxbridgeプラグインを使用するので、次のように指定する。
core_plugin = quantum.plugins.linuxbridge.lb_quantum_plugin.LinuxBridgePluginV2
認証方法を指定する「auth_strategy」項目には「keystone」を指定しておく。
auth_strategy = keystone
また、Quantumでは「Network Namespace」という機能を利用することで仮想ネットワークにおけるIPアドレスの重複を許すことができるが、CentOS 6.3系では現状この機能がサポートされていないため、「allow_overlapping_ips」項目にFalseを指定してこれを無効化しておく。
allow_overlapping_ips = False
使用するメッセージングサービスおよびメッセージングサーバーの稼働ホスト、認証情報なども忘れずに設定しておく。たとえばRabbitMQを利用する場合、次の設定項目を追加しておく。
rpc_backend = quantum.openstack.common.rpc.impl_kombu rabbit_host = <RabbitMQサーバーを稼働させているホスト名> rabbit_port = <RabbitMQの稼働ポート> rabbit_userid = <認証に使用するユーザー名> rabbit_password = <認証に使用するパスワード> rabbit_virtual_host = <使用するバーチャルホスト名>
これらを反映させた設定ファイルは以下のようになる。太字の部分が編集および確認が必要な項目だ。
[DEFAULT] # Show more verbose log output (sets INFO log level output) verbose = True # Show debugging output in logs (sets DEBUG log level output) debug = False # Address to bind the API server bind_host = 0.0.0.0 # Port the bind the API server to bind_port = 9696 # Path to the extensions. Note that this can be a colon-separated list of # paths. For example: # api_extensions_path = extensions:/path/to/more/extensions:/even/more/extensions # The __path__ of quantum.extensions is appended to this, so if your # extensions are in there you don't need to specify them here # api_extensions_path = # Quantum plugin provider module core_plugin = quantum.plugins.linuxbridge.lb_quantum_plugin.LinuxBridgePluginV2 # Paste configuration file api_paste_config = api-paste.ini # The strategy to be used for auth. # Supported values are 'keystone'(default), 'noauth'. auth_strategy = keystone # Base MAC address. The first 3 octets will remain unchanged. If the # 4h octet is not 00, it will also used. The others will be # randomly generated. # 3 octet # base_mac = fa:16:3e:00:00:00 # 4 octet # base_mac = fa:16:3e:4f:00:00 # Maximum amount of retries to generate a unique MAC address # mac_generation_retries = 16 # DHCP Lease duration (in seconds) # dhcp_lease_duration = 120 # Enable or disable bulk create/update/delete operations # allow_bulk = True # Enable or disable overlapping IPs for subnets # Attention: the following parameter MUST be set to False if Quantum is # being used in conjunction with nova security groups and/or metadata service. allow_overlapping_ips = False # RPC configuration options. Defined in rpc __init__ # The messaging module to use, defaults to kombu. rpc_backend = quantum.openstack.common.rpc.impl_kombu # Size of RPC thread pool # rpc_thread_pool_size = 64, # Size of RPC connection pool # rpc_conn_pool_size = 30 # Seconds to wait for a response from call or multicall # rpc_response_timeout = 60 # Seconds to wait before a cast expires (TTL). Only supported by impl_zmq. # rpc_cast_timeout = 30 # Modules of exceptions that are permitted to be recreated # upon receiving exception data from an rpc call. # allowed_rpc_exception_modules = quantum.openstack.common.exception, nova.exception # AMQP exchange to connect to if using RabbitMQ or QPID control_exchange = quantum # If passed, use a fake RabbitMQ provider # fake_rabbit = False # Configuration options if sending notifications via kombu rpc (these are # the defaults) # SSL version to use (valid only if SSL enabled) # kombu_ssl_version = # SSL key file (valid only if SSL enabled) # kombu_ssl_keyfile = # SSL cert file (valid only if SSL enabled) # kombu_ssl_certfile = # SSL certification authority file (valid only if SSL enabled)' # kombu_ssl_ca_certs = # IP address of the RabbitMQ installation rabbit_host = 192.168.100.20 # Password of the RabbitMQ server rabbit_password = password # Port where RabbitMQ server is running/listening rabbit_port = 5672 # User ID used for RabbitMQ connections rabbit_userid = nova # Location of a virtual RabbitMQ installation. rabbit_virtual_host = /nova # Maximum retries with trying to connect to RabbitMQ # (the default of 0 implies an infinite retry count) # rabbit_max_retries = 0 # RabbitMQ connection retry interval # rabbit_retry_interval = 1 # QPID # rpc_backend=quantum.openstack.common.rpc.impl_qpid # Qpid broker hostname # qpid_hostname = localhost # Qpid broker port # qpid_port = 5672 # Username for qpid connection # qpid_username = '' # Password for qpid connection # qpid_password = '' # Space separated list of SASL mechanisms to use for auth # qpid_sasl_mechanisms = '' # Seconds between connection keepalive heartbeats # qpid_heartbeat = 60 # Transport to use, either 'tcp' or 'ssl' # qpid_protocol = tcp # Disable Nagle algorithm # qpid_tcp_nodelay = True # ZMQ # rpc_backend=quantum.openstack.common.rpc.impl_zmq # ZeroMQ bind address. Should be a wildcard (*), an ethernet interface, or IP. # The "host" option should point or resolve to this address. # rpc_zmq_bind_address = * # ============ Notification System Options ===================== # Notifications can be sent when network/subnet/port are create, updated or deleted. # There are four methods of sending notifications, logging (via the # log_file directive), rpc (via a message queue), # noop (no notifications sent, the default) or list of them # Defined in notifier api notification_driver = quantum.openstack.common.notifier.list_notifier # default_notification_level = INFO # myhost = myhost.com # default_publisher_id = $myhost # Defined in rabbit_notifier for rpc way # notification_topics = notifications # Defined in list_notifier list_notifier_drivers = quantum.openstack.common.notifier.rabbit_notifier [QUOTAS] # resource name(s) that are supported in quota features # quota_items = network,subnet,port # default number of resource allowed per tenant, minus for unlimited # default_quota = -1 # number of networks allowed per tenant, and minus means unlimited # quota_network = 10 # number of subnets allowed per tenant, and minus means unlimited # quota_subnet = 10 # number of ports allowed per tenant, and minus means unlimited # quota_port = 50 # default driver to use for quota checks # quota_driver = quantum.quota.ConfDriver
api-paste.iniファイルにはkeystoneへのアクセスに使用する情報を記述しておく。具体的には、以下の項目について設定が必要だ。
auth_host = <keystoneが稼働しているホスト名> auth_port = <keystoneが稼働しているポート番号。デフォルトは35357> auth_protocol = <keystoneへのアクセスに利用するプロトコル。デフォルトはhttp> admin_tenant_name = <管理用テナント名> admin_user = <使用するユーザー名> admin_password = <使用するパスワード>
これらを反映させた設定ファイルの例は以下のようになる。
[composite:quantum] use = egg:Paste#urlmap /: quantumversions /v2.0: quantumapi_v2_0 [composite:quantumapi_v2_0] use = call:quantum.auth:pipeline_factory noauth = extensions quantumapiapp_v2_0 keystone = authtoken keystonecontext extensions quantumapiapp_v2_0 [filter:keystonecontext] paste.filter_factory = quantum.auth:QuantumKeystoneContext.factory [filter:authtoken] paste.filter_factory = keystone.middleware.auth_token:filter_factory auth_host = 192.168.100.20 auth_port = 35357 auth_protocol = http admin_tenant_name = service admin_user = quantum admin_password = quantum [filter:extensions] paste.filter_factory = quantum.extensions.extensions:plugin_aware_extension_middleware_factory [app:quantumversions] paste.app_factory = quantum.api.versions:Versions.factory [app:quantumapiapp_v2_0] paste.app_factory = quantum.api.v2.router:APIRouter.factory
以上の設定が完了したら、最後にserviceコマンドでquantum-serverを起動させておく。
# service quantum-server start
なお、quantum-serverはTCPの9696番ポートで待ち受けを行う。ほかのノードからこのポートにアクセスできるようファイアウォールを設定しておこう。