[Open Stack] Install Identity Service (keystone) - OpenStack Installation Guide For Ubuntu 12.04 (LTS) Havana [2]

2. Cài đặt  Identity Service (keystone)
 Identity Service thực hiện chức năng:- Quản lý và phân quyền user.- Cung cấp catalog của các services cho API đầu cuối.B1. Cài đặt Identity service trên controller:
B2. Tạo database mySQL để lưu trữ thông tin keystone
apt-get install keystone
mysql -u root -p
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'keystone123';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'keystone123';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'controller' \
IDENTIFIED BY 'keystone123';

B3. Khai báo database mySQL trong file /etc/keystone/keystone.conf
 [sql]
connection = mysql://keystone:keystone123@controller/keystone
Mặc định keystone sử dụng sqlite, xóa database này vì không dùng tới:
rm -rf /var/lib/keystone/keystone.db
Tạo database và khởi động lại keystone:
keystone-manage db_sync
service keystone restart
B4. Khai báo admin_token cho keystone trong file /etc/keystone/keystone.conf
[DEFAULT]
# A "shared secret" between keystone and other openstack services
admin_token = 012345SECRET99TOKEN012345
Lưu ý: admin_token phải đảm bảo đủ độ dài, nếu làm theo hướng dẫn của OpenStack tự 
generate admin_token bằng lệnh openssl rand -hex 10 sẽ gặp lỗi khi tạo keystone user:
Error:
<attribute 'exceptions.baseexception'="" 'message'="" objects="" of=""> (HTTP Unable to establish connection to http://192.168.2.239:35357/v2.0/tenants)
here:172.24.30.35 is my sever ip</attribute>
Khởi động lại keystone một lần nữa:
service keystone restart


B5. Khai báo user, tenant, role để cho phép truy cập tới services và endpoints sau này, hiện tại ở bước này chúng ta chưa có bất cứ user nào nên để truy cập vào vào keystone thông qua ADMIN_TOKEN đã tạo ở bước 4 bằng cách set biến môi trường như sau:
export SERVICE_TOKEN=012345SECRET99TOKEN012345
export SERVICE_ENDPOINT=http://controller:35357/v2.0
Sau đó, chúng ta tạo 1 tenant cho user administrative và 1 tenant cho các dịch vụ OpenStack khác đang sử dụng:
keystone tenant-create --name=admin --description="Admin Tenant"
keystone tenant-create --name=service --description="Service Tenant"
Tiếp tục tạo 1 user administrative như sau:
keystone user-create --name=admin --pass=admin123 \
   --email=admin@controller.com
Tạo 1 role với quyền administrator:
keystone role-create --name=admin
Cuối cùng, chúng ta apply user đã tạo cho role và tenant tương ứng:
keystone user-role-add --user=admin --tenant=admin --role=admin
B6. Define services và API endpoints: sử dụng cho việc xác thực Identity Service bằng user thay vì authorization token:
Tạo service:
keystone service-create --name=keystone --type=identity \
  --description="Keystone Identity Service"
Display: ID được sinh ngẫu nhiên và chúng ta sử dụng nó cho bước tiếp theo
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |    Keystone Identity Service     |
|      id     | a6146ffb7f144576b1982d680164bdbb |
|     name    |             keystone             |
|     type    |             identity             |
+-------------+----------------------------------+
Tạo API endpoint:
keystone endpoint-create \
  --service-id=a6146ffb7f144576b1982d680164bdbb \
  --publicurl=http://controller:5000/v2.0 \
  --internalurl=http://controller:5000/v2.0 \
  --adminurl=http://controller:35357/v2.0
B7. Sau khi hoàn thiện xong bước 6, từ đây có thể sử dụng username đã tạo cho việc xác thực truy cập tới Identity Service thay vì phải sử dụng ADMIN_TOKEN:
unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
Cần phải get 1 tokent mới cho user admin, nhập chính xác password của user admin:
 
keystone --os-username=admin --os-password=admin123 \
  --os-auth-url=http://controller:35357/v2.0 token-get
Tương tự, chúng ta tiếp tục get 1 tokent cho tenant admin
keystone --os-username=admin --os-password=admin123 \
  --os-tenant-name=admin --os-auth-url=http://controller:35357/v2.0 token-get
Để đơn giản cho việc khai báo các biến môi trường sau này, chúng ta tạo ra file /etc/keystone/keystonerc với nội dung sau:
export OS_USERNAME=admin
export OS_PASSWORD=admin123
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://controller:35357/v2.0
Và khởi chạy cho mỗi lần khai báo biến môi trường:
source keystonerc
Ok, để xác nhận lại quá trình cài đặt ở trên, chúng ta thực hiện các câu lệnh sau:
keystone token-get
keystone user-list

Nếu kết quả là 1 token và ID của tenant và id của các user đã tạo thì việc khai báo biến môi trường đã chính xác.

(Còn tiếp)