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:

openstack中如何启动keystone服务 openstack中keystone作用_创建数据库

创建数据库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';

退出数据库,如下图:

openstack中如何启动keystone服务 openstack中keystone作用_创建数据库_02

二、配置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

如下所示:

openstack中如何启动keystone服务 openstack中keystone作用_创建数据库_03

同步数据库:

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,进行如下配置并保存退出:

openstack中如何启动keystone服务 openstack中keystone作用_创建数据库_04

创建软连接:

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

如下图:

openstack中如何启动keystone服务 openstack中keystone作用_创建数据库_05

运行该文件,设定环境变量(可以通过export命令查看环境变量):

openstack中如何启动keystone服务 openstack中keystone作用_bootstrap_06

五、使用

查看当前的domain:

openstack domain list

如果报以下错误(Internal Server Error(HTTP 500)):

openstack中如何启动keystone服务 openstack中keystone作用_创建数据库_07

查看/var/log/httpd/keystone.log,可尝试修改keystone权限,命令如下(没有上面的报错别运行):

chown -R keystone:keystone /etc/keystone/* /var/log/keystone/keystone.log

默认存在一个domain,名字为default:

openstack中如何启动keystone服务 openstack中keystone作用_创建数据库_08

新建一个名字为example的domain:

openstack domain create --description "An Example Domain" example

再次查看domain列表:

openstack中如何启动keystone服务 openstack中keystone作用_创建数据库_09

查看project 列表:

openstack project list

有个默认project,名字为admin:

openstack中如何启动keystone服务 openstack中keystone作用_bootstrap_10

向domain:default中添加一个project,project名字为service:

openstack project create --domain default --description "Service Project" service

查看新建的project:

openstack中如何启动keystone服务 openstack中keystone作用_数据库_11

关于user、role的创建,可以参考:https://docs.openstack.org/keystone/train/install/keystone-users-rdo.html

openstack中如何启动keystone服务 openstack中keystone作用_创建数据库_12

https://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

如下所示:

openstack中如何启动keystone服务 openstack中keystone作用_openstack_13

创建role:

openstack role create myrole

如下:

openstack中如何启动keystone服务 openstack中keystone作用_openstack_14

将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

如下:

openstack中如何启动keystone服务 openstack中keystone作用_bootstrap_15

使用刚刚创建的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

如下所示:

openstack中如何启动keystone服务 openstack中keystone作用_数据库_16

七、创建脚本

在后续测试时,有事需要用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

如下所示:

openstack中如何启动keystone服务 openstack中keystone作用_bootstrap_17

使用admin请求token,如下:

openstack中如何启动keystone服务 openstack中keystone作用_创建数据库_18

使用myuser请求token:

openstack中如何启动keystone服务 openstack中keystone作用_openstack_19

keystone安装完成。

致谢

1、感谢Ceased指出数据库创建时的错误。