OpenStack是一个云计算平台的项目,其中Keystone是一个身份认证服务组件,它提供了认证、授权和目录的服务。其他OpenStack服务组件都需要使用Keystone来验证用户的身份和权限,并且彼此之间需要相互协作。当一个OpenStack服务组件接收到用户的请求时,它会先将请求交给Keystone身份认证服务组件,以检查该用户是否有足够的权限来完成请求。因此,Keystone身份认证服务组件是整个OpenStack项目中唯一可以提供身份认证的服务组件。
本文介绍Keystone安装步骤,Keystone仅需在控制节点安装。
在按照本教程安装之前,请确保完成以下配置:
【Openstack Train安装】一、虚拟机创建
【Openstack Train安装】二、NTP安装
【Openstack Train安装】三、openstack安装
【Openstack Train安装】四、MariaDB/RabbitMQ 安装
【Openstack Train安装】五、Memcached/Etcd安装
安装环境如下
VMware Workstation | V17.0 |
本机系统 | win11 |
虚拟机系统 | CentOS 7.5 |
本文对应的视频教程:【Openstack Train安装】六、Keystone安装
一、创建数据库
使用keystone服务前,先创建数据库,首先进入数据库:
mysql -u root -p
密码是123456:
创建数据库keystone:
CREATE DATABASE keystone;
授予数据库权限(123456是设置的数据库密码):
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '123456';
退出数据库,如下图:
二、配置keystone
安装相关包:
yum install openstack-keystone httpd mod_wsgi -y
对/etc/keystone/keystone.conf进行配置,在配置前,使用如下命令进行备份:
mv /etc/keystone/keystone.conf /etc/keystone/keystone.conf.source
cat /etc/keystone/keystone.conf.source | grep -Ev "^#|^$" > /etc/keystone/keystone.conf
接下来编辑/etc/keystone/keystone.conf,添加2个记录(这个123456是创建数据库keystone的密码),保存并退出:
[database]
# ...
connection = mysql+pymysql://keystone:123456@controller/keystone
[token]
# ...
provider = fernet
如下所示:
同步数据库:
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
引导身份服务(这里的密码时ADMIN_PASS,为了简单所有的密码我都设置为123456,但是不同的服务密码有却别,可参考官网):
keystone-manage bootstrap --bootstrap-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
三、配置Apache HTTP服务
编辑/etc/httpd/conf/httpd.conf,进行如下配置并保存退出:
创建软连接:
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
配置开机自启,并启动服务:
systemctl enable httpd.service
systemctl start httpd.service
四、配置环境变量
配置环境变量,为了简单起见,新建一个文件,叫做admin-openrc,并添加以下内容:
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:5000/v3
export OS_IDENTITY_API_VERSION=3
如下图:
运行该文件,设定环境变量(可以通过export命令查看环境变量):
五、使用
查看当前的domain:
openstack domain list
如果报以下错误(Internal Server Error(HTTP 500)):
查看/var/log/httpd/keystone.log,可尝试修改keystone权限,命令如下(没有上面的报错别运行):
chown -R keystone:keystone /etc/keystone/* /var/log/keystone/keystone.log
默认存在一个domain,名字为default:
新建一个名字为example的domain:
openstack domain create --description "An Example Domain" example
再次查看domain列表:
查看project 列表:
openstack project list
有个默认project,名字为admin:
向domain:default中添加一个project,project名字为service:
openstack project create --domain default --description "Service Project" service
查看新建的project:
关于user、role的创建,可以参考:https://docs.openstack.org/keystone/train/install/keystone-users-rdo.htmlhttps://docs.openstack.org/keystone/train/install/keystone-users-rdo.html
默认的project:admin是管理权限,创建一个普通的project:myproject, 在domain: Default中创建myproject和myuser,如下,密码设置为123456:
openstack project create --domain default --description "Demo Project" myproject
openstack user create --domain default --password-prompt myuser
如下所示:
创建role:
openstack role create myrole
如下:
将myrole和myproject\myuser关联起来:
openstack role add --project myproject --user myuser myrole
六、验证
取消环境变量OS_AUTH_URL和OS_PASSWORD:
unset OS_AUTH_URL OS_PASSWORD
使用admin请求一个身份验证的token:
openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue
如下:
使用刚刚创建的myuser请求token:
openstack --os-auth-url http://controller:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name myproject --os-username myuser token issue
如下所示:
七、创建脚本
在后续测试时,有事需要用admin和普通用户进行测试,故编写2个脚本,分别用于设置admin和myuser到环境变量,admin的脚本已经在【四、配置环境变量】中配置完成,下面配置普通用户myuser的脚本,新建文件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=123456
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
如下所示:
使用admin请求token,如下:
使用myuser请求token:
keystone安装完成。
致谢
1、感谢Ceased指出数据库创建时的错误。