keystone组件
一:keystone组件的基本概念
网吧的列子
1:项目
项目就是资源的集合,里面有多个服务
2:服务
项目中的各个组件提供的服务,上网区,休闲区
3:端点(通常是一个url)
端点就是访问服务的某个地址,通常一个服务有3类端点
admin-url 提供给admin用户的服务
internal-url 提供给内部组件服务
public-url 提供给其他公共用户的服务
4:用户
用户就是有账号和密码,能够使用项目中的资源
5:角色
角色就是权限的集合,比如,管理员,网管,一群用户的集合,可以把角色分配给用户或者组,自带admin和member2个角色,admin拥有管理openstack的权限,member是普通用户的权限
6:令牌
令牌是加密的字符串,是访问资源的通行证,在一定的范围和时间内有效,就是第一次登陆成功后,会给一个令牌给用户
7:认证
就是认证用户的一个过程
8:凭据
就是认证用户时,需要的数据,可以是账号或者密码,令牌
9:域
就是用户和项目的集合
二:keystone组件的架构
openstack云计算平台中的组件是有多个模块构成的,keystone组件的架构如下:
令牌模块:用来生成和管理令牌
目录模块:用来存储和管理服务以及端点的信息
验证模块:管理用户,角色,项目和认证服务
策略模块:存储和管理所有的访问权限
三:keystone认证的基本步骤
先登录成功后,返回一个令牌给用户,以后用户每次使用openstack中的服务时,就要先认证令牌,成功后,返回请求,就能实现这个相对应的功能
keystone认证服务分为2种
第一种:判断用户凭证是否合法,第一次登录时,如果为合法的,会返回一个令牌,供下一次认证使用
第二种:验证令牌是否合法,登陆成功后,使用任意服务,都需要令牌,是否有效
四:安装和配置keystone服务
1:安装keystone软件包
#安装keystone服务必要的软件包 [root@controller /]# yum -y install openstack-keystone httpd mod_wsgi 安装后,会自动创建一个keystone用户和组 #检查一下 [root@controller /]# cat /etc/passwd | grep keystone keystone:x:163:163:OpenStack Keystone Daemons:/var/lib/keystone:/sbin/nologin [root@controller /]# cat /etc/group |grep keystone keystone:x:163:
2:创建keystone数据库并授权
#登陆数据库 [root@controller /]# mysql -uroot -p000000 #创建keystone库 create database keystone #给用户授权使用新建数据库(本地用户和远程用户·) #本地用户 MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '000000'; #远程用户 MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '000000'; #退出数据库 exit
3:修改keystone的配置文件
/etc/keystone/keystone.conf
#修改database中的配置,实现与数据库的连接 [database] connection = mysql+pymysql://keystone:000000@controller/keystone 作用:用keystone用户和密码000000去连接controller端的keystone的数据库 #修改token部分令牌的加密方式,取消注释 provider = fernet 在验证令牌时,会进行解密来获取原始的数据
4:初始化keystone的数据库
就是在安装keystone时,会提供很多基础表的数据,在创建keystone库时,没有同步到该库中
#同步数据表到keystone数据库中去 [root@controller /]# su keystone -s /bin/sh -c "keystone-manage db_sync" #查看这些数据表 MariaDB [(none)]> use keystone; MariaDB [keystone]> show tables; +------------------------------------+ | Tables_in_keystone | +------------------------------------+ | access_rule | | access_token | | application_credential | | application_credential_access_rule | | application_credential_role | | assignment 表示数据库已经同步成功了
五:keystone组件初始化
1:初始化fernet密钥库
#会自动的创建/etc/keystone/fernet-keys目录,并生成2个密钥,用于令牌的加密和解密 [root@controller keystone]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone #会自动创建/etc/keystone/credential-keys、目录,并生成2个密钥用于凭证的加密和解密 [root@controller keystone]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
2:初始化用户身份认证信息
默认openstack有一个默认用户为admin,但是没有相对应的密码和登陆所需要的信息,所以要初始化admin用户的凭证,以后登陆时出示凭证与其相对应即可进行验证
[root@controller /]# keystone-manage bootstrap --bootstrap-password 000000 --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 admin凭证的信息会存储在keystone数据库中,登录时与其进行对比
3:配置web服务
keystone服务是一个运行在支持wsgi的web服务器上面的应用,所以要配置好web服务
#增加web服务器对wsgi的支持 /etc/httpd/conf.d是apache服务的配置文件 #创建一个软连接在这个配置文件中去 [root@controller conf.d]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/ #修改apache的配置文件 添加web服务器所在的域名和ip地址 [root@controller conf]# vim /etc/httpd/conf/httpd.conf ServerName controller #启动httpd和设置开机自启 [root@controller conf]# systemctl restart httpd [root@controller conf]# systemctl enable httpd [root@controller conf]#
六:模拟登录验证
已经初始化了openstack用户admin的登录密码000000,通过环境变量可以传送用户名和密码登凭证给keystone进行验证
1:创建初始化环境变量文件
#创建用户身份凭证 [root@controller ~]# vim admin-login export OS_USERNAME=admin export OS_PASSWORD=000000 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 OS_IMAGE_API_VERSION=2
2:导入环境变量,进行验证
#导入环境变量 [root@controller ~]# source admin-login #验证 [root@controller ~]# export -p #查阅项目的列表 [root@controller ~]# openstack project list +----------------------------------+-------+ | ID | Name | +----------------------------------+-------+ | fa5f0884c5414e2c9e7d6602a8df23bc | admin | +----------------------------------+-------+ [root@controller ~]#