7.5. Networking Service の設定

7.5.1. Networking Service の認証の設定

Networking Service は、認証に Identity Service を使用するように明示的に設定する必要があります。そのためには、DHCP エージェントのホストに root でログインして、ネットワークノードに対して以下の手順を実行します。

手順7.6 Networking Service が Identity Service を使用して認証を行うための設定

  1. openstack-config コマンドで、認証ストラテジー (auth_strategy) 設定キーを keystone に設定します。
    # openstack-config --set /etc/neutron/neutron.conf \
       DEFAULT auth_strategy keystone
  2. 認証ホスト (auth_host 設定キー) を Identity サーバーの IP アドレスまたはホスト名に設定します。
    # openstack-config --set /etc/neutron/neutron.conf \
       keystone_authtoken auth_host IP
    IP は、Identity サーバーの IP アドレスまたはホスト名に置き換えます。
  3. 管理テナント名 (admin_tenant_name) 設定キーを Networking Service が使用するために作成されたテナントの名前に設定します。本ガイドでは、例に services を使用しています。
    # openstack-config --set /etc/neutron/neutron.conf \
       keystone_authtoken admin_tenant_name services
  4. 管理ユーザー名 (admin_user) 設定キーを Networking Service が使用するために作成されたユーザーの名前に設定します。本ガイドでは、例に neutron を使用しています。
    # openstack-config --set /etc/neutron/neutron.conf \
       keystone_authtoken admin_user neutron
  5. 管理者パスワード (admin_password) 設定キーを上記のステップで指定したユーザーに関連付けられたパスワードに設定します。
    # openstack-config --set /etc/neutron/neutron.conf \
       keystone_authtoken admin_password PASSWORD
Networking Service が使用する認証キーが設定され、サービスの開始時に使用されます。

7.5.2. Networking Service のための RabbitMQ メッセージブローカーの設定

Red Hat Enterprise Linux OpenStack Platform 5 では、RabbitMQ が QPid に代わるデフォルト (かつ推奨) のメッセージブローカーとなりました。RabbitMQ メッセージングサービスは、rabbitmq-server パッケージにより提供されます。
本項は、RabbitMQ メッセージブローカーの設定がすでに済んでいることを前提としています。詳しくは、以下のトピックを参照してください。

手順7.7 Networking Service が RabbitMQ メッセージブローカーを使用するための設定

  1. neutron-server サービスをホストするシステムに root でログインします。
  2. そのシステムの /etc/neutron/neutron.conf で RabbitMQ を RPC バックエンドとして設定します。
    # openstack-config --set /etc/neutron/neutron.conf \
     DEFAULT rpc_backend neutron.openstack.common.rpc.impl_kombu
  3. neutron-server サービスが RabbitMQ ホストに接続するように設定します。
    # openstack-config --set /etc/neutron/neutron.conf \
     DEFAULT rabbit_host RABBITMQ_HOST
    RABBITMQ_HOST は、メッセージブローカーの IP アドレスまたはホスト名に置き換えます。
  4. メッセージブローカーのポートを 5672 に設定します。
    # openstack-config --set /etc/neutron/neutron.conf \
     DEFAULT rabbit_port 5672
  5. Networking Service 用に作成した RabbitMQ ユーザー名とパスワードを設定します。
    # openstack-config --set /etc/neutron/neutron.conf \
     DEFAULT rabbit_userid neutron
    # openstack-config --set /etc/neutron/neutron.conf \
     DEFAULT rabbit_password NEUTRON_PASS
    neutron および NEUTRON_PASS は、「RabbitMQ メッセージブローカーのインストールと設定」の手順で Networking 用に作成した RabbitMQ のユーザー名とパスワードに置き換えます。

7.5.3. Networking Service プラグインの設定

必要なプラグインを有効にするには、追加の構成を設定する必要があります。以下の手順では、ML2、Open vSwitch (OVS)、および Linux Bridge プラグインを有効にする方法を説明します。

注記

モノリシックな Open vSwitch および linuxbridge プラグインは非推奨で、将来のリリースでは廃止される予定となっています。これらの機能は、代わりに ML2 のメカニズムに再実装されています。
OpenStack Networking プラグインは、以下に示す例のように neutron.conf で長いクラス名ではなく、指定した短い名前で参照することができます。
core_plugin = neutron.plugins.ml2.plugin:Ml2Plugin
上記の代わりに以下のように参照することができます。
core_plugin = ml2

