2815 Words

OpenStack Ussuri マニュアルインストールその2―Keystone 編

Controller

  • Keystone は認証サービス
  • OpenStack のすべてのサービスは Keystone に問い合わせて認証情報をもらってから実行される

前提条件

OpenStack Docs: Install and configure - Prerequisites

  • Keystone をインストールする前にデータベースを作成する必要がある

#root user

mysql
# 以下は`MariaDB [(none)]>`のプロンプトに入力する
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';
  • !Caution KEYSTONE_DBPASSは適切なパスワードに書き換える
  • keystoneデータベースの作成とアクセス権限の付与

Keystone インストール

OpenStack Docs: Install and configure - Install and configure components

  1. パッケージインストール

    #root user

    apt install keystone
    
  2. /etc/keystone/keystone.conf編集

    # ...
    
    [database]
    # 他のオプションはすべて削除またはコメントアウトする
    # `KEYSTONE_DBPASS`は適切なパスワードに書き換える
    connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
    
    [token]
    # ...
    # Fernetトークンプロバイダ設定
    provider = fernet
    
    # ...
    
    • !Caution KEYSTONE_DBPASSは適切なパスワードに書き換える
  3. Keystone データベース同期

    #root user

    su -s /bin/sh -c "keystone-manage db_sync" keystone
    
  4. Fernet 鍵のリポジトリ初期化

    #root user

    keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
    keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
    
  5. Keystone サービス一括作成

    #root user

    keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
        --bootstrap-admin-url http://controller:5000/v3/ \
        --bootstrap-internal-url http://controller:5000/v3/ \
        --bootstrap-public-url http://controller:5000/v3/ \
        --bootstrap-region-id RegionOne
    
  • !Caution ADMIN_PASSは適切なパスワードに書き換える

Apache HTTP サーバー設定

OpenStack Docs: Install and configure - Configure the Apache HTTP server

  • /etc/apache2/apache2.conf編集

    # ...
    ServerName controller
    
    • コントローラノードを参照するように設定

SSL

  • 必要あれば設定する

サービス再起動

OpenStack Docs: Install and configure - Finalize the installation

#root user

systemctl restart apache2
  • 管理アカウント用の環境変数

    Environment VariableValue
    OS_USERNAMEadmin
    OS_PASSWORDADMIN_PASS
    OS_PROJECT_NAMEadmin
    OS_USER_DOMAIN_NAMEDefault
    OS_PROJECT_DOMAIN_NAMEDefault
    OS_AUTH_URLhttp://controller:5000/v3
    OS_IDENTITY_API_VERSION3
    • !Caution ADMIN_PASSは適切なパスワードに書き換える
    • keystone-manage bootstrap ...のコマンドで管理アカウントが作成されている

ドメイン、プロジェクト、ユーザ、役割の作成

OpenStack Docs: Create a domain, projects, users, and roles

  • 認証はドメイン、プロジェクト、ユーザ、役割の組み合わせを使用しておこなわれる
  1. 環境変数をセットする

    $any user

    export OS_USERNAME=admin
    export OS_PASSWORD=ADMIN_PASS
    export OS_PROJECT_NAME=admin
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    
    • !Caution ADMIN_PASSは適切なパスワードに書き換える
    • これらの環境変数をセットした状態でopenstackコマンドを叩くことで Keystone でいろいろな操作が可能となる
  2. ドメイン作成

    $any user

    openstack domain create --description "An Example Domain" example
    
    +-------------+----------------------------------+
    | Field       | Value                            |
    +-------------+----------------------------------+
    | description | An Example Domain                |
    | enabled     | True                             |
    | id          | 2f4f80574fd84fe6ba9067228ae0a50c |
    | name        | example                          |
    | tags        | []                               |
    +-------------+----------------------------------+
    
    • exampleドメインを作成している
    • keystone-manage bootstrap ...のコマンドでDefaultドメインは作成されているが、新しいドメインを作成する手順の例として作成してみている
    • 別に作成しなくてもいいです
  3. プロジェクト作成

    $any user

    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                          |
    | tags        | []                               |
    +-------------+----------------------------------+
    
    • serviceプロジェクトを作成している
    • 公式インストールガイドではこのserviceプロジェクトに各種環境のユーザ (glance, placement, …) を追加していくことになるので、絶対に作成すること
  4. 管理者権限のないプロジェクト、ユーザ作成

    • myprojectプロジェクト作成

      $any user

      openstack project create --domain default --description "Demo Project" myproject
      
      +-------------+----------------------------------+
      | Field       | Value                            |
      +-------------+----------------------------------+
      | description | Demo Project                     |
      | domain_id   | default                          |
      | enabled     | True                             |
      | id          | 231ad6e7ebba47d6a1e57e1cc07ae446 |
      | is_domain   | False                            |
      | name        | myproject                        |
      | parent_id   | default                          |
      | tags        | []                               |
      +-------------+----------------------------------+
      
    • myuserユーザ作成

      $any user

      openstack user create --domain default --password-prompt myuser
      # 対話形式のパスワードプロンプトがでる
      User Password:
      Repeat User Password:
      
      +---------------------+----------------------------------+
      | Field               | Value                            |
      +---------------------+----------------------------------+
      | domain_id           | default                          |
      | enabled             | True                             |
      | id                  | aeda23aa78f44e859900e22c24817832 |
      | name                | myuser                           |
      | options             | {}                               |
      | password_expires_at | None                             |
      +---------------------+----------------------------------+
      
    • myroleの役割作成

      $any user

      openstack role create myrole
      
      +-----------+----------------------------------+
      | Field     | Value                            |
      +-----------+----------------------------------+
      | domain_id | None                             |
      | id        | 997ce8d05fc143ac97d83fdfb5998552 |
      | name      | myrole                           |
      +-----------+----------------------------------+
      
    • myprojectプロジェクト、myuserユーザにmyroleの役割を割り当てる

      $any user

      openstack role add --project myproject --user myuser myrole
      

