Keystoneのインストールと設定(コントローラーノード)
各サービス間の連携時に使用する認証サービスKeystoneのインストールと設定を行います。
データベースを作成
MariaDBにKeystoneで使用するデータベースを作成しアクセス権を付与します。
# mysql ← MariaDBにログイン
MariaDB [(none)]> CREATE DATABASE keystone;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'password';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'password';
MariaDB [(none)]> quit
データベースの確認
MariaDBにkeystoneユーザーでログインしデータベースの閲覧が可能であることを確認します。
controller# mysql -u keystone -p
Enter password: ← MariaDBのkeystoneパスワードpasswordを入力
...
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| keystone |
+--------------------+
パッケージのインストール
aptコマンドでkeystoneおよび必要なパッケージをインストールします。
controller# apt install keystone apache2 libapache2-mod-wsgi
Keystoneの設定変更
keystoneの設定ファイルを変更します。
controller# vi /etc/keystone/keystone.conf
...
[database]
#connection = sqlite:////var/lib/keystone/keystone.db ← 既存設定をコメントアウト
connection = mysql+pymysql://keystone:password@controller/keystone ← 追記
...
[token]
...
provider = fernet ← 追記
次のコマンドで正しく設定を行ったか確認します。
controller# less /etc/keystone/keystone.conf | egrep -v "^\s*$|^\s*#"
データベースに展開
controller# su -s /bin/sh -c "keystone-manage db_sync" keystone
Fernetキーの初期化
keystone-manageコマンドを実行してFernetキーを初期化します。
controller# keystone-manage fernet_setup --keystone-user keystone \
--keystone-group keystone
controller# keystone-manage credential_setup --keystone-user keystone \
--keystone-group keystone
Identityサービスのデプロイ
次のコマンドを実行してIdentityサービスをデプロイします。--bootstrap-password
で、Keystoneのadminユーザーに設定するパスワードを指定します。
controller# keystone-manage bootstrap --bootstrap-password password \
--bootstrap-admin-url http://controller:35357/v3/ \
--bootstrap-internal-url http://controller:35357/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne
Apache Webサーバーの設定
- apache2.confに項目ServerNameを追加して、controllerノードのホスト名を設定します。
controller# vi /etc/apache2/apache2.conf
...
# Global configuration
#
ServerName controller
...
サービスの再起動と不要DBの削除
- Apache Webサーバーを再起動します。
controller# service apache2 restart
- パッケージのインストール時に作成される不要なSQLiteファイルを削除します。
controller# rm /var/lib/keystone/keystone.db
サービスとAPIエンドポイントの作成
以下のコマンドでサービスとAPIエンドポイントを設定します。
- 環境変数の設定
# vi tmp-openrc.sh
- スクリプトを作成
#!/bin/bash
export OS_USERNAME=admin
export OS_PASSWORD=password
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
前の手順でKeystoneのadminユーザーに設定したパスワードをOS_PASSWORD
に指定します。
- スクリプトをシステムに適用
# source tmp-openrc.sh
- サービスの作成
controller# openstack project create --domain default \
--description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | default |
| enabled | True |
| id | 24ac7f19cd944f4cba1d77469b2a73ed |
| is_domain | False |
| name | service |
| parent_id | default |
+-------------+----------------------------------+
プロジェクトとユーザー、ロールの作成
- demoプロジェクトの作成
controller# openstack project create --domain default \
--description "Demo Project" demo
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | default |
| enabled | True |
| id | 231ad6e7ebba47d6a1e57e1cc07ae446 |
| is_domain | False |
| name | demo |
| parent_id | default |
+-------------+----------------------------------+
- demoユーザーの作成
controller# openstack user create --domain default \
--password-prompt demo
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| domain_id | default |
| enabled | True |
| id | aeda23aa78f44e859900e22c24817832 |
| name | demo |
| password_expires_at | None |
+---------------------+----------------------------------+
- userロールの作成
controller# openstack role create user
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | 997ce8d05fc143ac97d83fdfb5998552 |
| name | user |
+-----------+----------------------------------+
- userロールをdemoプロジェクトとdemoユーザーに追加
controller# openstack role add --project demo --user demo user
このコマンドを実行しても特に何も出力されません。
Keystoneの動作確認
他のサービスをインストールする前にKeystoneが正しく構築、設定されたか動作を検証します。
- 一時的に設定した環境変数を解除します。
controller# unset OS_AUTH_URL OS_PASSWORD
- セキュリティーを確保するため、一時認証トークンメカニズムを無効化します。
- keystone-paste.iniを開き、[pipeline:public_api]と[pipeline:admin_api]と[pipeline:api_v3]セクション(訳者注:..のpipeline行) に
admin_token_auth
があれば、削除します。
- keystone-paste.iniを開き、[pipeline:public_api]と[pipeline:admin_api]と[pipeline:api_v3]セクション(訳者注:..のpipeline行) に
controller# grep admin_token_auth /etc/keystone/keystone-paste.ini
(設定ファイルを確認)
controller# vi /etc/keystone/keystone-paste.ini
(設定ファイルにadmin_token_authがあれば取り除く)
動作確認のため、adminおよびdemoテナントに対し認証トークンを要求します。 admin、demoユーザーのパスワードを入力します。
- adminユーザーとdemoユーザーとして認証トークンを要求します。
controller# openstack --os-auth-url http://controller:35357/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name admin --os-username admin token issue
Password: ← adminユーザーにパスワードを入力
controller# openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name Default --os-user-domain-name Default \
--os-project-name demo --os-username demo token issue
Password: ← demoユーザーにパスワードを入力
OpenStackクライアントのRCスクリプトの作成
コマンドラインでKeystone認証を通すために、次のようなRCスクリプトを作成します。
adminユーザー用のadmin-openrc
と、demoユーザー用のdemo-openrc
を作成します。
controller# cat admin-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=password
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
controller# cat demo-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=password
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
sourceコマンドで各RCスクリプトを読み込んだ後、結果が出力されることを確認します。
# openstack token issue