Ceph RGW + OpenStack Keystone 配置教學(上篇)

Ceph Object Storage 除了可以自身管理使用者訊息與驗證外,也可以透過 OpenStack Keystone 進行管理。本篇會先介紹如何在 CentOS 7 上安裝 OpenStack Keystone (Version Stein),後續會在下篇時介紹如何與 Ceph 進行串接!

前置條件

  • 需具備一台 CentOS 7 實體機器或虛擬機器
  • 安裝機器需具備 MariaDB

安裝

/etc/selinux/config 將 SELINUX 註解移除並把值更改為 disabled 來關閉 SELinux,更改完儲存並重新開機

1
2
3
4
5
6
7
8
$ setenforce 0
$ vim /etc/selinux/config

...
SELINUX=disabled
...

$ reboot

添加 OpenStack Keystine(Stein) rpm 並安裝

1
2
3
$ yum install http://repos.fedorapeople.org/repos/openstack/openstack-stein/rdo-release-stein-1.noarch.rpm
$ yum update
$ yum install openstack-keystone httpd mod_wsgi python-openstackclient gcc

在 MariaDB 建立 Keystone 資料庫並且建立 keystone 使用者賦予 任意localhost 存取 keystone 資料表權限

1
2
3
4
5
$ mysql -u root -p
$ CREATE DATABASE keystone;
$ GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '<KEYSTONE_USER_PASSWORD>';
$ GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '<KEYSTONE_USER_PASSWORD>';
$ exit

修改 OpenStack Keystone 配置檔,在 [database] 加入資料庫配置

1
2
3
4
5
$ vim /etc/keystone/keystone.conf
...
[database]
connection = mysql+pymysql://keystone:<KEYSTONE_USER_PASSWORD>@<DATABASE_IP>:<DATABASE_PORT>/keystone
...

[token] 配置以 fernet 提供 Token 讓其他元件可以進行驗證,更改完後儲存並離開

1
2
3
4
...
[token]
provider = fernet
...

根據 OpenStack Keystone 需具備的資料表來同步資料庫

1
$ su -s /bin/sh -c "keystone-manage db_sync" keystone

利用 fernet 針對 Token 進行初始化與建立驗證所需的 Token

1
2
$ keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
$ keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

建立 OpenStack Keystone 的 admin 使用者與建立預設的 domain, project 與 endpoint 等

1
2
3
4
5
$ keystone-manage bootstrap --bootstrap-password <ADMIN_PASSWORD> \
--bootstrap-admin-url http://<KEYSTONE_IP>:5000/v3/ \
--bootstrap-internal-url http://<KEYSTONE_IP>:5000/v3/ \
--bootstrap-public-url http://<KEYSTONE_IP>:5000/v3/ \
--bootstrap-region-id RegionOne

啟動 OpenStack Keystone 服務

1
2
3
$ systemctl enable httpd.service
$ systemctl start httpd.service
$ systemctl status httpd.service

建立 adminrc 檔案來儲存 admin 使用者的環境變數,輸入完成後儲存並且離開

1
2
3
4
5
6
7
8
9
$ vim adminrc

export OS_USERNAME=admin
export OS_PASSWORD=12345678
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://172.17.1.110:5000/v3
export OS_IDENTITY_API_VERSION=3

在使用任何 OpenStack 指令時記得先將環境變數添加到系統中

1
$ source adminrc

結果

利用 OpenStack 指令任意呼叫服務,確認是否收到 OpenStack 回應。以下是利用查詢當前 OpenStack 已存在的服務為例,若是剛建立的環境,可以看到系統回應 Keystone 服務的資訊

1
2
3
4
5
6
$ openstack service list
+----------------------------------+----------+----------+
| ID | Name | Type |
+----------------------------------+----------+----------+
| 826222db3f2649d9b14be428f4873e8c | keystone | identity |
+----------------------------------+----------+----------+

常見問題

OpenStack 套件沒有提供 version 指令查詢當前安裝的 Keystone 版本。因此我們需要透過 yum 當前已安裝的套件來確認當前 Keystone 安裝的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ yum list | grep keystone

openstack-keystone.noarch 1:15.0.0-1.el7 @openstack-stein
python2-keystone.noarch 1:15.0.0-1.el7 @openstack-stein
python2-keystoneauth1.noarch 3.13.1-1.el7 @openstack-stein
python2-keystoneclient.noarch 1:3.19.0-1.el7 @openstack-stein
python2-keystonemiddleware.noarch 6.0.0-1.el7 @openstack-stein
openstack-barbican-keystone-listener.noarch
openstack-keystone-doc.noarch 1:15.0.0-1.el7 openstack-stein
puppet-keystone.noarch 14.4.0-1.el7 openstack-stein
python-keystoneauth1-doc.noarch 3.13.1-1.el7 openstack-stein
python-keystoneclient-doc.noarch 1:3.19.0-1.el7 openstack-stein
python-keystonemiddleware-doc.noarch 6.0.0-1.el7 openstack-stein
python2-keystone-tests.noarch 1:15.0.0-1.el7 openstack-stein
python2-keystone-tests-tempest.noarch 0.2.0-1.el7 openstack-stein
python2-keystone-tests-tempest-doc.noarch
python2-keystoneclient-tests.noarch 1:3.19.0-1.el7 openstack-stein

若遇到系統回應 Missing value auth-url required for auth plugin password 訊息,表示當前驗證發生問題,即可能是為將使用者的環境變數加至系統中。若以 admin 使用者為例,可以利用安裝最後所建立的 adminrc 來解決此問題

1
$ source adminrc

在建置過程中,可以針對不同的使用者建立不同的 rc 檔來儲存使用者的參數,以方便做使用者切換

若針對本篇教學有任何疑問或有敘述錯誤的地方,歡迎在底下留言討論唷~

評論

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×