目录

一、创建keystone数据库并授权 

二、安装keystone及依赖软件

二、使用admin账户登录openstack

三、创建项目(project)、用户(user)、角色(role)



Keystone——身份认证组件

Keystone (OpenStack Identity Service)是OpenStack中的一个独立的提供安全认证的模块,主要负责openstack用户的身份认证、令牌管理、提供访问资源的服务目录、以及基于用户角色的访问控制。

Keystone类似一个服务总线,或者说是整 个Openstack框架的注册表,其他服务通过keystone来注册其服务的Endpoint (服务访问的URL),任何服务之间相互的调用,需要经过Keystone的身份验证,来获得目标服务的Endpoint来找到目标服务。

openstack中各个组件相互访问都需要keystone进行认证

openstack各组件都要创建相应的用户,这些用户信息存放在MySQL里,但由keystone统一管理。

每一个组件还要创建相关的role,service,endpoint,这些信息也存放在MySQL里,由keystone统一管理(catalog)。


一、创建keystone数据库并授权 

mysql -uroot -pxyz123
MariaDB [(none)]> create database keystone;
MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'xyz123';
MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'%' identified by 'xyz123';
MariaDB [(none)]> show databases;
MariaDB [(none)]> quit
#输入数据库密码
mysql -uroot -pxyz123
#创建名为keystone的数据库。
MariaDB [(none)]> create database keystone;
#赋予用户keystone对数据库keystone的所有操作权限权限。“keystone.*”代表数据库keystone的所有表。
MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'xyz123';
MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'%' identified by 'xyz123';
#查看数据库是否创建成功
MariaDB [(none)]> show databases;
#退出数据库
MariaDB [(none)]> quit

二、安装keystone及依赖软件

yum -y install openstack-keystone httpd mod_wsgi
cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak
vim /etc/keystone/keystone.conf

[database]
661 
connection = mysql+pymysql://keystone:xyz123@controller/keystone

[token]
2774 
provider = fernet

405 
transport_url = rabbit://openstack:xyz123@controller:5672

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 xyz123 \
--bootstrap-admin-url http://controller:35357/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne

vim /etc/httpd/conf/httpd.conf
95 
ServerName controller

ln -sf /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
systemctl start httpd
systemctl enable httpd
netstat -ntlup |grep http
#keystone基于httpd启动;httpd需要mod_wsgi模块才能运行python开发的程序,openstack是用python开发的
yum -y install openstack-keystone httpd mod_wsgi

#修改keystone配置文件,修改前先备份一下
cp /etc/keystone/keystone.conf /etc/keystone/keystone.conf.bak
vim /etc/keystone/keystone.conf
#在vim编辑器中: 搜索关键词用/  切换到指定行用:
#下面配置前的数字代表行号方便查找。

#配置keystone连接数据库,第一个keystone代表数据库用户keystone,第二个代表数据库keystone
[database]
661 
connection = mysql+pymysql://keystone:xyz123@controller/keystone

#打开下面这名的注释,fernet为令牌的提供者(也就是令牌的一种方式,fernet方式小巧且加密)
[token]
2774 
provider = fernet

#配置连接rabbitmq
405 
transport_url = rabbit://openstack:xyz123@controller:5672

#初始化keystone服务的数据库,将keystone数据导入MySQL的keystone库中
su -s /bin/sh -c "keystone-manage db_sync" keystone

#验证MySQL的keystone库中有没有表,大约39张
mysql -h controller -ukeystone -pxyz123 -e 'use keystone;show tables;' |wc -l

#在/etc/keystone/目录产生以下两个目录表示初始化成功credential-keys  fernet-keys
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

#初始化api信息,\为换行连接符
#设置admin用户(管理用户)和密码
#此步骤是初始化openstack,会把openstack的admin用户的信息写入到mysql的user表中,以及url等其他信息写入到mysql的相关表中
#1.admin-url:管理网(如公有云内部openstack管理网络),用于管理虚拟机的扩容或删除;如果共有网络和管理网是一个网络,则当业务量大时,会造成无法通过openstack的控制端扩容虚拟机,所以需要一个管理网;
#2.internal-url:内部网络,进行数据传输,如虚拟机访问存储和数据库、zookeeper等中间件,这个网络是不能被外网访问的,只能用于企业内部访问
#3.public-url:共有网络,可以给用户访问的(如公有云) #但是此环境没有这些网络,则公用同一个网络
#4.5000端口:keystone提供认证的端口
[root@controller ~]# keystone-manage bootstrap --bootstrap-password xyz123 \
--bootstrap-admin-url http://controller:35357/v3/ \
--bootstrap-internal-url http://controller:5000/v3/ \
--bootstrap-public-url http://controller:5000/v3/ \
--bootstrap-region-id RegionOne