注記

誤って空白文字を入れないように気をつけてください。空白文字によって解析エラーが発生する可能性があります。

表7.2 core_plugin

ショートネーム クラス名
bigswitch neutron.plugins.bigswitch.plugin:NeutronRestProxyV2
brocade neutron.plugins.brocade.NeutronPlugin:BrocadePluginV2
cisco neutron.plugins.cisco.network_plugin:PluginV2
embrane neutron.plugins.embrane.plugins.embrane_ovs_plugin:EmbraneOvsPlugin
hyperv neutron.plugins.hyperv.hyperv_neutron_plugin:HyperVNeutronPlugin
linuxbridge neutron.plugins.linuxbridge.lb_neutron_plugin:LinuxBridgePluginV2
midonet neutron.plugins.midonet.plugin:MidonetPluginV2
ml2 neutron.plugins.ml2.plugin:Ml2Plugin
mlnx neutron.plugins.mlnx.mlnx_plugin:MellanoxEswitchPlugin
nec neutron.plugins.nec.nec_plugin:NECPluginV2
nicira neutron.plugins.nicira.NeutronPlugin:NvpPluginV2
openvswitch neutron.plugins.openvswitch.ovs_neutron_plugin:OVSNeutronPluginV2
plumgrid neutron.plugins.plumgrid.plumgrid_plugin.plumgrid_plugin:NeutronPluginPLUMgridV2
ryu neutron.plugins.ryu.ryu_neutron_plugin:RyuNeutronPluginV2
service_plugins オプションには、複数のサービスプラグインをコンマ区切りリストで指定することができます。

表7.3 service_plugins

ショートネーム クラス名
dummy neutron.tests.unit.dummy_plugin:DummyServicePlugin
router neutron.services.l3_router.l3_router_plugin:L3RouterPlugin
firewall neutron.services.firewall.fwaas_plugin:FirewallPlugin
lbaas neutron.services.loadbalancer.plugin:LoadBalancerPlugin
metering neutron.services.metering.metering_plugin:MeteringPlugin

手順7.8 ML2 プラグインの有効化

neutron-server サービスを実行しているノードで以下のステップを実行します。
  1. openstack-neutron-ml2 パッケージをインストールします。
    # yum install openstack-neutron-ml2
  2. Networking を ML2 設定ファイル ml2_conf.ini にダイレクトするためのシンボリックリンクを作成します。
    # ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
  3. ml2_conf.ini ファイルに適切な設定オプションを追加します。使用可能なオプションは、以下にリストします。これらの設定に関する詳細は、「Modular Layer 2 (ML2) の概要」を参照してください。
    [ml2]
    type_drivers = local,flat,vlan,gre,vxlan
    mechanism_drivers = openvswitch,linuxbridge,l2population
    [agent]
    l2_population = True
    
  4. neutron.conf ファイルで、ML2 プラグインおよび L3 ルーターを有効化します。
    core_plugin = neutron.plugins.ml2.plugin.Ml2Plugin
    service_plugins = neutron.services.l3_router.l3_router_plugin.L3RouterPlugin
  5. ML2 データベースの設定については、「OpenStack Networking データベースの作成」を参照してください。
  6. Networking Service を再起動します。
    # service neutron-server restart

手順7.9 Open vSwitch プラグインの有効化

neutron-server サービスを実行しているノードで以下のステップを実行します。

注記

