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 | +------------+--------------------------------------------------------------------------------+