Translated message

A translation of this page exists in English.

Red Hat Enterprise Linux OpenStack Platform のための RabbitMQ の手動設定

更新 -


1. 概要

全 OpenStack クラウドサービスをデプロイするには、稼働中のメッセージブローカーを以下の OpenStack コンポーネントに設定する必要があります。
  • Block Storage
  • Compute
  • Networking
  • Orchestration
Red Hat Enterprise Linux OpenStack Platform 5 では、デフォルトのメッセージブローカーは RabbitMQ です。


1.1. 移行の前提条件

QPid から RabbitMQ を移行する場合には、まず最初に OpenStack サービスを QPid とともにシャットダウンする必要があります。
# openstack-service stop
# service qpidd stop
ブート時に QPid が起動しないように設定します。
# chkconfig qpidd off


2. メッセージブローカーのトラフィックを許可するためのファイアウォール設定

メッセージブローカーをインストールおよび設定する前には、使用するポートで受信接続を許可しておく必要があります。メッセージブローカー (AMQP) のトラフィック用のデフォルトポートは 5672 です。
このアクセスを許可するには、ファイアウォール設定を変更して、必要なポートでネットワークトラフィックを許可する必要があります。手順はすべて、サーバーに root ユーザーとしてログインして実行する必要があります。


手順 1. メッセージブローカーのトラフィックを許可するためのファイアウォール設定 (Red Hat Enterprise Linux 6 ベースのシステムの場合)

  1. テキストエディターで /etc/sysconfig/iptables ファイルを開きます。
  2. このファイルに、ポート 5672 で 受信接続を許可する INPUT ルールを追加します。新規ルールは、トラフィックを REJECT する INPUT ルールよりも前に記載する必要があります。
    -A INPUT -p tcp -m tcp --dport 5672  -j ACCEPT
  3. /etc/sysconfig/iptables ファイルへの変更を保存します。
  4. iptables サービスを再起動して、ファイアウォールの変更を有効にします。
    # service iptables restart
ポート 5672 で MariaDB データベースサービスへの受信接続を許可するためのファイアウォール設定が完了しました。


3. RabbitMQ メッセージブローカーのインストールと設定

Red Hat Enterprise Linux OpenStack Platform 5 では、RabbitMQ が QPid に代わるデフォルト (かつ推奨) のメッセージブローカーとなりました。RabbitMQ メッセージングサービスは、rabbitmq-server パッケージにより提供されます。
RabbitMQ をインストールするには、以下のコマンドを実行します。
# yum install rabbitmq-server

重要

rabbitmq-server パッケージのインストール時には、RabbitMQ サービスの guest ユーザーは、デフォルトの guest パスワードとともに自動的に作成されます。特に IPv6 が利用可能な場合には、このデフォルトパスワードを変更することを強く推奨します。IPv6 では、RabbitMQ はネットワーク外部からアクセスが可能となる場合があります。
guest パスワードは、rabbitmq-server サーバーの起動後に変更することができます。詳しくは セクション 2「RabbitMQ メッセージブローカーの起動」を参照してください。


3.1. RabbitMQ 設定ファイルの手動作成

RabbitMQ パッケージを手動でインストールする場合には、必須の RabbitMQ 設定ファイルは作成されません。これは既知の問題で、次回の更新で修正される予定です。
この問題を回避するには、必須の RabbitMQ 設定ファイルを 2 つ手動で作成します。これらのファイルと必要なデフォルトのコンテンツは以下のとおりです。
/etc/rabbit/rabbitmq.config
% This file managed by Puppet
% Template Path: rabbitmq/templates/rabbitmq.config
[
  {rabbit, [
    {default_user, <<"guest">>},
    {default_pass, <<"guest">>}
  ]},
  {kernel, [
    
  ]}
].
% EOF
/etc/rabbit/rabbitmq-env.conf
RABBITMQ_NODE_PORT=5672


4. RabbitMQ メッセージブローカーの起動

RabbitMQ メッセージブローカーをインストールし、メッセージブローカーのトラフィックを受け入れるためのファイアウォール設定を行った後には、rabbitmq-server サービスを立ち上げ、ブート時に起動するよう設定します。
Red Hat Enterprise Linux 6 システムの場合には、service コマンドおよび chkconfig コマンドを使用して rabbitmq-server サービスを起動/有効化します。
# service rabbitmq-server start
# chkconfig rabbitmq-server on

重要

