继安装部署OpenStack(一)
三、配置身份识别服务(keystone)控制节点
身份识别服务执行以下功能:
用户管理,追踪用户和他们的权限
作为其他服务的目录,提供了一个可用服务和他们API端点的目录
为了明白身份识别服务,你要明白以下的概念:
用户(User) 一串数字代表使用openstackyun服务的人、系统、服务,身份识别服务验证用户进来的请求,通过之后,会分配其令牌,用户可以凭借令牌访问他所在的容器
证明材料(Credentials) 在身份识别中的用户名、密码或者令牌
验证 (Authentication) 验证用户的一个动作
令牌 (Token) 用来访问资源的一串任意文本
容器 (Tenant) 一个用来隔离资源或对象的容器
服务(Service) 一个openstack的服务,例如计算服务(nova),对象存储服务(swift),镜像服务(glance)等等。
端点 (Endpoint ) 一个网络访问地址,通常叫做URL,用来访问服务的地址
角色 (Role) 一个角色是一些权限的一个集合,赋予一个用户这个角色,这个用户就有了角色里面的权限
安装身份识别服务(keystone)
在控制节点安装
# yum install openstack-keystone python-keystoneclient #修改配置文件中的mysql连接 # openstack-config --set /etc/keystone/keystone.conf \ database connection mysql://keystone:KEYSTONE_DBPASS@controller keystone
注:KEYSTONE_DBPASS修改为你的身份验证服务密码,这个命令也可以如下操作
#或
#vim /etc/keystone/keystone.conf 修改 database connection mysql://keystone:KEYSTONE_DBPASS@controller/keystone
上面的参数指定连接时,其语法格式为“mysql://[user]:[pass]@[primary IP]/[db name]”。
以下命令都采用openstack-config的方式修改配置文件,大家理解即可!
使用root登陆mysql,创建数据库,赋予keystone用户相关权限
$ mysql -u root -p mysql> CREATE DATABASE keystone; mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \ IDENTIFIED BY 'KEYSTONE_DBPASS'; mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \ IDENTIFIED BY 'KEYSTONE_DBPASS'; mysql> exit
为keystone创建表
su -s /bin/sh -c "keystone-manage db_sync" keystone
注意:这里可能会报警告信息,但是不是错误,大家忽略即可。(因为默认是debug级别)
定义一个验证的令牌,以供keystone和其他服务使用
# ADMIN_TOKEN=$(openssl rand -hex 10) # echo $ADMIN_TOKEN # openstack-config --set /etc/keystone/keystone.conf DEFAULT \ admin_token $ADMIN_TOKEN
默认情况下,keystone使用PKI 令牌,所以创建签名和证书
# keystone-manage pki_setup --keystone-user keystone --keystone-group keystone # chown -R keystone:keystone /etc/keystone/ssl # chmod -R o-rwx /etc/keystone/ssl
启动keystone服务,加入启动列表
# service openstack-keystone start # chkconfig openstack-keystone on
定义用户,容器,角色
定义环境变量
$ export OS_SERVICE_TOKEN=ADMIN_TOKEN $ export OS_SERVICE_ENDPOINT= http://controller:35357/v2.0
注:ADMIN_TOKEN就是上面生成的随机数字
创建admin用户
$ keystone user-create --name=admin --pass=ADMIN_PASS --email=ADMIN_EMAIL
修改密码和邮箱
创建admin角色
$ keystone role-create --name=admin
创建admin容器
$ keystone tenant-create --name=admin --description="Admin Tenant"
赋予admin用户admin角色和admin容器
$ keystone user-role-add --user=admin --tenant=admin --role=admin
系统默认有_member_角色,赋予admin
$keystone user-role-add --user=admin --role=_member_ --tenant=admin
创建一个demo用户,demo角色,demo容器,方法同上
创建一个service容器,用来承载其他的openstack服务,每个openstack服务,都需要用户,角色,容器来访问其他的服务的,但是容器可以共享,这里共享一个service 容器,用户和角色可以在后面创建服务的时候建立。
$ keystone tenant-create --name=service --description="Service Tenant"
创建好之后查看下
# keystone user-list +----------------------------------+--------+---------+------------------+ | id | name | enabled | email | +----------------------------------+--------+---------+------------------+ | 2ff603a4178e449c9517be5ee33eebc3 | admin | True | root@localhost | | e725d18231f646fbb30a5410f3f4024e | demo | True | demo@localhost | | d8702a1bd0264dc7a55ffaebc0c3e58e | glance | True | glance@localhost | | afd793ac961b47feb42ce799f69c6b08 | nova | True | nova@localhost | +----------------------------------+--------+---------+------------------+
#keystone role-list +----------------------------------+----------+ | id | name | +----------------------------------+----------+ | 9fe2ff9ee4384b1894a90878d3e92bab | _member_ | | bc312302997b468788ac91ae1faf9a5c | admin | +----------------------------------+----------+
# keystone tenant-list +----------------------------------+---------+---------+ | id | name | enabled | +----------------------------------+---------+---------+ | dc42d1e0d4fd4661bab1c4b8b55aaea5 | admin | True | | f3241e14bd6d4afebd4ef154f967b038 | demo | True | | caee860fa57a4c44bafdeee2974148b1 | service | True | +----------------------------------+---------+---------+
定义服务和API端点
在keystone中创建一个service条目
keystone service-create --name=keystone --type=identity \ --description="OpenStack Identity" +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | OpenStack Identity | | id | 15c11a23667e427e91bc31335b45f4bd | | name | keystone | | type | identity | +-------------+----------------------------------+
为keystone服务添加API端点
keystone endpoint-create \ --service-id=$(keystone service-list | awk '/ identity / {print $2}') \ 注:这里service-id可以用上面的查看命令获取之后粘贴过来 --publicurl=http://controller:5000/v2.0 \ --internalurl=http://controller:5000/v2.0 \ --adminurl= +-------------+-----------------------------------+ | Property | Value | +-------------+-----------------------------------+ | adminurl | http://controller:35357/v2.0 | | id | 11f9c625a3b94a3f8e66bf4e5de2679f | | internalurl | http://controller:5000/v2.0 | | publicurl | http://controller:5000/v2.0 | | region | regionOne | | service_id | 15c11a23667e427e91bc31335b45f4bd | +-------------+-----------------------------------+
验证keystone服务的安装
取消环境变量
$ unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT
使用基于用户名,密码的验证
$ keystone --os-username=admin --os-password=ADMIN_PASS \ --os-auth-url=http://controller:35357/v2.0 token-get
当你看到有你的user id和令牌的时候,keystone服务运行正常
将变量保存到文件中,使用source是变量生效
vim admin-openrc.sh export OS_USERNAME=admin export OS_PASSWORD=ADMIN_PASS export OS_TENANT_NAME=admin export OS_AUTH_URL= $ source admin-openrc.sh
这样就可以直接使用keystone的命令,不在需要提供用户名,密码了
至此身份认证服务安装完成