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