Openstack身份驗證服務提供一個單點集成的管理認證,受權和服務目錄,當用戶交互時身份驗證服務一般的是第一個服務, 一旦經過認證,一樣,其它openstack服務利用身份驗證服務確保用戶是誰並發現部署中其它服務的位置,身份識別服務一樣也能夠使用外部的用戶管理系統(如LDAP).
使用服務目錄,身份認證服務管理的用戶和服務能夠定位其它的服務,顧名思義,服務目錄是OpenStack部署中可用服務的集合。每一個服務能夠有一個或多個端點,每一個端點能夠是三種類型之一: admin、internal或public。在生產環境中,因爲安全緣由,不一樣的端點類型可能位於暴露給不一樣類型用戶的不一樣網絡上。例如,public API網絡能夠從Internet上看到,這樣客戶就能夠管理他們的雲。Admin API網絡可能僅限於管理雲基礎設施的組織中的操做人員。Internal API網絡可能僅限於包含OpenStack服務的主機。
同時爲了實現可擴展性openstack一樣支持多區域,爲簡單起見,本列中對全部端點類型和默認的RegionOne區域使用管理網絡。在標識服務中建立的區域、服務和端點組成了部署的服務目錄。部署中的每一個OpenStack服務都須要一個服務入口和一個相應的的端點存儲在標識服務中。這均可以在安裝和配置身份認證服務以後完成。
身份認證服務包含下列組件:mysql
$ mysql -u root -proot123
MariaDB [(none)]> CREATE DATABASE keystone;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone123';
# yum install openstack-keystone httpd mod_wsgi
# vi /etc/keystone/keystone.conf [database] # ... connection = mysql+pymysql://keystone:keystone123@dbs.flex.net/keystone In the [token] section, configure the Fernet token provider: [token] # ... provider = fernet
# su -s /bin/sh -c "keystone-manage db_sync" keystone
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone # keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
# keystone-manage bootstrap --bootstrap-password admin123 \ --bootstrap-admin-url http://stack.flex.net:5000/v3/ \ --bootstrap-internal-url http://stack.flex.net:5000/v3/ \ --bootstrap-public-url http://stack.flex.net:5000/v3/ \ --bootstrap-region-id RegionOne
○ 在mysql中刪除endpoint配置,從新配置: MariaDB [keystone]> select * from endpoint; +-------------+--------------------+-----------+----------+--------------------------------+-------+---------+-----------+ | id | legacy_endpoint_id | interface |service_id| url | extra | enabled | region_id | +-------------+--------------------+-----------+----------+--------------------------------+-------+---------+-----------+ | 0b6dd3a784… | NULL | internal | ad298… | http://192.168.137.5:35357/v3/ | {} | 1 | RegionOne | | 4f7fdb8fc6… | NULL | public | ad298… | http://192.168.137.5:5000/v3/ | {} | 1 | RegionOne | | 8451f154c7… | NULL | admin | ad298… | http://192.168.137.5:35357/v3/ | {} | 1 | RegionOne | +-------------+--------------------+-----------+----------+--------------------------------+-------+---------+-----------+ 3 rows in set (0.15 sec) MariaDB [keystone]> delete from endpoint where url like '%137.5%'; #配錯的url或主機 Query OK, 3 rows affected (0.02 sec) MariaDB [keystone]> commit; ○ 處理完成後,從新配置上面的步驟
ServerName controller1
# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
# systemctl enable httpd.service # systemctl start httpd.service
配置管理賬號admin,能夠將這個文件寫成一個腳本的方式,並source腳本sql
# cat admin-openrc export OS_USERNAME=admin export OS_PASSWORD=admin123 export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_AUTH_URL=http://stack.flex.net:5000/v3 export OS_IDENTITY_API_VERSION=3 # source admin-openrc
身份驗證服務爲每一個OpenStack服務提供用戶的受權服務, 身份驗證服務使用域、項目、用戶和角色的組合,數據庫
#openstack domain create --description "An Example Domain" example +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | An Example Domain | | enabled | True | | id | f2a3ddcdc32c411ba5d9e480c25ce8b9 | | name | example | | tags | [] | +-------------+----------------------------------+
○ 先要禁用寫錯的域名 #openstack domain set --disable exampl ○ 而後刪除錯誤的域名 #openstack domain delete exampl
# openstack project create --domain default --description "Service Project" service +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Service Project | | domain_id | default | | enabled | True | | id | 3e33e6c8e1d14b7b9bbf64edcafb1023 | | is_domain | False | | name | service | | parent_id | default | | tags | [] | +-------------+----------------------------------+
常規(非管理員)的任務應該使用非特權的項目和用戶,這個列子中,咱們創建一個myproject項目和myuser用戶apache
○ 創建項目名爲myproject #openstack project create --domain default --description "Demo Project" myproject +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | Demo Project | | domain_id | default | | enabled | True | | id | c9fc9f23c899402aa10eaabf0c71fff5 | | is_domain | False | | name | myproject | | parent_id | default | | tags | [] | +-------------+----------------------------------+ 注意:不要重複此步驟在創建這項目的用戶時 ○ 創建myuser用戶 #openstack user create --domain default --password-prompt myuser User Password:myuser123 Repeat User Password:myuser123 +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | 81949d6833a04e61b79fe3a8a49cd5a5 | | name | myuser | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+ ○ 創建一個myrole角色 #openstack role create myrole +-------------+----------------------------------+ | Field | Value | +-------------+----------------------------------+ | description | None | | domain_id | None | | id | b49d96c43eaa43cfa9519614f0b84942 | | name | myrole | +-------------+----------------------------------+ ○ 添加myrole角色到myproject項目和myuser用戶 # openstack role add --project myproject --user myuser myrole 注意:你能夠重複上面的步驟創建更多的項目和用戶。
在安裝其它服務以前校驗身份驗證服務是否正常安裝,執行下列命令在controller節點上。bootstrap
$ unset OS_AUTH_URL OS_PASSWORD
# openstack --os-auth-url http://stack.flex.net:5000/v3 \ --os-project-domain-name Default --os-user-domain-name Default \ --os-project-name admin --os-username admin token issue Password: admin123 +------------+--------------------------------------------------------------+ | Field | Value | +------------+--------------------------------------------------------------+ | expires | 2019-08-22T05:32:10+0000 | | id | gAAAAABdXhrKNMqos25-DjAmaD5yu1dy_-PPtmch7YOgObHg25d2V0pEO… …| | project_id | 67139b2bd6c64e1c88136955dbef56a0 | | user_id | 681e9f941cb249e4a5058414057c7866 | +------------+--------------------------------------------------------------+
# openstack --os-auth-url http://stack.flex.net:5000/v3 \ --os-project-domain-name Default --os-user-domain-name Default \ --os-project-name myproject --os-username myuser token issue Password: myuser123 +------------+-------------------------------------------------------------+ | Field | Value | +------------+-------------------------------------------------------------+ | expires | 2019-08-22T05:34:30+0000 | | id | gAAAAABdXhtWYuSN8TlpDjFkNFtr_eElchimIc2YUHBWmImjX5ZpZm3……. | | project_id | c9fc9f23c899402aa10eaabf0c71fff5 | | user_id | 81949d6833a04e61b79fe3a8a49cd5a5 | +------------+-------------------------------------------------------------+
創建腳本後端
爲管理和演示項目以及用戶建立客戶機環境腳本。本指南的後續部分將引用這些腳本,以便爲客戶機操做加載適當的憑據。 1. 創建和編輯文件admin-openrc添加以下內容: # cat admin-openrc export OS_USERNAME=admin export OS_PASSWORD=admin123 export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_AUTH_URL=http://stack.flex.net:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2 2. 創建和編輯文件demo-openrc添加以下內容: # cat 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=myuser123 export OS_AUTH_URL=http://stack.flex.net:5000/v3 export OS_IDENTITY_API_VERSION=3 export OS_IMAGE_API_VERSION=2
要將客戶機做爲特定的項目和用戶運行, 只需在運行它們以前加載相關的客戶機環境腳本。例如: 1. 加域admin-openrc文件構建身份驗證服務,admin項目和用戶憑據的環境變量: $ . admin-openrc 2. 請求受權的token: $ openstack token issue +------------+--------------------------------------------------------------------------------+ | Field | Value | +------------+--------------------------------------------------------------------------------+ | expires | 2019-08-22T05:41:10+0000 | | id | gAAAAABdXhzmr94abDAnVgAtAlHIOqK_1OTs2nckP98hTfWLCSdliXvE13OGERiAlPy2SbATpj-39… | | project_id | 67139b2bd6c64e1c88136955dbef56a0 | | user_id | 681e9f941cb249e4a5058414057c7866 | +------------+--------------------------------------------------------------------------------+