1、keystone简介
python
Keystone(OpenStack Identity Service)是OpenStack框架中,负责身份验证、服务规则和服务令牌的功能, 它实现了OpenStack的Identity API。Keystone相似一个服务总线, 或者说是整个Openstack框架的注册表, 其余服务经过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用, 须要通过Keystone的身份验证, 来得到目标服务的Endpoint来找到目标服务。mysql
2、keystone基本概念介绍sql
1.User --> User即用户,他们表明能够经过keystone进行访问的人或程序。Users经过认证信息(credentials,如密码、API Keys等)进行验证。数据库
2.Tenant --> Tenant即租户,它是各个服务中的一些能够访问的资源集合。例如,在Nova中一个tenant能够是一些机器,在Swift和Glance中一个tenant能够是一些镜像存储,在Quantum中一个tenant能够是一些网络资源。Users默认的老是绑定到某些tenant上。swift
3.Role --> Role即角色,Roles表明一组用户能够访问的资源权限,例如Nova中的虚拟机、Glance中的镜像。Users能够被添加到任意一个全局的 或 租户内的角色中。在全局的role中,用户的role权限做用于全部的租户,便可以对全部的租户执行role规定的权限;在租户内的role中,用户仅能在当前租户内执行role规定的权限。网络
4.Service --> Service即服务,如Nova、Glance、Swift。根据前三个概念(User,Tenant和Role)一个服务能够确认当前用户是否具备访问其资源的权限。可是当一个user尝试着访问其租户内的service时,他必须知道这个service是否存在以及如何访问这个service,这里一般使用一些不一样的名称表示不一样的服务。在上文中谈到的Role,实际上也是能够绑定到某个service的。例如,当swift须要一个管理员权限的访问进行对象建立时,对于相同的role咱们并不必定也须要对nova进行管理员权限的访问。为了实现这个目标,咱们应该建立两个独立的管理员role,一个绑定到swift,另外一个绑定到nova,从而实现对swift进行管理员权限访问不会影响到Nova或其余服务。框架
5.Endpoint --> Endpoint即为端点,咱们若是须要访问一个服务,则必须知道他的endpoint。所以,在keystone中包含一个endpoint模板(endpoint template,在安装keystone的时候咱们能够在conf文件夹下看到这个文件),这个模板提供了全部存在的服务endpoints信息。一个endpoint template包含一个URLs列表,列表中的每一个URL都对应一个服务实例的访问地址,而且具备public、private和admin这三种权限。public url能够被全局访问(如http://compute.example.com),private url只能被局域网访问(如http://compute.example.local),admin url被从常规的访问中分离。curl
3、keystone流程ide
4、keystone安装性能
1.在控制节点上安装OpenStack身份认证服务和python-keystoneclient
# yum install -y openstack-keystone python-keystoneclient
2.身份认证服务须要用数据库来存储相关信息,因此要在配置文件中指定当地数据库的位置。
# openstack-config --set /etc/keystone/keystone.conf database connection mysql://keystone:keystone@controller/keystone
3.用root帐户登陆数据库,建立keystone用户和相关数据库并授予访问权限
mysql> CREATE DATABASE keystone;
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'keystone';
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone';
mysql> FLUSH PRIVILEGES;
mysql> exit;
4.填充keystone数据库
# su -s /bin/sh -c "keystone-manage db_sync" keystone
5.定义一个受权令牌看成在身份服务和其余OpenStack服务的共享秘钥,使用openssl来生成一个随机令牌,并将其存储到配置文件。
# ADMIN_TOKEN=$(openssl rand -hex 10)
# echo $ADMIN_TOKEN > token_key
# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token $ADMIN_TOKEN
6.默认状况下,keystone使用PKI token。建立签名秘钥和证书以及限制对生成的数据访问
# keystone-manage pki_setup --keystone-user keystone --keystone-group keystone
# chown -R keystone:keystone /etc/keystone/ssl
# chmod -R o-rwx /etc/keystone/ssl
7.启动身份认证服务和配置开机启动
# service openstack-keystone start
# chkconfig openstack-keystone on
8.默认状况下,身份认证服务会无限期存储数据库中过时的令牌,过时的令牌将大幅增长数据库的大小和可能会减小服务的性能,特别是在测试环境或者有限的资源下的状况下。咱们建议配置一个周期性任务来清除每小时过时的令牌
# (crontab -l -u keystone 2>&1 | grep -q token_flush) || \
echo '@hourly /usr/bin/keystone-manage token_flush >/var/log/keystone/keystone-tokenflush.log 2>&1' >> /var/spool/cron/keystone
5、建立users,tenant,role
在安装完身份认证服务后,咱们得设置user、tenant、role进行身份验证;这些都是用于容许访问服务和端点。
一般,你将使用一个用户名和密码进行身份验证服务,可是,因为你尚未建立任何用户,因此你必须使用受权令牌(即以前咱们保存在token_key文件中随机字符)。你能够经过--os-token选项或者设置OS_SERVICE_TOKEN环境变量来成功使用keystone命令。设置OS_SERVICE_TOKEN以及OS_SERVICE_ENDPOINT指定身份认证服务正在运行。ADMIN_TOKEN换成你的受权令牌:
# export OS_SERVICE_TOKEN=$ADMIN_TOKEN
# export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0
1.建立一个管理用户
根据如下步骤建立管理用户、角色、租户,你将使用这些帐户跟OpenStack云进行交互。
默认状况下,身份认证服务会建立一个特殊的_member_角色,openstack dashboard将会自动向用户授予访问这个角色的权限。你要给admin用户访问权限除了admin role外。
(1)建立admin用户
# keystone user-create --name=admin --pass=openstack --email=353764437@qq.com
(2)建立admin角色
# keystone role-create --name=admin
(3)建立admin租户
# keystone tenant-create --name=admin --description="Admin Tenant"
(4)利用user-role-add选项将admin用户、admin角色、admin租户链接在一块儿
# keystone user-role-add --user=admin --tenant=admin --role=admin
(5)链接admin用户、_member_角色、admin租户
# keystone user-role-add --user=admin --role=_member_ --tenant=admin
2.建立一个普通用户
根据如下步骤建立一个普通用户、租户,并将它们与_member_角色链接。你将使用该帐户做为非管理员在每日中与openstack云交互。你还能够重复这个过程来建立额外的云用户并设置不一样的用户名和密码。当建立这些用户的时候跳过建立承租者步骤。
(1)建立demo用户
# keystone user-create --name=demo --pass=openstack --email=353764437@qq.com
(2)建立demo租户
# keystone tenant-create --name=demo --description="Demo Tenant"
(3)链接demo用户、_member_角色和demo租户
# keystone user-role-add --user=demo --role=_member_ --tenant=demo
3.建立一个服务租户
openstack服务还须要一个用户名、租户和角色访问其余的openstack服务。基本安装中,openstack服务一般共享一个租户命名的服务。
(1)建立服务租户
# keystone tenant-create --name=service --description="Service Tenant"
6、定义服务和API端点
(1)为身份验证建立一个服务条目
# keystone service-create --name=keystone --type=identity --description="OpenStack Identity"
(2)为身份验证服务指定一个API端点经过返回的服务ID,当你指定一个端点,你必须为public API,internal API和admin API提供URLs。在该指导中,使用controller主机名。注意,身份验证服务为管理API使用了不一样的端口
# keystone endpoint-create \
--service-id=$(keystone service-list | awk '/ identity / {print $2}') \
--publicurl=http://controller:5000/v2.0 \
--internalurl=http://controller:5000/v2.0 \
--adminurl=http://controller:35357/v2.0
7、验证身份验证的安装
(1)为了验证身份服务的安装和配置是否正确,清除OS_SERVICE_TOKEN和OS_SERVICE_ENDPOINT环境变量的值:
# unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
(2)你如今可使用普通用户基于名称的身份验证。使用admin用户和你为改帐户设置的密码来请求身份验证令牌
# keystone --os-username=admin --os-password=openstack --os-auth-url=http://controller:35357/v2.0 token-get
(3)验证受权行为。为此,验证受权的租户
# keystone --os-username=admin --os-password=openstack \
--os-tenant-name=admin --os-auth-url=http://controller:35357/v2.0 \
token-get
(4)你能够在操做系统中设置--os-*变量来简化命令行的用法。为管理凭证和管理端点,建立admin-openrc.sh文件,内容以下:
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://controller:35357/v2.0
(5)source该文件使环境变量生效
# source admin-openrc.sh
(6)验证你的admin-openrc.sh文件配置是否正确,运行同样的命令除了--os-*参数。
# keystone token-get
命令返回一个令牌并指定的ID用户,则证实你配置的环境变量正确
(7)验证你的管理员帐户已受权执行管理命令
# keystone user-list
# keystone user-role-list --user admin --tenant admin
注意:上面这张图少截了前面id部分
至此,身份验证服务安装完毕!