このエントリーをはてなブックマークに追加

4.2.3. Identity Service(Keystone)のインストール

OpenStack Identity Serviceのコード名はKeystoneです。
Keystoneはユーザ、テナント(プロジェクト)などOpenStackのコンポーネント全ての共通認証・認可を一括管理するコンポーネントです。
Keystoneをインストールすることによって各々のコンポーネントで認証・認可を行う必要がなくなります。

4.2.3.1. Keystoneのダウンロード

Keystoneのソースをダウンロードします。
またKeystoneAPIを利用するためのクライアントもダウンロードしておきます。
ダウンロードしたバージョンはMasterになっているためバージョンはどちらもEssexにします。

4.2.3.1.1. Keystoneのソースをダウンロード

$ sudo git clone git://github.com/openstack/keystone /opt/keystone
$ sudo git clone git://github.com/openstack/python-keystoneclient /opt/python-keystoneclient

4.2.3.1.2. KeystoneのバージョンをEssexに固定

$ cd /opt/keystone ; sudo git checkout -b essex origin/stable/essex
$ cd /opt/python-keystoneclient ; sudo git checkout -b essex refs/tags/2012.1

4.2.3.1.3. ワークアラウンド

そのうち必要にならないようになるはずです。
あとprettytableのバージョン依存があります。ソースにまだ反映されていないので書き換えておきます。
OpenStackグループの方に教えてもらいました。ありがとうございます。
$ sudo sed -i 's/prettytable/prettytable==0.5/' /opt/python-keystoneclient/tools/pip-requires
$ sudo sed -i 's/prettytable/prettytable==0.5/' /opt/python-keystoneclient/setup.py

4.2.3.2. Keystoneのインストール

ダウンロードしたKeystoneとクライアントをインストールします。
pipでパッケージの依存関係を解決します。
$ sudo pip install -r /opt/keystone/tools/pip-requires
$ cd /opt/keystone && sudo python setup.py install
$ cd /opt/python-keystoneclient && sudo python setup.py install

4.2.3.3. Keystoneが利用するユーザ、ディレクトリなどの作成

ソースからインストールする場合はユーザやディレクトリを作成する必要がありますので作成します。
$ sudo useradd keystone -m -d /var/lib/keystone -s /bin/false
$ sudo mkdir /etc/keystone
$ sudo mkdir /var/log/keystone
$ sudo chown keystone:keystone /var/log/keystone

4.2.3.4. Keystoneのコンフィグ

keystoneのコンフィグを行います。
バックアップをディレクトリごととっておきましょう。
$ sudo cp -a /opt/keystone/etc /etc/keystone
$ sudo cp -a /etc/keystone /etc/keystone_bak
DEFAULT、CATALOG、SQL、TOKEN、EC2の5セクションの変更が必要です。
またバージョンEssexからはCatalogはファイルで設定するのが推奨になりましたのでそのままでもデータベース経由で利用可能なのですが、推奨設定のファイルを利用する形態で設定します。
SQLの接続先、ユーザ名、パスワードは適切なものを設定するようにして下さい。

4.2.3.4.1. DEFAULTセクションの変更

[DEFUALT]セクションは、 admin_token とログ部分の変更を行います。

変更前

[DEFAULT]
#bind_host = 0.0.0.0
public_port = 5000
admin_port = 35357
admin_token = ADMIN
compute_port = 8774
verbose = True
debug = True

変更後

[DEFAULT]
#bind_host = 0.0.0.0
public_port = 5000
admin_port = 35357
admin_token = 999888777666
compute_port = 8774
verbose = True
debug = True
log_file = /var/log/keystone/keystone.log
#log_config = /etc/keystone/logging.conf

4.2.3.4.2. sqlセクションの変更

[sql]セクションは、 keystoneのデータベースに接続するためのデータベースをsqliteからMySQLへ変更しています。
パスワードは password としていますが適切なものを設定して下さい。

変更前

[sql]
connection = sqlite:///keystone.db

idle_timeout = 200

変更後

[sql]
connection = mysql://keystone:password@stack01/keystone
idle_timeout = 200

4.2.3.4.3. catalogセクションの変更

[catalog]セクションは、 エンドポイントの設定がEssexからはファイルベースがデフォルトになりました。
そのためdriverをsqlからファイルベースに変更します。