rabbitmq-server パッケージのインストール時には、RabbitMQ サービスの guest ユーザーは、デフォルトの guest パスワードとともに自動的に作成されます。特に IPv6 が利用可能な場合には、このデフォルトパスワードを変更することを強く推奨します。IPv6 では、RabbitMQ はネットワーク外部からアクセスが可能となる場合があります。
RabbitMQ のデフォルトのゲストパスワードを変更するには、以下のコマンドを実行します。
# rabbitmqctl change_password guest NEW_RABBITMQ_PASS
NEW_RABBITMQ_PASS は、よりセキュアなパスワードに置き換えます。
RabbitMQ を立ち上げて guest ユーザーのデフォルトパスワードを変更した後には、以下の手順を実行します。


手順 2. RabbitMQ メッセージブローカーを OpenStack で使用するための設定

  1. Block Storage Service には、接続先となる仮想ホストが必要です。この時点では、この目的ではホストは作成されていません。cinder という名前の仮想ホストを作成するには、以下のコマンドを実行します。
    # rabbitmqctl add_vhost cinder
    この新しい仮想ホストは、後で Block Storage がメッセージブローカーを使用するように設定する際に使います (セクション 5「Block Storage Service のための RabbitMQ メッセージブローカーの設定」)。仮想ホストが追加されたことを確認するには、以下のコマンドを実行します。
    # rabbitmqctl list_vhosts
    Listing vhosts ...
    /
    cinder
    ...done.
  2. Block Storage、Compute、Networking、および Orchestration サービス用の RabbitMQ ユーザーアカウントを作成します。
    # rabbitmqctl add_user cinder CINDER_PASS
    # rabbitmqctl add_user nova NOVA_PASS
    # rabbitmqctl add_user neutron NEUTRON_PASS
    # rabbitmqctl add_user heat HEAT_PASS
    CINDER_PASSNOVA_PASSNEUTRON_PASS、および HEAT_PASS はそれぞれ、Block Storage、Compute、Networking、および Orchestration サービス用のセキュアなパスワードに置き換えます。
  3. 次に、それらの各 RabbitMQ ユーザーに、全リソースに対する読み取り/書き込みのパーミッションを付与します。
    # rabbitmqctl set_permissions cinder ".*" ".*" ".*"
    # rabbitmqctl set_permissions nova ".*" ".*" ".*"
    # rabbitmqctl set_permissions neutron ".*" ".*" ".*"
    # rabbitmqctl set_permissions heat ".*" ".*" ".*"
  4. 各 RabbitMQ ユーザーの必要なパーミッションを設定した後には、それぞれの対応するコンポーネントを再起動します。
    # openstack-service cinder restart
    # openstack-service nova restart
    # openstack-service neutron restart
    # openstack-service heat restart
    各 RabbitMQ ユーザーの対応するコンポーネントを再起動した後には、パーミッションが正しく付与されているかどうかを確認します。
    # rabbitmqctl list_permissions
       Listing permissions in vhost "/" ...
       cinder   .*  .*  .*
       guest    .*  .*  .*
       neutron  .*  .*  .*
       nova .*  .*  .*
    


5. Block Storage Service のための RabbitMQ メッセージブローカーの設定

Red Hat Enterprise Linux OpenStack Platform 5 では、RabbitMQ が QPid に代わるデフォルト (かつ推奨) のメッセージブローカーとなりました。RabbitMQ メッセージングサービスは、rabbitmq-server パッケージにより提供されます。


手順 3. Block Storage Service が RabbitMQ メッセージブローカーを使用するための設定

  1. Block Storage Service をホストしているシステムに root でログインします。
  2. /etc/cinder/cinder.conf で RabbitMQ を RPC バックエンドとして設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
     DEFAULT rpc_backend cinder.openstack.common.rpc.impl_kombu
  3. Block Storage Service が RabbitMQ ホストに接続するように設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
     DEFAULT rabbit_host RABBITMQ_HOST
    RABBITMQ_HOST は、メッセージブローカーの IP アドレスまたはホスト名に置き換えます。
  4. セクション 4「RabbitMQ メッセージブローカーの起動」で Block Storage Service 専用に cinder という名前の仮想ホストを作成しました。Block Storage Service がこの仮想ホストに接続するように設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
     DEFAULT rabbit_virtual_host cinder

    注意

    他のデプロイメントで、Block Storage Service 専用に異なる名前の仮想ホストがすでに作成されている可能性があります。既存の仮想ホストの一覧を表示するには、RabbitMQ サーバーで次のコマンドを実行してください。
    # rabbitmqctl list_vhosts
  5. メッセージブローカーのポートを 5672 に設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
     DEFAULT rabbit_port 5672
  6. Block Storage Service 用に作成した RabbitMQ ユーザー名とパスワードを設定します。
    # openstack-config --set /etc/cinder/cinder.conf \
     DEFAULT rabbit_userid cinder
    # openstack-config --set /etc/cinder/cinder.conf \
     DEFAULT rabbit_password CINDER_PASS
    cinder および CINDER_PASS は、 セクション 3「RabbitMQ メッセージブローカーのインストールと設定」の手順で Block Storage 用に作成した RabbitMQ のユーザー名とパスワードに置き換えます。


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

