さくらの専用サーバと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"
        }
    }
}