之(二) Keystone安裝

手動安裝Openstack Mikita的第二部分: 認證服務Keystone安裝. 這部分內容主要是對OpenStack Installation Guide for Red Hat Enterprise Linux and CentOS在Keystone這部分內容的實踐總結.

一. 安裝前準備

首先, 我們將Keystone組件安裝在controller節點. 以下操作均在controller節點進行.

1. 爲Keystone創建數據庫

[root@controller ~]# mysql -u root -p

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';

其中, KEYSTONE_DBPASS是Keystone訪問數據庫時使用的密碼.

2. 安裝keystone組件

[root@controller ~]# yum install openstack-keystone httpd mod_wsgi

3. 配置Keystone

生成ADMIN_TOKEN:

[root@controller ~]# openssl rand -hex 10
466fda4062e7b0e1fb60

編輯文件 /etc/keystone/keystone.conf :

[DEFAULT]
...
admin_token = 466fda4062e7b0e1fb60

[database]
...
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone

[token]
...
provider = fernet

其中, admin_token是我們在之前生成的ADMIN_TOKEN.

另外, 配置文件裏可以設置debug來打印出更多的信息:

debug參數

查看配置文件的修改結果:

修改keystone配置文件結果

以keystone用戶的身份執行指令 keystone-manage db_sync , 同步Keystone的配置到數據庫:

