Red Hat Enterprise Linux OpenStack Platform のための RabbitMQ の手動設定
1. 概要
-
Block Storage
-
Compute
-
Networking
-
Orchestration
1.1. 移行の前提条件
#openstack-service stop#service qpidd stop
#chkconfig qpidd off
2. メッセージブローカーのトラフィックを許可するためのファイアウォール設定
5672 です。
root ユーザーとしてログインして実行する必要があります。
手順 1. メッセージブローカーのトラフィックを許可するためのファイアウォール設定 (Red Hat Enterprise Linux 6 ベースのシステムの場合)
-
テキストエディターで
/etc/sysconfig/iptablesファイルを開きます。 -
このファイルに、ポート
5672で 受信接続を許可するINPUTルールを追加します。新規ルールは、トラフィックをREJECTするINPUTルールよりも前に記載する必要があります。-A INPUT -p tcp -m tcp --dport 5672 -j ACCEPT
-
/etc/sysconfig/iptablesファイルへの変更を保存します。 -
iptablesサービスを再起動して、ファイアウォールの変更を有効にします。#service iptables restart
5672 で MariaDB データベースサービスへの受信接続を許可するためのファイアウォール設定が完了しました。
3. RabbitMQ メッセージブローカーのインストールと設定
#yum install rabbitmq-server
重要
guest ユーザーは、デフォルトの guest パスワードとともに自動的に作成されます。特に IPv6 が利用可能な場合には、このデフォルトパスワードを変更することを強く推奨します。IPv6 では、RabbitMQ はネットワーク外部からアクセスが可能となる場合があります。
3.1. RabbitMQ 設定ファイルの手動作成
- /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-server サービスを立ち上げ、ブート時に起動するよう設定します。
service コマンドおよび chkconfig コマンドを使用して rabbitmq-server サービスを起動/有効化します。
#service rabbitmq-server start#chkconfig rabbitmq-server on
重要
guest ユーザーは、デフォルトの guest パスワードとともに自動的に作成されます。特に IPv6 が利用可能な場合には、このデフォルトパスワードを変更することを強く推奨します。IPv6 では、RabbitMQ はネットワーク外部からアクセスが可能となる場合があります。
#rabbitmqctl change_password guest NEW_RABBITMQ_PASS
guest ユーザーのデフォルトパスワードを変更した後には、以下の手順を実行します。
手順 2. RabbitMQ メッセージブローカーを OpenStack で使用するための設定
-
Block Storage Service には、接続先となる仮想ホストが必要です。この時点では、この目的ではホストは作成されていません。
cinderという名前の仮想ホストを作成するには、以下のコマンドを実行します。#rabbitmqctl add_vhost cinderこの新しい仮想ホストは、後で Block Storage がメッセージブローカーを使用するように設定する際に使います (セクション 5「Block Storage Service のための RabbitMQ メッセージブローカーの設定」)。仮想ホストが追加されたことを確認するには、以下のコマンドを実行します。#rabbitmqctl list_vhostsListing vhosts ... / cinder ...done. -
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_PASSCINDER_PASS、NOVA_PASS、NEUTRON_PASS、および HEAT_PASS はそれぞれ、Block Storage、Compute、Networking、および Orchestration サービス用のセキュアなパスワードに置き換えます。 -
次に、それらの各 RabbitMQ ユーザーに、全リソースに対する読み取り/書き込みのパーミッションを付与します。
#rabbitmqctl set_permissions cinder ".*" ".*" ".*"#rabbitmqctl set_permissions nova ".*" ".*" ".*"#rabbitmqctl set_permissions neutron ".*" ".*" ".*"#rabbitmqctl set_permissions heat ".*" ".*" ".*" -
各 RabbitMQ ユーザーの必要なパーミッションを設定した後には、それぞれの対応するコンポーネントを再起動します。
#openstack-service cinder restart#openstack-service nova restart#openstack-service neutron restart#openstack-service heat restart各 RabbitMQ ユーザーの対応するコンポーネントを再起動した後には、パーミッションが正しく付与されているかどうかを確認します。#rabbitmqctl list_permissionsListing permissions in vhost "/" ... cinder .* .* .* guest .* .* .* neutron .* .* .* nova .* .* .*
5. Block Storage Service のための RabbitMQ メッセージブローカーの設定
手順 3. Block Storage Service が RabbitMQ メッセージブローカーを使用するための設定
-
Block Storage Service をホストしているシステムに
rootでログインします。 -
/etc/cinder/cinder.confで RabbitMQ を RPC バックエンドとして設定します。#openstack-config --set /etc/cinder/cinder.conf \DEFAULT rpc_backend cinder.openstack.common.rpc.impl_kombu -
Block Storage Service が RabbitMQ ホストに接続するように設定します。
#openstack-config --set /etc/cinder/cinder.conf \DEFAULT rabbit_host RABBITMQ_HOSTRABBITMQ_HOST は、メッセージブローカーの IP アドレスまたはホスト名に置き換えます。 -
セクション 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 -
メッセージブローカーのポートを
5672に設定します。#openstack-config --set /etc/cinder/cinder.conf \DEFAULT rabbit_port 5672 -
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_PASScinderおよび CINDER_PASS は、 セクション 3「RabbitMQ メッセージブローカーのインストールと設定」の手順で Block Storage 用に作成した RabbitMQ のユーザー名とパスワードに置き換えます。
6. Networking Service のための RabbitMQ メッセージブローカーの設定
手順 4. Networking Service が RabbitMQ メッセージブローカーを使用するための設定
-
neutron-serverサービスをホストするシステムにrootでログインします。 -
そのシステムの
/etc/neutron/neutron.confで RabbitMQ を RPC バックエンドとして設定します。#openstack-config --set /etc/neutron/neutron.conf \DEFAULT rpc_backend neutron.openstack.common.rpc.impl_kombu -
neutron-serverサービスが RabbitMQ ホストに接続するように設定します。#openstack-config --set /etc/neutron/neutron.conf \DEFAULT rabbit_host RABBITMQ_HOSTRABBITMQ_HOST は、メッセージブローカーの IP アドレスまたはホスト名に置き換えます。 -
メッセージブローカーのポートを
5672に設定します。#openstack-config --set /etc/neutron/neutron.conf \DEFAULT rabbit_port 5672 -
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_PASSneutronおよび NEUTRON_PASS は、セクション 3「RabbitMQ メッセージブローカーのインストールと設定」の手順で Networking 用に作成した RabbitMQ のユーザー名とパスワードに置き換えます。
7. Compute Service のための RabbitMQ メッセージブローカーの設定
手順 5. Compute Service が RabbitMQ メッセージブローカーを使用するための設定
-
Compute コントローラーノードに
rootでログインします。 -
そのシステムの
/etc/nova/nova.confで RabbitMQ を RPC バックエンドとして設定します。#openstack-config --set /etc/nova/nova.conf \DEFAULT rpc_backend rabbit -
Compute Service が RabbitMQ ホストに接続するように設定します。
#openstack-config --set /etc/nova/nova.conf \DEFAULT rabbit_host RABBITMQ_HOSTRABBITMQ_HOST は、メッセージブローカーの IP アドレスまたはホスト名に置き換えます。 -
メッセージブローカーのポートを
5672に設定します。#openstack-config --set /etc/nova/nova.conf \DEFAULT rabbit_port 5672 -
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_PASSnovaおよび NOVA_PASS は、セクション 3「RabbitMQ メッセージブローカーのインストールと設定」で Compute 用に作成した RabbitMQ のユーザー名とパスワードに置き換えます。
8. Orchestration Service のための RabbitMQ メッセージブローカーの設定
手順 6. Orchestration Service が RabbitMQ メッセージブローカーを使用するための設定
-
Orchestration コントローラーノードに
rootでログインします。 -
そのシステムの
/etc/heat/heat.confで RabbitMQ を RPC バックエンドとして設定します。#openstack-config --set /etc/heat/heat.conf \DEFAULT rpc_backend cinder.openstack.common.rpc.impl_kombu -
Orchestration Service が RabbitMQ ホストに接続するように設定します。
#openstack-config --set /etc/heat/heat.conf \DEFAULT rabbit_host RABBITMQ_HOSTRABBITMQ_HOST は、メッセージブローカーの IP アドレスまたはホスト名に置き換えます。 -
メッセージブローカーのポートを
5672に設定します。#openstack-config --set /etc/heat/heat.conf \DEFAULT rabbit_port 5672 -
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_PASSheatおよび HEAT_PASS は、セクション 3「RabbitMQ メッセージブローカーのインストールと設定」で Orchestration 用に作成した RabbitMQ のユーザー名とパスワードに置き換えます。
9. RabbitMQ メッセージブローカーでの SSL の有効化
/etc/rabbitmq/rabbitmq.config 設定ファイルを使用することができます。この作業を行う前には、SSL 通信に必要な証明書をあらかじめ作成しておく必要があります。
注意
certutil を使用して必要な証明書を作成する方法について説明します。
手順 7. SSL 通信に必要な証明書の作成と追加
-
必要な証明書を保管するためのディレクトリを作成します。
#mkdir /etc/pki/rabbitmq -
証明書用のセキュアなパスワードを選択して、
/etc/pki/rabbitmq内のファイルに保存します。#echo SSL_RABBITMQ_PW > /etc/pki/rabbitmq/certpwSSL_RABBITMQ_PW は、証明書に使用するパスワードに置き換えます。このパスワードは、後ほど、必要な証明書のセキュリティ保護を強化する際に使用します。 -
証明書のディレクトリとパスワードファイルに必要なファイルモードビットを設定します。
#chmod 700 /etc/pki/rabbitmq#chmod 600 /etc/pki/rabbitmq/certpw -
/etc/pki/rabbitmq/certpw内のパスワードを使用して/etc/pki/rabbitmqに証明書データベースファイル (*.db) を作成します。#certutil -N -d /etc/pki/rabbitmq -f /etc/pki/rabbitmq/certpw -
実稼働環境では、信頼のできるサードパーティーの証明機関 (CA) を使用して証明書に署名することを推奨します。サードパーティーの CA には、証明書署名要求 (CSR) が必要となります。これは、以下のコマンドを実行すると作成することができます。
#certutil -R -d /etc/pki/rabbitmq -s "CN=RABBITMQ_HOST" \-a -f /etc/pki/rabbitmq/certpw > RABBITMQ_HOST.csrRABBITMQ_HOST は、RabbitMQ メッセージブローカーをホストするシステムの IP アドレスまたはホスト名に置き換えます。このコマンドにより、RABBITMQ_HOST.csrという名前の CSR とキーファイル (keyfile.key) が生成されます。このキーファイルは、後で RabbitMQ メッセージブローカーが SSL を使用するように設定する際に使用します。注意
一部の CA には、"CN=RABBITMQ_HOST"以外の追加の値が必要な場合があります。 -
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
/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 証明書のエクスポート
#pk12util -o <p12exportfile> -n <certname> -d <certdir> -w <p12filepwfile>#openssl pkcs12 -in <p12exportfile> -out <clcertname> -nodes -clcerts -passin pass:<p12pw>
man openssl
9.2. Message Broker と各サービス間の 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 はエクスポートされたキーファイルの絶対パスに置き換えます。
#openstack-config --set /etc/neutron/neutron.conf CONFIGFILE DEFAULT kombu_ssl_ca_certs /path/to/ca.crt
10. RabbitMQ への移行の最終段階
#openstack-service start