動作確認

OpenStack Docs: Verify operation

  1. 一旦、環境変数OS_AUTH_URLOS_PASSWORDを消す

    $any user

    unset OS_AUTH_URL OS_PASSWORD
    
  2. Defaultドメインのadminプロジェクト、adminユーザとして認証トークンをリクエストする

    $any user

    openstack \
        --os-auth-url http://controller:5000/v3 \
        --os-project-domain-name Default \
        --os-user-domain-name Default \
        --os-project-name admin \
        --os-username admin \
        token issue
    # 対話形式のパスワードプロンプトがでる
    Password:
    
    +------------+-----------------------------------------------------------------+
    | Field      | Value                                                           |
    +------------+-----------------------------------------------------------------+
    | expires    | 2016-02-12T20:14:07.056119Z                                     |
    | id         | gAAAAABWvi7_B8kKQD9wdXac8MoZiQldmjEO643d-e_j-XXq9AmIegIbA7UHGPv |
    |            | atnN21qtOMjCFWX7BReJEQnVOAj3nclRQgAYRsfSU_MrsuWb4EDtnjU7HEpoBb4 |
    |            | o6ozsA_NmFWEpLeKy0uNn_WeKbAhYygrsmQGA49dclHVnz-OMVLiyM9ws       |
    | project_id | 343d245e850143a096806dfaefa9afdc                                |
    | user_id    | ac3377633149401296f6c0d92d79dc16                                |
    +------------+-----------------------------------------------------------------+
    
    • adminユーザのパスワードを入力する
    • openstack project show adminopenstack user show adminででてくるproject_iduser_idと一致している
  3. Defaultドメインのmyprojectプロジェクト、myuserユーザとして認証トークンをリクエストする

    $any user

    openstack \
        --os-auth-url http://controller:5000/v3 \
        --os-project-domain-name Default \
        --os-user-domain-name Default \
        --os-project-name myproject \
        --os-username myuser \
        token issue
    # 対話形式のパスワードプロンプトがでる
    Password:
    
    +------------+-----------------------------------------------------------------+
    | Field      | Value                                                           |
    +------------+-----------------------------------------------------------------+
    | expires    | 2016-02-12T20:15:39.014479Z                                     |
    | id         | gAAAAABWvi9bsh7vkiby5BpCCnc-JkbGhm9wH3fabS_cY7uabOubesi-Me6IGWW |
    |            | yQqNegDDZ5jw7grI26vvgy1J5nCVwZ_zFRqPiz_qhbq29mgbQLglbkq6FQvzBRQ |
    |            | JcOzq3uwhzNxszJWmzGC7rJE_H0A_a3UFhqv8M4zMRYSbS2YF0MyFmp_U       |
    | project_id | ed0b60bf607743088218b0a533d5943f                                |
    | user_id    | 58126687cbcc4888bfa9ab73a2256f27                                |
    +------------+-----------------------------------------------------------------+
    
    • myuserユーザのパスワードを入力する
    • openstack project show myprojectopenstack user show myuserででてくるproject_iduser_idと一致している

OpenStack クライアント環境スクリプトを作成する

OpenStack Docs: Create OpenStack client environment scripts

  • 環境変数エクスポートをまとめたスクリプトを作っておくと非常に便利

スクリプト作成

  1. adminユーザ用の環境スクリプト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=ADMIN_PASS
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2
    
    • ADMIN_PASSadminユーザのパスワードに書き換える
  2. myuserユーザ用の環境スクリプトdemo-openrcを作成する

    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_USER_DOMAIN_NAME=Default
    export OS_PROJECT_NAME=myproject
    export OS_USERNAME=myuser
    export OS_PASSWORD=DEMO_PASS
    export OS_AUTH_URL=http://controller:5000/v3
    export OS_IDENTITY_API_VERSION=3
    export OS_IMAGE_API_VERSION=2
    
    • DEMO_PASSmyuserユーザのパスワードに書き換える

スクリプトの使用

  1. 環境スクリプトの読み込み

    $any user

    . admin-openrc
    
    • source admin-openrcと同じ意味
  2. 認証トークンをリクエストする

    $any user

    openstack token issue
    
    +------------+-----------------------------------------------------------------+
    | Field      | Value                                                           |
    +------------+-----------------------------------------------------------------+
    | expires    | 2016-02-12T20:14:07.056119Z                                     |
    | id         | gAAAAABWvi7_B8kKQD9wdXac8MoZiQldmjEO643d-e_j-XXq9AmIegIbA7UHGPv |
    |            | atnN21qtOMjCFWX7BReJEQnVOAj3nclRQgAYRsfSU_MrsuWb4EDtnjU7HEpoBb4 |
    |            | o6ozsA_NmFWEpLeKy0uNn_WeKbAhYygrsmQGA49dclHVnz-OMVLiyM9ws       |
    | project_id | 343d245e850143a096806dfaefa9afdc                                |
    | user_id    | ac3377633149401296f6c0d92d79dc16                                |
    +------------+-----------------------------------------------------------------+
    
    • admin-openrcを読み込んだのでDefaultドメインのadminプロジェクト、adminユーザの認証トークンが出力される
    • パスワードなども含めてadmin-openrcにかかれているので余計なオプションや対話形式のパスワード入力が不要になる

おわり

以上で Keystone 編終了です
お疲れ様でした

関連記事一覧