Red Hat Enterprise Linux OpenStack Platform 5 では、RabbitMQ が QPid に代わるデフォルト (かつ推奨) のメッセージブローカーとなりました。RabbitMQ メッセージングサービスは、rabbitmq-server パッケージにより提供されます。


手順 4. 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 は、セクション 3「RabbitMQ メッセージブローカーのインストールと設定」の手順で Networking 用に作成した RabbitMQ のユーザー名とパスワードに置き換えます。


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

Red Hat Enterprise Linux OpenStack Platform 5 では、RabbitMQ が QPid に代わるデフォルト (かつ推奨) のメッセージブローカーとなりました。RabbitMQ メッセージングサービスは、rabbitmq-server パッケージにより提供されます。


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

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


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

Red Hat Enterprise Linux OpenStack Platform 5 では、RabbitMQ が QPid に代わるデフォルト (かつ推奨) のメッセージブローカーとなりました。RabbitMQ メッセージングサービスは、rabbitmq-server パッケージにより提供されます。


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

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


9. RabbitMQ メッセージブローカーでの SSL の有効化

RabbitMQ メッセージブローカーには SSL 機能が組み込まれており、トラフィックのセキュリティ保護に使用することができます。RabbitMQ で SSL を設定するには、/etc/rabbitmq/rabbitmq.config 設定ファイルを使用することができます。この作業を行う前には、SSL 通信に必要な証明書をあらかじめ作成しておく必要があります。

注意

メッセージブローカーとの SSL 通信は、OpenStack サービスが正常に機能するために有効化する必要があるわけではありませんが、特に実稼働環境におけるセキュリティのために SSL を有効化することを推奨します。
以下の手順では、certutil を使用して必要な証明書を作成する方法について説明します。


手順 7. SSL 通信に必要な証明書の作成と追加

  1. 必要な証明書を保管するためのディレクトリを作成します。
    # mkdir /etc/pki/rabbitmq
  2. 証明書用のセキュアなパスワードを選択して、/etc/pki/rabbitmq 内のファイルに保存します。
    # echo SSL_RABBITMQ_PW > /etc/pki/rabbitmq/certpw
    SSL_RABBITMQ_PW は、証明書に使用するパスワードに置き換えます。このパスワードは、後ほど、必要な証明書のセキュリティ保護を強化する際に使用します。
  3. 証明書のディレクトリとパスワードファイルに必要なファイルモードビットを設定します。
    # chmod 700 /etc/pki/rabbitmq
    # chmod 600 /etc/pki/rabbitmq/certpw
  4. /etc/pki/rabbitmq/certpw 内のパスワードを使用して /etc/pki/rabbitmq に証明書データベースファイル (*.db) を作成します。

    # certutil -N -d /etc/pki/rabbitmq -f /etc/pki/rabbitmq/certpw
  5. 実稼働環境では、信頼のできるサードパーティーの証明機関 (CA) を使用して証明書に署名することを推奨します。サードパーティーの CA には、証明書署名要求 (CSR) が必要となります。これは、以下のコマンドを実行すると作成することができます。
    # certutil -R -d /etc/pki/rabbitmq -s "CN=RABBITMQ_HOST" \
     -a -f /etc/pki/rabbitmq/certpw > RABBITMQ_HOST.csr
    RABBITMQ_HOST は、RabbitMQ メッセージブローカーをホストするシステムの IP アドレスまたはホスト名に置き換えます。このコマンドにより、RABBITMQ_HOST.csr という名前の CSR とキーファイル (keyfile.key) が生成されます。このキーファイルは、後で RabbitMQ メッセージブローカーが SSL を使用するように設定する際に使用します。

    注意

    一部の CA には、"CN=RABBITMQ_HOST" 以外の追加の値が必要な場合があります。
  6. RABBITMQ_HOST.csr をサードパーティの CA に提供して署名を受けます。CA は署名済みの証明書 (server.crt) と CA ファイル (ca.crt) を提供します。これらのファイルを証明書のデータベースに追加します。
    # certutil -A -d /etc/pki/rabbitmq -n RABBITMQ_HOST -f /etc/pki/rabbitmq/certpw \
     -t u,u,u -a -i /path/to/server.crt
    # certutil -A -d /etc/pki/rabbitmq -n "Your CA certificate" \
     -f /etc/pki/rabbitmq/certpw -t CT,C,C -a -i /path/to/ca.crt
