nova-keystone

介绍    

keystone 为身份认证服务,所有的服务都是通过keystone来访问的,所有的服务创建后都要在keystone 上注册。

功能介绍

用户认证

USER   用户     用一个数字标识使用openstack 服务的一个人、系统或服务,身份验证服务将会验证传入的由用户声明将调用的请求。

Project  项目    各个服务中可以访问的资源集合,它是一个容器用来组织和1隔离资源或标识对象,老版本中为 tenant:租户

Token   令牌    用户首次通过keytone认证时,通过用户名和密码,认证通过后keystone 会分配给用户一个有有效期的令牌,以后认证通过令牌即可。

           优点:每次用户名密码认证都需要查询数据库,通过token 可以提高效率

Role     角色    权限集合

逻辑关系:用户对project 和操作权限由用户在项目中担任的角色决定。

服务目录

service    服务

endpoint  端点  一个服务对应的一个访问点,如果需要访问一个服务,则必须知道它的访问点。Endpoint 的每个URL都对应一个服务实例的访问地址,并且具                                                             有 private,public和admin 三个url地址,作用分别为局域网访问、公网访问、管理网管理访问,

nova glance  等每个服务对应都要在keystone 上注册一个相应的服务,每个服务都产生一个endpoint ,服务的注册切记:不能多,不能少,不能错。

安装和配置keystone 服务

yum install openstack-keystone httpd mod_wsgi
[database]
# ...
connection = mysql+pymysql://keystone:keystone@controller/keystone
[token]
# ...
provider = fernet     #加密算法为fernet
#driver = sql      #注意:在queens 版本中 driver 处不可以设置为memcache 否则无法加载memchache,在newton 版本中可以设置memcache配置。 
初始化数据库,操作mysql 数据库在keystone 数据库中创建数据表
su -s /bin/sh -c "keystone-manage db_sync" keystone
Initialize Fernet key repositories:
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
注册admin 用户,注册服务地址,实际就是在keystone 库中相应数据表中添加数据
# keystone-manage bootstrap --bootstrap-password ADMIN_PASS
--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

#设置server name
vi /etc/httpd/conf/httpd.conf
ServerName controller

#创建软连接
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
启动阿帕奇
# systemctl enable httpd.service
# systemctl start httpd.service

设置变量,以后执行相应命令就不用再命令行指定用户名,密码,注册地址等信息(永久有效可以写在配置文件中)
$ export OS_USERNAME=admin
$ export OS_PASSWORD=admin
$ 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

#相应日志文件位置
[root@localhost ~]# ls /var/log/keystone/
keystone.log
[root@localhost ~]# ls /var/log/httpd/
access_log error_log keystone_access.log keystone.log

openstack user list #此命令实际上是连接keystone 的命令,如果命令后面为指定用户名等信息,实际会读取环境变量OS_USERNAME等信息,
然后通过访问apache 服务,apache 服务访问keystone (实际为python程序),keystone 对其认证,生成token 给用户,从数据库中读取命令要获取的信息返回给命令。

创建一个项目
openstack project create --domain default --description "Service Project" service
openstack project create --domain default --description "Demo Project" demo
创建一个demo 项目的用户
openstack user create --domain default --password-prompt demo #密码设置为demo 即可
openstack role create user #创建一个user 角色(keystone 分为两个角色,一个是admin 已经再初始化时创建, 一个是普通用户user)
openstack role add --project demo --user demo user #将demon 用户添加到项目demo 中并且赋予user 角色
openstack user create --domain default --password-prompt glance
openstack role add --project service --user glance admin
openstack user create --domain default --password-prompt nova
openstack role add --project service --user nova admin
openstack user create --domain default --password-prompt neutron
openstack role add --project service --user neutron admin
openstack user create --domain default --password-prompt cinder
openstack role add --project service --user cinder admin
注:上述所有操作默认都是以admin 用户登录keystone 执行的操作(写数据库)
如果创建用户、项目操作错误,可以通过openstack user/role/project delete id 删除即可,每一个用户、角色对应一个id ,可以先出查询得出,
注意删除service 必须删除endpoint 因为都已对应的,必须两者一同删除再创建

验证一下,取消之前设置的环境变量,用其他用户登录并获取token(用户名密码验证通过才会获取到token)
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:5000/v3
--os-project-domain-name Default --os-user-domain-name Default
--os-project-name demo --os-username demo token issue
创建声明环境变量的脚本,每次以相应用户登录时先执行相应的环境变量脚本即可
vi admin-openstack
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
验证
source admin-openstack
openstack user list
vi demo-openstack
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
source demo-openstack
openstack user list

export OS_IMAGE_API_VERSION=2

原文地址:https://www.cnblogs.com/fanggege/p/10493178.html