Keystone安装
一、Keystone概述
Keystone通常是用户与之交互的第一个服务。一旦经过身份验证,终端用户就可以使用他们的身份来访问其他OpenStack服务。同样地,其他OpenStack服务利用Keystone验证真假,并发现部署中其他服务的位置。Keystone还可以与一些外部用户管理系统(如LDAP)进行集成。
用户和服务可以通过使用由身份认证服务的service catalog来定位其他服务。顾名思义,service catalog是OpenStack部署中可用服务的集合。每个服务都可以有一个或多个端点,每个端点可以是以下三种类型之一:admin、internal或public。在生产环境中,由于安全原因,不同的端点类型可能位于不同的网络中。例如,Public API网络暴露在互联网上,这样客户就可以通过公共API管理云。Admin API网络可能仅限于管理云基础设施的组织中的操作人员。Internal API网络可能被限制在包含OpenStack服务的主机上。此外,OpenStack支持多个区域的可伸缩性。为简单起见,该指南使用了所有端点类型的管理网络和默认的区域RegionOne。在身份服务中创建的区域、服务和端点组成了一个service catalog。您的部署中的每个OpenStack服务都需要一个带有相应端点的服务条目,并存储在身份服务中。这可以在安装和配置身份服务之后完成。
身份服务包含以下组件:
Server
集中式服务器使用RESTful接口提供身份验证和授权服务。
Drivers
驱动程序或服务后端被集成到集中式服务器中。它们用于在OpenStack外部的存储库中访问身份信息,并且可能已经存在于OpenStack部署的基础设施中(例如,SQL数据库或LDAP服务器)。
Modules
中间件模块在使用身份认证服务的OpenStack组件的地址空间中运行。这些模块拦截服务请求,提取用户凭证,并将它们发送到集中式服务器以获得授权。中间件模块和OpenStack组件之间的集成使用Python Web Server Gateway接口。
二、安装Keystone组件
- 在安装和配置身份认证服务前,必须配置好数据库
(1)使用数据库访问客户端作为root用户连接到数据库服务器:
(2) 创建keystone数据库
(3)赋予keystone数据库本地与远程访问的权限
# mysql -uroot -p123456
MariaDB [(none)]> create database keystone;
MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost' identified by '123456';
MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'%' identified by '123456';
2.安装配置Keystone
# yum install -y openstack-keystone httpd mod_wsgi
编辑/etc/keystone/keystone.conf文件
# vi /etc/keystone/keystone.conf
在[database]位置,配置数据库连接
在[token]位置,配置提供的Fernet令牌
[database]
connection = mysql+pymysql://keystone:123456@controller/keystone
[token]
provider = fernet
同步Keystone数据库
# su -s /bin/sh -c "keystone-manage db_sync" keystone
初始化Fernet密钥存储库:
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
注:引导身份认证服务 在Queens版本发布之前,keystone需要在两个独立的端口上运行,以适应the Identity v2 API,该API通常在35357端口上运行一个单独的admin-only服务。随着v2
API的移除,keystone可以在同一个端口上运行所有接口。
# keystone-manage bootstrap --cootstrap-password 123456 \
--bootstrap-admin-url http://controller:5000/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne
3.配置Apache HTTP服务
编辑/etc/httpd/conf/httpd.conf文件,配置ServerName选项引用controller
# vi /etc/httpd/conf/httpd.conf
ServerName controller
创建链接到/usr/share/keystone/wsgi-keystone.conf
# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
4.关闭selinux
# vi /etc/selinux/config
SELINUX=disabled
立即生效
# setenforce 0
5.完成安装
# systemctl enable httpd.service;systemctl start httpd.service
6.配置admin用户生成临时环境变量
# export OS_USERNAME=admin
# export OS_PASSWORD=123456
# export OS_PROJECT_NAME=admin
# export OS_USER_DOMAIN_NAME=Default
# export OS_PROJECT_DOMAIN_NAME=Default
# export OS_AUTH_URL=http://controller:35357/v3
# export OS_IDENTITY_API_VERSION=3
7.身份服务为每个OpenStack服务提供身份验证服务。身份验证服务使用domains、projects、users和roles的组合。
(1)创建域
# openstack domain create --description "Domain" example
(2)创建服务项目
# openstack project create --domain default --description "Service Project" service
(3)创建平台demo项目
# openstack project create --domain default --description "Demo project" demo
(4)创建demo用户
# openstack user create --domain default --password-prompt demo
(5)创建用户角色
# openstack role create user
(6)添加用户角色到demo项目和用户(无返回值)
# openstack role add --project demo --user demo user
注:你可以重复这个过程来创建额外的项目和用户。
8.验证身份认证服务
取消临时环境变量
# unset OS_AUTH_URL OS_PASSWORD
作为admin用户请求验证令牌
# 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
(密码为之前创建admin用户设置的密码)
作为demo用户请求验证令牌
# 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
注:这个命令使用demo用户和API端口5000的密码,它只允许常规(非管理员)访问身份服务API。
9.创建环境脚本
(1) 创建admin-openrc脚本
# vi admin-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=123456
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
(2)创建demo-openrc脚本
# vi demo-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=123456
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
(3)使用admin-openrc脚本
# . admin-openrc
(4)请求身份验证令牌:
# openstack token issue