モノリシックな Open vSwitch プラグインは非推奨で、将来のリリースでは廃止される予定となっています。この機能は、代わりに ML2 のメカニズムに再実装されています。
  1. Networking Service によって参照される /etc/neutron/plugin.ini パスと、プラグイン固有の設定ファイル間のシンボリックリンクを作成します。
    # ln -s /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini \
       /etc/neutron/plugin.ini
  2. /etc/neutron/plugin.ini ファイルの tenant_network_type 設定キーの値を更新して、テナントのネットワークで使用する必要のあるネットワーク種別を参照するようにします。サポートされている値は、flatgrelocalvlan、および vxlan です。
    デフォルトは local ですが、この値は実際のデプロイメントでは推奨されません。
    Open vSwitch のトンネリングにより、複数のホストにわたる仮想マシンが単一のレイヤー 2 ネットワークを共有することができます。GRE および VXLAN トンネルは、Open vSwitch エンドポイントと各ホスト間のトラフィックのカプセル化のためにサポートされています。MTU サイズがエンドツーエンドで (仮想マシンの MTU を含む) 適切なサイズとなるようにしてください。
    # openstack-config --set /etc/neutron/plugin.ini \
       OVS tenant_network_type TYPE
    TYPE は、選択したテナントのネットワーク種別に置き換えます。
  3. flat または vlan ネットワークが選択されている場合、network_vlan_ranges 設定キーの値も指定する必要があります。この設定キーは物理ネットワークを VLAN の範囲にマップします。
    マッピングは、NAME:START:END の形式で指定します。NAME は物理ネットワークの名前に、START は 範囲の始点となる VLAN 識別子に、END は範囲の終点となる VLAN 識別子に置き換えます。
    # openstack-config --set /etc/neutron/plugin.ini \
       OVS network_vlan_ranges NAME:START:END
    以下の例のようにコンマ区切りリストを使用して、複数の範囲を指定することができます。
    physnet1:1000:2999,physnet2:3000:3999
  4. /etc/neutron/neutron.conf ファイルの core_plugin 設定キーの値を更新して、Open vSwitch プラグインを参照するようにします。
    # openstack-config --set /etc/neutron/neutron.conf \
       DEFAULT core_plugin \
       neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2
Linux Bridge プラグインを使用している場合には、代わりに以下の手順を実行します。

手順7.10 Linux Bridge プラグインの有効化

neutron-server サービスを実行しているノードで以下のステップを実行します。

注記

モノリシックな linuxbridge プラグインは非推奨で、将来のリリースでは廃止される予定となっています。この機能は、代わりに ML2 のメカニズムに再実装されています。
  1. Networking Service によって参照される /etc/neutron/plugin.ini パスと、プラグイン固有の設定ファイル間のシンボリックリンクを作成します。
    # ln -s /etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini \
             /etc/neutron/plugin.ini
  2. /etc/neutron/plugin.ini ファイルの tenant_network_type 設定キーを更新して、テナントのネットワークで使用する必要のあるネットワーク種別を参照するようにします。サポートされている値は、flatvlan、および local です。
    デフォルトは local ですが、この値は実際のデプロイメントでは推奨されません。
    # openstack-config --set /etc/neutron/plugin.ini \
       VLAN tenant_network_type TYPE
    TYPE は、選択したテナントのネットワーク種別に置き換えます。
  3. flat または vlan ネットワークが選択されている場合、network_vlan_ranges 設定キーの値も指定する必要があります。この設定キーは物理ネットワークを VLAN の範囲にマップします。
    マッピングは、NAME:START:END の形式で指定します。NAME は物理ネットワークの名前に、START は 範囲の始点となる VLAN 識別子に、END は範囲の終点となる VLAN 識別子に置き換えます。
    # openstack-config --set /etc/neutron/plugin.ini \
       LINUX_BRIDGE network_vlan_ranges NAME:START:END
    以下の例のようにコンマ区切りリストを使用して、複数の範囲を指定することができます。
    physnet1:1000:2999,physnet2:3000:3999
  4. /etc/neutron/neutron.conf ファイルの core_plugin 設定キーの値を更新して、Linux Bridge プラグインを参照するようにします。
    # openstack-config --set /etc/neutron/neutron.conf \
       DEFAULT core_plugin \
       neutron.plugins.linuxbridge.lb_neutron_plugin.LinuxBridgePluginV2

7.5.4. VXLAN および GRE のトンネル

オーバーレイリンクは、基礎ネットワークを介してトラフィックをトンネリングすることにより、異なるネットワーク内のインスタンスによる相互通信を可能にします。GRE および VXLAN は、サポートされている 2 つのトンネルカプセル化テクノロジーです。
GRE は確立されたカプセル化テクノロジーで、業界では一般に認められています。GRE ヘッダー (RFC 2784 および 2890) は、レイヤー 2 フレームのカプセル化を実行します。
VXLAN は 2011 年に IETF に提出され、マルチテナントのクラウドスケールネットワークの事実上の標準となることが予想されています。VXLAN は、UDP ソースポートで UDP カプセル化と乱数値を使用します。その結果、ロードバランシングに 5 タプルハッシュ計算を使用する全スイッチデバイスで等コストロードバランシングが自動的に実行されます。これにより、VXLAN でカプセル化されたトラフィックを互換性のある物理ネットワークハードウェアでロードバランシングすることが可能となります。