配置httpd
[root@controller ~]# vim /etc/httpd/conf/httpd.conf
95 
ServerName controller

#添加软链接
ln -sf /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

#开启httpd并加入开机自启
systemctl start httpd
systemctl enable httpd

#查看http相关端口起了没
netstat -ntlup |grep http

二、使用admin账户登录openstack

登录openstack也就是登录keystone,因为keystone就是openstack的身份认证组件。

登录openstack有两种方式:

1、通过网页输入账号密码登录,需要在dashboard组件安装后才可以用;

2、通过声明环境变量将登录openstack所需的信息告知keystone,以达到已登录的效果。用户登录所需信息如下:

export OS_USERNAME=admin
export OS_PASSWORD=xyz123
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
export OS_IMAGE_API_VERSION=2

执行openstack命令有两种方式:

1、先登录,再执行命令。这种方式需要设置环境变量,建议写成shell脚本每次登录source脚本即可。且环境变量生效时,该登录就生效,可直接执行命令。

通过环境变量声明用户名和密码等认证信息,欺骗openstack已经登录且通过认证,相当于把admin用户的验证信息通过声明环境变量的方式传递给openstack进行验证,这样就可以执行openstack命令了。

2、在命令中指定相关参数。这种方式每次执行openstack都需要指定相关参数,命令很长不方便,建议使用第一种。

openstack创建实例流程 openstack创建角色_数据库

编写需要声明的环境变量脚本 vim admin-openstack.sh

将上述所需信息粘贴到该脚本中,需要登录时执行此命令即可source admin-openstack.sh

三、创建项目(project)、用户(user)、角色(role)

openstack project create --domain default --description "Service Project" service
openstack project create --domain default --description "Demo Project" demo
openstack project list
openstack user create --domain default --password xyz123 demo
openstack user list
openstack role list
openstack role create user
openstack role add --project demo --user demo user
#创建一个名为service的项目(project),项目描述为Service Project,该项目属于default域。
openstack project create --domain default --description "Service Project" service
#创建一个名为demo的项目(project),项目描述为Demo Project,该项目属于default域。
openstack project create --domain default --description "Demo Project" demo
#查看项目
openstack project list
#创建一个名为demo的用户(user),密码为xyz123,该用户属于default域。
openstack user create --domain default --password xyz123 demo

#查看用户列表
openstack user list
#查看角色列表
openstack role list
#创建一个角色,名为user
openstack role create user
#给用户demo添加user角色
openstack role add --project demo --user demo user

#备注如下
#default为默认的domain,可以通过openstack domain list命令查看,
#也可以通过openstack domain create创建新的域,详情可通过openstack domain create --help命令查看。

 

openstack创建实例流程 openstack创建角色_mysql_02

openstack创建实例流程 openstack创建角色_openstack创建实例流程_03

 使用命令行的方式验证demo用户

unset OS_AUTH_URL OS_PASSWORD

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

openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name demo --os-username demo token issue
#取消之前设置的部分环境变量,这样就相当于退出admin用户登录;
unset OS_AUTH_URL OS_PASSWORD
#使用命令行的方式登录admin用户,在命令行中没有指定密码,所以需要交互式输入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
#在命令行中加入--os-password xyz123 ,避免交互。
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 --os-password xyz123 user list
#使用命令行的方式登录demo用户,在命令行中没有指定密码,所以需要交互式输入demo用户的密码。
#这里之所以使用openstack token issue命令验证是因为该命令的执行权限低,新建的user的role可以满足,demo用户的role是user。
openstack --os-auth-url http://controller:35357/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name demo --os-username demo token issue

 编写demo用户的环境变量脚本

vim demo-openstack.sh
export OS_USERNAME=demo
export OS_PASSWORD=xyz123
export OS_PROJECT_NAME=demo
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
export OS_IMAGE_API_VERSION=2