また、認証局がない場合には、以下のコマンドを実行して自己署名証明書とキーファイルを作成することも可能です。
# certutil -S -d /etc/pki/rabbitmq -n RABBITMQ_HOST -s "CN=RABBITMQ_HOST" \
 -t "CT,," -x -f /etc/pki/rabbitmq/certpw -z /usr/bin/certutil
必要な証明書とキーファイルを作成した後には、RabbitMQ メッセージブローカーがそれらの証明書を使用してセキュアな通信を行うように設定することができます。そのためには、/etc/rabbitmq/rabbitmq.config 設定ファイルに以下のセクションを追加します。
[
  {rabbit, [
     {ssl_listeners, [5671]},
     {ssl_options, [{cacertfile,"/path/to/ca.crt"},
                    {certfile,"/path/to/server.crt"},
                    {keyfile,"/path/to/keyfile.key"},
                    {verify,verify_peer},
                    {fail_if_no_peer_cert,false}]}
   ]}
].

注意

自己署名証明書を使用する場合には、以下の文字列は省略してください。
{cacertfile,"/path/to/ca.crt"},


9.1. クライアント用 SSL 証明書のエクスポート

サーバーで SSL を有効にする場合には、セキュアな接続を確立するために、クライアントにその SSL 証明書のコピーが必要です。
以下のコマンド例は、メッセージブローカーの証明書データベースからのクライアント用証明書と秘密鍵をエクスポートするのに使用することができます。
# pk12util -o <p12exportfile> -n <certname> -d <certdir> -w <p12filepwfile>
# openssl pkcs12 -in <p12exportfile> -out <clcertname> -nodes -clcerts -passin pass:<p12pw>
SSL コマンドとオプションについてのさらに詳しい情報は、OpenSSL のマニュアル を参照してください。Red Hat Enterprise Linux では、次のコマンドを入力してください: man openssl


9.2. Message Broker と各サービス間の SSL 通信の有効化

必要な証明書とキーが揃ったら、Block Storage、Netorking、Compute、および Orchestration の各ホストから以下のコマンドを実行して、メッセージブローカーとの SSL 通信を有効化します。
# openstack-config --set CONFIGFILE DEFAULT rabbit_use_ssl True
# openstack-config --set CONFIGFILE DEFAULT kombu_ssl_certfile /path/to/client.crt
# openstack-config --set CONFIGFILE DEFAULT kombu_ssl_keyfile /path/to/clientkeyfile.key
  • CONFIGFILE は、以下にあげる各サービスの対応する設定ファイルに置き換えます。
    • Block Storage: /etc/cinder/cinder.conf
    • Networking: /etc/neutron/neutron.conf
    • Compute: /etc/nova/nova.conf
    • Orchestration: /etc/heat/heat.conf
  • /path/to/client.crt はエクスポートされたクライアント証明書の絶対パスに置き換えます。
  • /path/to/clientkeyfile.key はエクスポートされたキーファイルの絶対パスに置き換えます。
証明書がサードパーティーの認証機関 (CA) によって署名されている場合には、各サービスのホストで次のコマンドを実行する必要もあります。
# openstack-config --set /etc/neutron/neutron.conf CONFIGFILE DEFAULT kombu_ssl_ca_certs /path/to/ca.crt
/path/to/ca.crt は、サードパーティー CA によって提供された CA ファイルの絶対パスに置き換えます (詳しくは、セクション 9「RabbitMQ メッセージブローカーでの SSL の有効化」を参照)。


10. RabbitMQ への移行の最終段階

RabbitMQ への移行作業の一環として、セクション 1.1「移行の前提条件」 の手順に従って OpenStack をシャットダウンしているはずです。RabbitMQ メッセージブローカーへの移行が終了した後には、OpenStack を再起動することができます。
# openstack-service start