変更前

[catalog]
driver = keystone.catalog.backends.sql.Catalog
template_file = ./etc/default_catalog.templates

変更後

[catalog]
driver = keystone.catalog.backends.templated.TemplatedCatalog
template_file = /etc/keystone/default_catalog.templates

4.2.3.4.4. tokenセクションの変更

[token]セクションは、デフォルトでKVSを利用するものをSQLベースに変更します。

変更前

[token]
driver = keystone.token.backends.kvs.Token

変更後

[token]
driver = keystone.token.backends.sql.Token

4.2.3.4.5. ec2セクションの変更

[ec2]セクションは、デフォルトでKVSを利用するものをSQLベースに変更します。

変更前

[ec2]
driver = keystone.contrib.ec2.backends.kvs.Ec2

変更後

[ec2]
driver = keystone.contrib.ec2.backends.sql.Ec2

以上でコンフィグの設定は終わりです。念の為差分を記述しておきます。

$ sudo diff keystone_bak/keystone.conf keystone/keystone.conf
5c5
< admin_token = ADMIN
---
> admin_token = 999888777666
8a9
> log_file = /var/log/keystone/keystone.log
20c21
< connection = sqlite:///keystone.db
---
> connection = mysql://keystone:password@stack01/keystone
38c39
< template_file = ./etc/default_catalog.templates
---
> template_file = /etc/keystone/default_catalog.templates
41c42
< driver = keystone.token.backends.kvs.Token
---
> driver = keystone.token.backends.sql.Token
50c51
< driver = keystone.contrib.ec2.backends.kvs.Ec2
---
> driver = keystone.contrib.ec2.backends.sql.Ec2

4.2.3.5. データベースの作成

Keystoneが利用するデータベースを作成します。
Keystoneのデータベースを設定するためのユーザ、パスワードはMySQLをインストールした時のものですので注意して下さい。
データベース名keystone、ユーザ名keystone、パスワードはpasswordとしているため適切なものへ変更してください。
ホスト名も同様にstack01としていますので変更が必要であればおこなって下さい。
$ mysql -u root -pnova -e "create database keystone;"
$ mysql -u root -pnova -e "grant all privileges on keystone.* to 'keystone'@'%' identified by 'password';"
$ mysql -u root -pnova -e "grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'password';"
$ mysql -u root -pnova -e "grant all privileges on keystone.* to 'keystone'@'stack01' identified by 'password';"
$ sudo keystone-manage db_sync

4.2.3.6. プロセスの起動

Keystoneを起動します。がソースからのインストールの場合は起動スクリプトがありませんので用意します。

4.2.3.6.1. 起動スクリプトの用意

$ cat << 'KEYSTONE_INIT' | sudo tee /etc/init/keystone.conf > /dev/null
description "Keystone API server"
author "Soren Hansen <soren@linux2go.dk>"

start on (local-filesystems and net-device-up IFACE!=lo)
stop on runlevel [016]

respawn

exec su -s /bin/sh -c "exec keystone-all" keystone
KEYSTONE_INIT

4.2.3.6.2. プロセスの起動

作成した起動スクリプトを利用してKeystoneを起動します。

$ sudo stop keystone ; sudo start keystone

4.2.3.7. データの作成

KeystoneにOpenStackで利用するサービス、サービスに対するユーザ、ロールの設定を行います。
ここではサンプルのシェルを利用して作成します。
実際には環境にあった設定を利用したシェルの作成などが必要かも知れません。
後でSwiftを利用する際にはコマンドで追加する手順を記述しますので参考にして下さい。
サンプルを利用はしますがサンプルへ最低限の設定を行います。
複数台構築することを想定してローカルホストの設定になっている箇所をControllerNodeのホスト名へ変更しておきます。
サンプルデータはコンフィグと違う場所にあるためオリジナルはそのままにして実行します。
secreteとなっているパスワードは変更しておきましょう。
ここではpasswordとしています。
またこのパスワードはNovaやGlanceでも後で設定するものと同じである必要がありますので注意して下さい。
サンプルシェルを利用するための環境変数を先に設定しています。
コンフィグに設定したものに合わせる必要がありますので変更していたら以下の変数も適宜変更して下さい。
$ export OS_USERNAME=admin
$ export OS_PASSWORD=password
$ export OS_TENANT_NAME=admin
$ export OS_AUTH_URL=http://localhost:5000/v2.0/
$ cd /usr/local/src ; sudo cp -a /opt/keystone/tools/sample_data.sh .
$ sudo sed -i "s/127.0.0.1/$NOVA_CONTOLLER_HOSTNAME/" /usr/local/src/sample_data.sh
$ sudo sed -i "s/localhost/$NOVA_CONTOLLER_HOSTNAME/" /usr/local/src/sample_data.sh
$ sudo sed -i "66s/secrete/$ADMIN_PASSWORD/" /usr/local/src/sample_data.sh
$ sudo /usr/local/src/sample_data.sh