表7.4 VXLAN と GRE の比較

機能 VXLAN GRE
セグメンテーション 24 ビット VNI (VXLAN Network Identifier) 異なる Tunnel ID を使用
理論上のスケール上限 1600 万の一意識別子 1600 万の一意識別子
トランスポート UDP (デフォルトポート 4789) IP プロトコル 47
フィルタリング VXLAN は周知の宛先ポートで UDP を使用します。ファイアウォールとスイッチ/ルーター ACL は VXLAN トラフィックのみをブロックするよう調整することが可能です。 ACL を使用するファイアウォールおよびレイヤー 3 のスイッチとルーターは 通常、トンネルトラフィックタイプを識別できるほど深くは GRE ヘッダーを解析しません。すべての GRE を無差別にブロックする必要があります。
プロトコルオーバーヘッド IPv4 上で 50 バイト (VXLAN ヘッダー 8 バイト、IPv4 ヘッダー 20 バイト、UDP ヘッダー 8 バイト、イーサネット 14 バイト) IPv4 上で 42 バイト (GRE ヘッダー 8 バイト、IPv4 ヘッダー 20 バイト、イーサネット 14 バイト)
未知の宛先パケット、ブロードキャスト、マルチキャストの処理 VXLAN は IP マルチキャストを使用してこれらのトラフィックタイプからのフラッディングを管理します。理想としては、1 つの論理レイヤー 2 ネットワーク (VNI) を物理ネットワーク上の 1 つのマルチキャストグループアドレスに関連付けます。これには、物理データセンターネットワークでエンドツーエンドの IP マルチキャストサポートが必要です。 GRE には、これらに対処する組み込みのメカニズムはありません。このタイプのトラフィックは、単に全ノードに複製されます。
IETF の仕様 http://tools.ietf.org/html/draft-mahalingam-dutt-dcops-vxlan-01 http://tools.ietf.org/html/rfc2784.html

注記

パケットのフラグメンテーションを回避するには、VXLAN または GRE のトラフィックが通過する vSwitch およびすべての物理ネットワークデバイスで MTU を高く設定ことを推奨します。

7.5.5. Open vSwitch トンネリングの設定

トンネリングにより、物理ネットワークホスト間のトラフィックはカプセル化され、VLAN を複数のホストにまたがって定義することが可能となります。インスタンスは、同一のレイヤー 2 ネットワークを共有しているかのごとく通信を行います。Open vSwitch は、VXLAN および GRE カプセル化プロトコルを使用したトンネリングをサポートします。
Example VXLAN tunnel

図7.4 VXLAN トンネルの例

上記の図は、VXLAN トンネルで接続された別個のホスト上で実行されている 2 つのインスタンスを示しています。また、必要な物理/仮想コンポーネントも図解しています。以下の手順では、別個の Networking ホスト上で実行されている 2 つの Open vSwitch 間に VXLAN または GRE トンネルを作成する方法を説明します。

手順7.11 トンネル設定の例

  1. 参加する各ホストに OVS-BR0 という名前の仮想ブリッジを作成します。
    ovs-vsctl add-br OVS-BR0
    
  2. OVS-BR0 仮想ブリッジをリンクするトンネルを作成します。HOST1 に対して ovs-vsctl コマンドを実行してトンネルを作成し、HOST2 のブリッジにリンクします。
    GRE トンネルのコマンド:
    ovs-vsctl add-port OVS-BR0 gre1 -- set Interface gre1 type=gre options:remote_ip=192.168.1.11
    
    VXLAN トンネルのコマンド:
    ovs-vsctl add-port OVS-BR0 vxlan1 -- set Interface vxlan1 type=vxlan options:remote_ip=192.168.1.11
    
  3. HOST2 に対して ovs-vsctl コマンドを実行してトンネルを作成し、HOST1 上のブリッジにリンクします。
    GRE トンネルのコマンド:
    ovs-vsctl add-port OVS-BR0 gre1 -- set Interface gre1 type=gre options:remote_ip=192.168.1.10
    
    VXLAN トンネルのコマンド:
    ovs-vsctl add-port OVS-BR0 vxlan1 -- set Interface vxlan1 type=vxlan options:remote_ip=192.168.1.10
    
