さくらの専用サーバとOpenStackで作るプライベートクラウド 4ページ
Identity Service(keystone)のインストール
OpenStackの利用に必要なパッケージのインストールと設定が完了したら、いよいよOpenStackのコンポーネントをインストールしていくことになる。まず最初にインストールするのが、認証関連のサービスを提供するIdentity Service(keystone)だ。
パッケージのインストール
keystoneはopenstack-keystoneパッケージとして提供されているので、このパッケージをインストールする。また、クライアントパッケージも同時にインストールしておく。
# yum install openstack-keystone python-keystoneclient
データベースの設定
データベースの設定はopenstack-dbコマンドで行える。パスワードにはデータベースの接続に使用したいパスワードを設定する。
# openstack-db --init --service keystone --password <パスワード> Please enter the password for the 'root' MySQL user: ←MySQLのrootパスワードを入力 Verified connectivity to MySQL. Creating 'keystone' database. Updating 'keystone' database password in /etc/keystone/keystone.conf Asking openstack-keystone to sync the database. Complete!
これによりMySQLに「keystone」データベースと「keystone」ユーザーが作成される。
設定ファイルの編集
keystoneの設定ファイルは/etc/keystoneディレクトリ以下に格納されている。必要なのはメインの設定ファイルであるkeystone.confの変更だ。変更するのは以下の「admin_token」の個所となる。
[DEFAULT] #bind_host = 0.0.0.0 public_port = 5000 admin_port = 35357 #admin_token = ADMIN ←あらかじめ指定されている設定値をコメントアウト admin_token = ThisIsSampleToken20120910 ←適当なトークン文字列を指定 compute_port = 8774 verbose = True debug = True
admin_tokenで設定した文字列は、keystoneの操作時に必要な管理用文字列として使用される。この文字列はkeystoneの設定変更時に使用するため、第三者に推測されないような文字列を設定しておく必要がある。
keystoneの起動
keystone-manageコマンドを実行してデータベースに上記の設定ファイルの内容を反映させ、serviceコマンドでkeystoneを起動する。
# keystone-manage db_sync # service openstack-keystone start # chkconfig openstack-keystone on
OpenStackのユーザー作成
keystoneサービスが起動したら、keystoneコマンドを使用してOpenStackの管理に使用するためのアカウントを登録する。まず、環境変数にkeystoneサーバーにアクセスするための情報を設定しておく。
export SERVICE_TOKEN=ThisIsSampleToken20120910 export SERVICE_ENDPOINT=http://127.0.0.1:35357/v2.0/
SERVICE_TOKEN環境変数には、keystone.conf内でadmin_tokenの値として設定した文字列を設定しておく。次に、keystone tenant-createコマンドで「openStackDemo」テナントを作成する。テナントというのは、ユーザーや仮想マシン、コンポーネントなどの要素を管理するグループのようなものだ。
$ keystone tenant-create --name openstackDemo --description "Default Tenant" --enabled true +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Default Tenant | | enabled | True | | id | bf7522a74c2b4dd09b41f0ea25912748 | | name | openstackDemo | +-------------+----------------------------------+
keystone user-createコマンドでこのテナントの管理用ユーザーとして使用する「adminUser」ユーザーを作成する。このとき、–tenant_idオプションでは先のtenant-createコマンドの実行結果として表示される「id」の値を指定する。
$ keystone user-create --tenant_id bf7522a74c2b4dd09b41f0ea2591274 8 --name adminUser --pass <パスワード> --enabled true +----------+-------------------------------------------------------------------------------------------------------------------------+ | Property | Value | +----------+-------------------------------------------------------------------------------------------------------------------------+ | email | None | | enabled | True | | id | 76da1f25b02d44c8b80f9579fe3fc4d2 | | name | adminUser | | password | $6$rounds=40000$r92XYz.sKAAF9.GQ$HWxu6ls3Hknw43GhwzzmqPVEa5gY3shvrirkwrbTC4XA3/nsfjxdpqERn9ujmhKHFcIdA1CUUNl08NIyRisKM0 | | tenantId | bf7522a74c2b4dd09b41f0ea25912748 | +----------+-------------------------------------------------------------------------------------------------------------------------+
role-createコマンドで管理者用のロール「admin」を作成する。
$ keystone role-create --name admin +----------+----------------------------------+ | Property | Value | +----------+----------------------------------+ | id | 0f320cca43c9423b9243541928073af0 | | name | admin | +----------+----------------------------------+
keystone user-role-addコマンドでadminロールをadminUserに付加する。ここで、–userオプションにはuser-createコマンドの実行結果として表示される「id」の値を、–tenant_idオプションにはtenant-createコマンドの実行結果として表示される「id」の値を、–roleオプションにはrole-createコマンドの実行結果として表示される「id」の値をそれぞれ指定する。
$ keystone user-role-add --user 76da1f25b02d44c8b80f9579fe3fc4d2 --tenant_id bf7522a74c2b4dd09b41f0ea25912748 --role 0f320cca43c9423b9243541928073af0
続いて、glanceやnova、horizonなどを稼働させるためのserviceテナントを作成し、それぞれのユーザーを作成していく。それぞれの引数に与えるテナントIDやユーザーID、ロールIDは環境によって変わるので適切なものを指定してほしい。
まず、serviceテナントを作成する。
$ keystone tenant-create --name service --description "Service Tenant" --enabled true +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Service Tenant | | enabled | True | | id | 660bfdd0fcd54c84bb31cfc6d1f6b550 | | name | service | +-------------+----------------------------------+
続いてglanceおよびnovaユーザーを作成する。
$ keystone user-create --tenant_id 660bfdd0fcd54c84bb31cfc6d1f6b550 --name glance --pass <パスワード> --enabled true +----------+-------------------------------------------------------------------------------------------------------------------------+ | Property | Value | +----------+-------------------------------------------------------------------------------------------------------------------------+ | email | None | | enabled | True | | id | fefbeedd42ba4dd98a2a896bb7385c0d | | name | glance | | password | $6$rounds=40000$KhkqLWCWlCsdl6qT$jYDoYE6atH5FV/myf1hytXywEU1dwp5zX9b002ZS3IoX4uJXS/GXlA6VZ.aleNI.pw7fvjscpFIFtJ4ggVCQj0 | | tenantId | 660bfdd0fcd54c84bb31cfc6d1f6b550 | +----------+-------------------------------------------------------------------------------------------------------------------------+ $ keystone user-create --tenant_id 660bfdd0fcd54c84bb31cfc6d1f6b550 --name nova --pass <パスワード> --enabled true +----------+-------------------------------------------------------------------------------------------------------------------------+ | Property | Value | +----------+-------------------------------------------------------------------------------------------------------------------------+ | email | None | | enabled | True | | id | b381bd06036e4156acaf9158c3be1662 | | name | nova | | password | $6$rounds=40000$yljCdkvLOmFRJUzz$uJhO4xJDv4qB.gOq5.VmIBF96IFWW2z8kI9zjP1Y4J.qJj/7IIpv6HMeKkqzuP6tM9s7vovxV/9S4ruEm.GCT0 | | tenantId | 660bfdd0fcd54c84bb31cfc6d1f6b550 | +----------+-------------------------------------------------------------------------------------------------------------------------+
ユーザー一覧はkeystone user-listコマンドで確認できる。
$ keystone user-list +----------------------------------+---------+-------+-----------+ | id | enabled | email | name | +----------------------------------+---------+-------+-----------+ | 76da1f25b02d44c8b80f9579fe3fc4d2 | True | None | adminUser | | b381bd06036e4156acaf9158c3be1662 | True | None | nova | | fefbeedd42ba4dd98a2a896bb7385c0d | True | None | glance | +----------------------------------+---------+-------+-----------+
続いてglanceユーザーおよびnovaユーザーにadminロールを付加する。
$ keystone user-role-add --user fefbeedd42ba4dd98a2a896bb7385c0d --tenant_id 660bfdd0fcd54c84bb31cfc6d1f6b550 --role 0f320cca43c9423b9243541928073af0 $ keystone user-role-add --user b381bd06036e4156acaf9158c3be1662 --tenant_id 660bfdd0fcd54c84bb31cfc6d1f6b550 --role 0f320cca43c9423b9243541928073af0
なお、テナント一覧はkeystone tenant-listコマンドで確認できる。
$ keystone tenant-list +----------------------------------+---------------+---------+ | id | name | enabled | +----------------------------------+---------------+---------+ | 660bfdd0fcd54c84bb31cfc6d1f6b550 | service | True | | bf7522a74c2b4dd09b41f0ea25912748 | openstackDemo | True | +----------------------------------+---------------+---------+
ロール一覧はkeystone role-listコマンドで確認できる。
$ keystone role-list +----------------------------------+------------+ | id | name | +----------------------------------+------------+ | 0f320cca43c9423b9243541928073af0 | admin | +----------------------------------+------------+
サービスとエンドポイントの作成
keystoneではユーザーの管理だけでなく、各コンポーネントのサービスにアクセスするためのURL(エンドポイント)も管理している。これらの情報についてもあらかじめ登録しておく必要がある。
まず、keystone service-createコマンドでサービス用のデータベースエントリを作成する。必要なのは、identity(keystone)およびcompute(nova)、volume(volume)、image(glance)に関するエントリだ。
$ keystone service-create --name=keystone --type=identity --description="Keystone Identity Service" +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Keystone Identity Service | | id | f782c561f238407ebff6e2c51af5548e | | name | keystone | | type | identity | +-------------+----------------------------------+ $ keystone service-create --name=nova --type=compute --description="Nova Compute Service" +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Nova Compute Service | | id | 8e0edd993fb24d06b785b1c6f9f16110 | | name | nova | | type | compute | +-------------+----------------------------------+ $ keystone service-create --name=volume --type=volume --description="Nova Volume Service" +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Nova Volume Service | | id | 84a7bfda5d86469390bd02598465ea58 | | name | volume | | type | volume | +-------------+----------------------------------+ $ keystone service-create --name=glance --type=image --description="Glance Image Service" +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Glance Image Service | | id | e88a405a79bc416cb6ec0a710b48bec0 | | name | glance | | type | image | +-------------+----------------------------------+
作成したサービスの一覧はkeystone service-listコマンドで確認できる。
$ keystone service-list +----------------------------------+----------+--------------+---------------------------+ | id | name | type | description | +----------------------------------+----------+--------------+---------------------------+ | 84a7bfda5d86469390bd02598465ea58 | volume | volume | Nova Volume Service | | 8e0edd993fb24d06b785b1c6f9f16110 | nova | compute | Nova Compute Service | | e88a405a79bc416cb6ec0a710b48bec0 | glance | image | Glance Image Service | | f782c561f238407ebff6e2c51af5548e | keystone | identity | Keystone Identity Service | +----------------------------------+----------+--------------+---------------------------+
続いて、keystone endpoint-createコマンドでエンドポイントを作成していく。それぞれの–service_idオプションには、keystone service-listコマンドで確認できるIDを指定する。エンドポイントではリージョン名を指定できるが、ここでは「RegioneOne」というリージョン名に設定している。それぞれポート番号が異なるので注意してほしい。
まず、keystoneのエンドポイントを作成する。
$ keystone endpoint-create --region RegionOne \ > --service_id=f782c561f238407ebff6e2c51af5548e \ > --publicurl=http://192.168.100.21:5000/v2.0 \ > --internalurl=http://192.168.100.21:5000/v2.0 \ > --adminurl=http://192.168.100.21:35357/v2.0 +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | adminurl | http://192.168.100.21:35357/v2.0 | | id | 9ef64ef3fcb84456bdd7ac16374d28c9 | | internalurl | http://192.168.100.21:5000/v2.0 | | publicurl | http://192.168.100.21:5000/v2.0 | | region | RegionOne | | service_id | f782c561f238407ebff6e2c51af5548e | +-------------+----------------------------------+
nova-computeサービスのエンドポイントを作成する。
$ keystone endpoint-create --region RegionOne \ > --service_id=8e0edd993fb24d06b785b1c6f9f16110 \ > --publicurl='http://192.168.100.21:8774/v2/%(tenant_id)s' \ > --internalurl='http://192.168.100.21:8774/v2/%(tenant_id)s' \ > --adminurl='http://192.168.100.21:8774/v2/%(tenant_id)s' +-------------+---------------------------------------------+ | Property | Value | +-------------+---------------------------------------------+ | adminurl | http://192.168.100.21:8774/v2/%(tenant_id)s | | id | 05de5c6dc9d346eb9c3eece39b0839df | | internalurl | http://192.168.100.21:8774/v2/%(tenant_id)s | | publicurl | http://192.168.100.21:8774/v2/%(tenant_id)s | | region | RegionOne | | service_id | 8e0edd993fb24d06b785b1c6f9f16110 | +-------------+---------------------------------------------+
nova-volumeサービスのエンドポイントを作成する。
$ keystone endpoint-create --region RegionOne \ > --service_id=84a7bfda5d86469390bd02598465ea58 \ > --publicurl='http://192.168.100.21:8776/v1/%(tenant_id)s' \ > --internalurl='http://192.168.100.21:8776/v1/%(tenant_id)s' \ > --adminurl='http://192.168.100.21:8776/v1/%(tenant_id)s' +-------------+---------------------------------------------+ | Property | Value | +-------------+---------------------------------------------+ | adminurl | http://192.168.100.21:8776/v1/%(tenant_id)s | | id | 057bb1d67bb143e8971364ecaae6ad1e | | internalurl | http://192.168.100.21:8776/v1/%(tenant_id)s | | publicurl | http://192.168.100.21:8776/v1/%(tenant_id)s | | region | RegionOne | | service_id | 84a7bfda5d86469390bd02598465ea58 | +-------------+---------------------------------------------+
glanceサービスのエンドポイントを作成する。
$ keystone endpoint-create --region RegionOne \ > --service_id=e88a405a79bc416cb6ec0a710b48bec0 \ > --publicurl=http://192.168.100.21:9292/v1 \ > --internalurl=http://192.168.100.21:9292/v1 \ > --adminurl=http://192.168.100.21:9292/v1 +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | adminurl | http://192.168.100.21:9292/v1 | | id | 29d928e55d604d64a63de3e05022c35e | | internalurl | http://192.168.100.21:9292/v1 | | publicurl | http://192.168.100.21:9292/v1 | | region | RegionOne | | service_id | e88a405a79bc416cb6ec0a710b48bec0 | +-------------+----------------------------------+
エンドポイントの一覧はkeystone endpoint-listコマンドで確認できる。
$ keystone endpoint-list +----------------------------------+-----------+---------------------------------------------+---------------------------------------------+---------------------------------------------+ | id | region | publicurl | internalurl | adminurl | +----------------------------------+-----------+---------------------------------------------+---------------------------------------------+---------------------------------------------+ | 057bb1d67bb143e8971364ecaae6ad1e | RegionOne | http://192.168.100.21:8776/v1/%(tenant_id)s | http://192.168.100.21:8776/v1/%(tenant_id)s | http://192.168.100.21:8776/v1/%(tenant_id)s | | 05de5c6dc9d346eb9c3eece39b0839df | RegionOne | http://192.168.100.21:8774/v2/%(tenant_id)s | http://192.168.100.21:8774/v2/%(tenant_id)s | http://192.168.100.21:8774/v2/%(tenant_id)s | | 29d928e55d604d64a63de3e05022c35e | RegionOne | http://192.168.100.21:9292/v1 | http://192.168.100.21:9292/v1 | http://192.168.100.21:9292/v1 | | 9ef64ef3fcb84456bdd7ac16374d28c9 | RegionOne | http://192.168.100.21:5000/v2.0 | http://192.168.100.21:5000/v2.0 | http://192.168.100.21:35357/v2.0 | +----------------------------------+-----------+---------------------------------------------+---------------------------------------------+---------------------------------------------+
正しくインストールできているかを確認する
最後に、以上の設定が正しくできているかを確認する。テストにはcurlコマンドを使うので、こちらをインストールしておく。
# yum install curl openssl
次のようにcurlコマンドを実行し、その結果がJSON形式で表示されれば成功だ。
$ curl -d '{"auth": {"tenantName": "adminTenant", "passwordCredentials":{"username": "adminUser", "password": "<adminUserのパスワード>"}}}' -H "Content-type: application/json" http://192.168.100.21:35357/v2.0/tokens | python -mjson.tool % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 185 252 126 252 0 119 5388 2544 --:--:-- --:--:-- --:--:-- 2891 { "access": { "serviceCatalog": {}, "token": { "expires": "2012-09-12T10:39:00Z", "id": "2e2002f657a143beb3cee40441966852" }, "user": { "id": "76da1f25b02d44c8b80f9579fe3fc4d2", "name": "adminUser", "roles": [], "roles_links": [], "username": "adminUser" } } }