4.2.3.8. 設定確認

実際にデータが作成されていることを確認しましょう。
ユーザがkeystoneを操作するにはオプションを付与する必要があります。
操作するテナント名、テナントに対するユーザ名、パスワード、エンドポイントを設定する必要があります。
エンドポイントとは、APIを利用するための接続先であるURLのことです。
OpenStackの各コンポーネントはそれぞれエンドポイントを持つことになります。
ここではKeystoneのためのエンドポイントを環境変数に設定します。
エンドポイントにはパブリックURL、インターナルURL、管理用URLの3種類があります。
エンドポイントの種類 概要
パブリックURL エンドユーザがアクセスするためのURL
インターナルURL LAN経由でアクセス可能なユーザのためのURL
管理用URL 管理者用がアクセスするためのURL
作成されたものをlistコマンドでそれぞれ確認してみます。
確認するには環境変数の設定が必要ですのでログインしなおしたりしている場合は再度設定しておいて下さい。
エンドポイント、サービスにもlistコマンドが用意されていますが実行すると501エラーが帰ってきます。
これは、データベースでなくファイルを利用する設定を行ったためですので問題ありません。
テナント、テナントに対するユーザとロール、AmazonAPIを利用するユーザ一覧を確認してみましょう。
$ keystone tenant-list
+----------------------------------+--------------------+---------+
|                id                |        name        | enabled |
+----------------------------------+--------------------+---------+
| 5b4943aa535b42208bb76d3c293061db | admin              | True    |
| 93d40d501e754636be102cafb37ae5f7 | invisible_to_admin | True    |
| c7890b534d2a4f4185d8932f13fda742 | service            | True    |
| d7bad2ca93f34a4199149c678cca6556 | demo               | True    |
+----------------------------------+--------------------+---------+

$ keystone user-list
+----------------------------------+---------+-------------------+-------+
|                id                | enabled |       email       |  name |
+----------------------------------+---------+-------------------+-------+
| 15711bb23219482a8e73545159a013f3 | True    | admin@example.com | demo  |
| 8c570c4d78c0490d919123b2d101d607 | True    | admin@example.com | admin |
+----------------------------------+---------+-------------------+-------+

$ keystone role-list
+----------------------------------+----------------------+
|                id                |         name         |
+----------------------------------+----------------------+
| 196a50327d0a4f1f83d403a088bf85eb | KeystoneServiceAdmin |
| 45c61c4b024a47bbaaf6773885ed2b7d | netadmin             |
| 6edf2e35986f4ddfba52fbb355f39405 | admin                |
| 7d0a61a167c54e8397e821b0905970ae | Member               |
| d1ea30b18d534a5c8d93d8400bc8d1e4 | KeystoneAdmin        |
| dbfe94031313440380a41fb10d618ef8 | sysadmin             |
+----------------------------------+----------------------+

$ keystone ec2-credentials-list
+--------+----------------------------------+----------------------------------+
| tenant |              access              |              secret              |
+--------+----------------------------------+----------------------------------+
| admin  | 288633637a1f4819b0a72f2b1f28d73e | 4adc970e9c334608839112f1565e1910 |
+--------+----------------------------------+----------------------------------+
Keystoneのインストール、設定はここで終了です。
SwiftやQauntumのインストールなどのコンポーネントを追加する際はサンプルシェルでなくコマンドで追加します。
サンプルシェルでなく独自でシェルを作成してテナントやユーザを作成する場合はそちらを参考にして作成して下さい。