上記のステップが正常に完了すると、2 つのインスタンスがレイヤー 2 ネットワークを共有するようになります。

7.5.6. Networking Service データベース接続の設定

Networking Service によって使用されるデータベース接続文字列は、/etc/neutron/plugin.ini ファイルで定義されます。サービスを起動する前に、有効なデータベースサーバーをポイントするように更新しておく必要があります。

手順7.12 OpenStack Networking SQL データベース接続の設定

  • openstack-config コマンドで connection 設定キーの値を設定します。
    # openstack-config --set /etc/neutron/plugin.ini \
       DATABASE sql_connection mysql://USER:PASS@IP/DB
    以下を置き換えます。
    • USER: Networking Service が使用するデータベースユーザー名(通常は neutron
    • PASS: 選択したデータベースユーザーのパスワード
    • IP: データベースサーバーの IP アドレスまたはホスト名
    • DB: Networking Service で使用するために作成されるデータベースの名前 (以下の「OpenStack Networking データベースの作成」のセクションの例では ovs_neutron を使用)。

    重要

    この接続設定キーに指定する IP アドレスまたはホスト名は、neutron データベースの作成時に neutron データベースユーザーがアクセスを許可された IP アドレスまたはホスト名と一致する必要があります。また、データベースがローカルでホストされ、neutron データベースの作成時に「localhost」へのアクセス権を付与した場合には、「localost」と入力する必要があります。

7.5.7. OpenStack Networking データベースの作成

以下の手順では、Networking Service で使用するデータベースおよびデータベースユーザーを作成します。これらのステップは、データベースサーバーに root ユーザーとしてログインした状態で、neutron-server サービスを起動する前に実行する必要があります。

手順7.13 OpenStack Networking データベースの作成

  1. mysql コマンドでデータベースに接続します。
    # mysql -u root -p
  2. データベースを作成します。
    • ML2 プラグインを使用する場合には、推奨されるデータベース名は neutron_ml2 です。
    • Open vSwitch プラグインを使用する場合には、推奨されるデータベース名は ovs_neutron です。
    • Linux Bridge プラグインを使用する場合には、推奨されるデータベース名は neutron_linux_bridge です。
    以下の例では ML2 用の neutron_ml2 データベースを作成します。
    mysql> CREATE DATABASE neutron_ml2 character set utf8;
  3. neutron データベースユーザーを作成して、neutron_ml2 データベースへのアクセスを許可します。
    mysql>"GRANT ALL ON neutron_ml2.* TO 'neutron'@'%';"
  4. データベースの特権をフラッシュして、設定が即時に反映されるようにします。
    mysql> FLUSH PRIVILEGES;
  5. mysql クライアントを終了します。
    mysql> quit
  6. neutron-db-manage コマンドを実行します。
    # neutron-db-manage --config-file /usr/share/neutron/neutron-dist.conf \
       --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugin.ini upgrade head
OpenStack Networking データベース neutron_ml2 が作成されました。このデータベースには、サービスの設定中にデータが投入されます。
新規作成したデータベースを使用するためのネットワーク設定については、「Networking Service データベース接続の設定」を参照してください。
ネットワークプラグインの選択および設定については、「Networking Service プラグインの設定」を参照してください。

7.5.8. Networking Service の起動

必要な設定が完了した後には、service コマンドで Networking Service (neutron) を起動することができます。
# service neutron-server start
chkconfig コマンドで Networking Service を永続的に有効にします。
# chkconfig neutron-server on
OpenStack Networking Service が設定され、稼働しましたが、ネットワーク機能を提供するための基礎でもある、さまざまなネットワークエージェントを設定/実行するためにはさらなる操作が必要です。

重要

デフォルトでは、OpenStack Networking は IP アドレスの Classless Inter-Domain Routing (CIDR) チェックは有効化されません。これは、以前のリリースとの後方互換性を維持するためです。このようなチェックが必要な場合には、 /etc/neutron/neutron.conf ファイルで force_gateway_on_subnet 設定キーの値を True に設定します。