[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone

其中, su指令的參數意義如下:

-s Runs the specified shell instead of the default.
-c Pass command to the shell with the -c option.

4. 初始化 Fernet keys

[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

5. 配置Apache HTTP server

編輯文件 /etc/httpd/conf/httpd.conf :

ServerName 10.0.0.11 # 添加

Keystone有兩個服務端口, 編輯文件 /etc/httpd/conf.d/wsgi-keystone.conf , 增加以下內容:

Listen 5000
Listen 35357

<VirtualHost *:5000>
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-public
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

<VirtualHost *:35357>
    WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
    WSGIProcessGroup keystone-admin
    WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
    WSGIApplicationGroup %{GLOBAL}
    WSGIPassAuthorization On
    ErrorLogFormat "%{cu}t %M"
    ErrorLog /var/log/httpd/keystone-error.log
    CustomLog /var/log/httpd/keystone-access.log combined

    <Directory /usr/bin>
        Require all granted
    </Directory>
</VirtualHost>

開啓Apache HTTP服務:

[root@controller ~]# systemctl enable httpd.service
[root@controller ~]# systemctl start httpd.service

二. 創建Service和API Endpoint

Keystone提供服務目錄的功能, 這個服務目錄記錄了當前Openstack環境中所有服務以及對應的Endpoints. 通過這個服務目錄, 某服務才能找到其它服務的入口. Openstack的所有服務都必須在這個服務目錄進行註冊, 包含Keystone自己. 這部分我們將註冊Keystone服務.

1. 環境變量

根據Openstack的業務邏輯, 所有的服務在使用前要先向Keystone請求token. 這裏我們註冊Keystone也需要先向Keystone請求token. 但是由於此時我們還處於初始化Keystone的狀態, 目前還沒有用戶. 因此我們使用一個臨時的token. 這個token也就是我們在配置Keystone的時候設置的ADMIN_TOKEN. 爲了在請求的時候使用這個ADMIN_TOKEN, 我們將其加入到環境變量中.

Openstack的API是有版本號的.

[root@controller ~]# export OS_TOKEN=466fda4062e7b0e1fb60
[root@controller ~]# export OS_URL=http://controller:35357/v3
[root@controller ~]# export OS_IDENTITY_API_VERSION=3

2. 創建Keystone服務和Endpoint

指令的具體功能可以在OpenStack Docs: OpenStack command-line client查到. 或者直接加上 -h 參數來查看.

(1) 創建keystone服務

[root@controller ~]# openstack service create --name keystone --description "OpenStack Identity" identity

創建Keystone服務

如果需要訪問一個服務, 就必須知道它的Endpoint. 一般以一個URL地址表示一個Endpoint, URL具有Public, Internal和Admin三種權限.

  • Public URL是爲全局提供的服務端點;
  • Internal URL相對於Public URL來說提供內部服務之間的訪問;
  • Admin URL是提供給管理員使用的.

爲了便於擴展, Openstack劃分了不同的region. 爲了簡化操作, 這裏將所有的Endpoint都放在默認的region, 即RegionOne中.

(2) 創建Endpoints

[root@controller ~]# openstack endpoint create --region RegionOne \
  identity public http://controller:5000/v3
[root@controller ~]# openstack endpoint create --region RegionOne \
  identity internal http://controller:5000/v3
[root@controller ~]# openstack endpoint create --region RegionOne \
  identity admin http://controller:35357/v3

Keystone爲每一個Openstack的服務提供了認證功能. 認證服務包括了域(domain), 租戶(projects或tenants), 用戶(users)和角色(roles).

(3) 創建默認的域

[root@controller ~]# openstack domain create --description "Default Domain" default

(4) 創建admin租戶

[root@controller ~]# openstack project create --domain default \
  --description "Admin Project" admin

(5) 創建admin用戶

用戶總是綁定到租戶上. 在創建時要輸入用戶密碼. 這裏的用戶密碼爲zzr.

[root@controller ~]# openstack user create --domain default \
  --password-prompt admin

(6) 創建admin角色, 用戶的權限是由用戶的角色決定的

[root@controller ~]# openstack role create admin

(7) 把admin角色加入到admin租戶和admin用戶

[root@controller ~]# openstack role add --project admin --user admin admin

以上這些我們創建的角色都可以在對應的Openstack目錄中的 policy.json 文件中找到. 如Keystone的相關認證策略就可以在文件 /etc/keystone/policy.json 找到.

(8) 創建servce租戶

[root@controller ~]# openstack project create --domain default \
  --description "Service Project" service

(9) 建立一個一般使用者的project, user和role, 來提供後續的權限驗證測試

[root@controller ~]# openstack project create --domain default \
  --description "Demo Project" demo
[root@controller ~]# openstack user create --domain default \
  --password-prompt demo
[root@controller ~]# openstack role create user
[root@controller ~]# openstack role add --project demo --user demo user

3. 驗證

(1) 移除臨時ADMIN_TOKEN

在之前的初始化中, 由於我們沒有admin用戶, 所以我們使用了ADMIN_TOKEN來作爲訪問Keystone服務的臨時token. 此時, 我們已經完成了創建admin用戶的工作, 因此, 出於安全考慮, 我們移除ADMIN_TOKEN的訪問權限.

編輯文件 /etc/keystone/keystone-paste.ini , 刪除掉

  • [pipeline:public_api]
  • [pipeline:admin_api]
  • [pipeline:api_v3]

這三個section中的 admin_token_auth .

同時移除之前設置的環境變量:

unset OS_TOKEN OS_URL

(2) 測試: 請求token

請求token的指令爲: openstack token issue .

openstack token issue指令

  • 以admin用戶的身份請求認證token:
[root@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
  • 以demo用戶(即普通用戶)的身份請求認證token:
[root@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

(3) 查看數據庫

以上信息在數據庫中都可以查詢得到:
查看Keystone數據庫

4. 環境腳本

(1) 創建腳本

在上面的操作中, 我們使用了環境變量和命令參數兩種方式來調用Openstack指令. 爲了進一點簡化操作, 可以使用環境腳本, 即OpenRC files. 關於該腳本的更多信息可以在OpenStack Docs: Set environment variables using the OpenStack RC file中獲得.

創建文件 admin-openrc , 這裏將這兩個文件放置在 /root , 即root用戶的 ~ 目錄下:

export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=zzr
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

創建文件 emo-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=zzr
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

(2) 使用腳本

有了這些腳本以後, 就可以通過這些腳本從而以某個租戶的某個用戶的身份執行指令. 如, 在上面的驗證中, 我們以admin租戶的admin用戶身份請求了一個新的token. 通過環境腳本我們可以如下進行同樣的操作:

  • 切換環境變量:
[root@controller ~]# . admin-openrc
  • 以admin租戶的admin用戶身份請求新的token:
[root@controller ~]# openstack token issue

參考文獻

  1. OpenStack Installation Guide for Red Hat Enterprise Linux and CentOS
  2. OpenStack Mitaka 安裝 for CentOS — Kyle.Bai
  3. OpenStack Liberty
  4. OpenStack Docs: OpenStack command-line client
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章