一、基础理论篇
1、Keystone的概述
Keystone是Openstack的组件之一,用于为Openstack家族中的其它组件成员提供统一的认证服务,包括身份验证,令牌的发放和校验,服务列表,用户权限的定义等。Openstack中任何组件均依赖与Keystone提供的服务。
2、Keystone 功能
用户与认证:用户权限与用户行为追踪。
服务目录:为每个组件服务提供一个可用的服务目录和相应的API入口端点。
Keystone (OpenStack Identity Service ) 基本概念用户(user)
使用服务的用户,可以是人,服务或者系统,只要是使用了openstack服务的对象都可以称为用户。当User对OpenStack进行访问时,Keystone会对其身份进行验证。
项目(project)
租户,可以理解为一个人、项目或者组织拥有的资源的合集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中的资源。
角色(role)
角色,用于分配操作的权限。角色可以被指定给用户,使得该用户获得角色对应的操作权限。安全包含两部分:Authentication(认证)和 Authorization(鉴权)
服务(service)
Openstack Service,即Openstack中运行的组件服务。nova,glance都是属于一个服务,需要在keystone上进行创建,指定类型。创建服务有一个服务,就创建一个endpoint,会根据服务类型去查找那个服务。Service 决定每个 Role 能做什么事情 ,Service 通过各自的 policy.json 文件对 Role 进行访问控制。
令牌(token)
指的是一串比特值或者字符串,用来作为访问资源的令牌。Token中含有可访问资源的范围和有效时间。
端点(endpoint)
一个可以通过网络来访问和定位某个Openstack Service的地址,通常是一个URL。例如,Nova需要访问Glance服务去获取Image时,Nova通过访问Keystone拿到Glance的Endpoint,然后通过访问该Endpoint去获取Glance服务,我们可以通过Endpoint的region属性去定义多个region。Endpoint该使用对象分为三类:
1. Admin URL:给admin用户使用,被从常规的访问中分离。
2. Internal URL:Openstack内部服务使用来跟别的服务通信,只能被局域网访问。
3. Public URL:其它用户可以访问的地址,可以被全局访问。
4. User 通过 Endpoint 访问资源和执行操作
证书(Credentials)
用于确认用户身份的凭证。
认证方式(authentication)
确定用户身份的过程。
5、Keystone 工作流程图
图片来源网络
6、Keystone V3 API特性
1. Tenant更改为Project
2.添加了Domain(对系统资源进行限额 一个域中可以存在多个项目以及用)
3.添加了Group (组的概念为了更好的管理用户,例如linux下对组授权,其组下面的用户也有了相应的权限)
7. keystone 图解:
图片来源网络
二、实践操作篇
1. 环境说明
系统主机名IP地址
CentOS 7.7controllerens33:10.0.0.129
ens37:192.168.248.140
CentOS 7.7computeens33:10.0.0.130
ens37:192.168.248.141
虚拟机网卡配置ens33 为VMnet1仅主机模式ens37 为VMnet8 Nat模式
2. Keystone 配置
以下操作均在controller节点进行
2.1 安装keystone相关软件包
[root@controller ~]# yum install -y openstack-keystone httpd mod_wsgi
2.2 创建keystone数据库
[root@controller ~]# mysql -uroot -p
MariaDB [(none)]> create database keystone;
MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'keystone';
MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'%' identified by 'keystone';
2.3生成管理员的令牌环
[root@controller ~]# openssl rand -hex 10
8daaaf9583ff2f370e39
2.4 编辑keystone配置文件
配置数据库连接、定义管理员初始令牌的值
# vim /etc/keystone/keystone.conf
[DEFAULT]
admin_token = 8daaaf9583ff2f370e39
.....
[database]
.....
connection = mysql+pymysql://keystone:keystone@controller/keystone
.....
[token]
......
provider = fernet
......
2.5 为keystone创建数据表
[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
#查看创建表是否成功
[root@controller ~]# mysql -h 10.0.0.129 -ukeystone -pkeystone -e "use keystone;show tables;"
2.6 初始化Fernet keys
[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@controller ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
2.7 配置Apache服务器
[root@controller ~]# cp /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
[root@controller ~]# vi /etc/httpd/conf/httpd.conf
95 ServerName controller
[root@controller ~]# systemctl start httpd
[root@controller ~]# systemctl enable httpd
[root@controller ~]# ss -tan | grep 5000
LISTEN 0 128 :::5000 :::*
[root@controller ~]# ss -tan | grep 35357
LISTEN 0 128 :::35357 :::*
2.8 keystone的连接方式说明
1. 使用环境变量的方式来连接keystone(环境初始化常用) 格式: export OS_TOKEN=OpenSSL生成的随机值 export OS_URL=http://controller:35357/v3 (连接到keystone的地址以及端口信息) export OS_IDENTITY_API_VERSION=v3 (定义版本信息)
2. 使用命令行的方式来连接到keystone(需要在创建完成域、项目、用户,服务之后才能够使用) 格式: openstack --os-auth-url http://controller:35357/v3 \ --os-project-domain-name default --os-user-domain-name default \ --os-project-name 项目名称 --os-username 用户名称 token issue 5000端口和35357端口的区别: 5000端口是普通用户进行身份认证的端口 35357端口是admin用户和普通用户认证的端口
2.9 定义环境变量[root@controller ~]# export OS_TOKEN=8daaaf9583ff2f370e39
[root@controller ~]# export OS_URL=http://controller:35357/v3
[root@controller ~]# export OS_IDENTITY_API_VERSION=3
3. 创建域、项目、用户和角色
以下创建的为管理员环境即admin
3.1 创建default域
[root@controller ~]# openstack domain create --description "Default Domain" default
--description:指定描述信息
3.2创建admin项目
[root@controller ~]# openstack project create --domain default --description "Admin Project" admin
--domain:指定项目所属域的名称
3.3创建admin用户
[root@controller ~]# openstack user create --domain default --password-prompt admin
3.4创建admin角色
[root@controller~]# openstack role create admin
3.5 将以上创建的在一起
[root@controller ~]# openstack role add --project admin --user admin admin
将admin用户加入admin项目中,并赋予admin角色
4. 创建普通用户环境
4.1 创建user项目
[root@controller ~]# openstack project create --domain default --description "User Project" user
4.2 创建user用户
[root@controller ~]# openstack user create --domain default --password-prompt user
4.3 创建user角色
[root@controller ~]# openstack role create user
4.4 将以上三者关联到一起
[root@controller ~]# openstack role add --project user --user user user
将user用户加入到user项目中,并赋予user角色
5. 创建服务实体和API端点信息
服务实体包括:keystone、Nova、glance、neutron等
API端点信息:访问每一个服务的URL路径
端点信息可以分为如下三类:
admin (管理员入口)
internal(私有 内部通信)
public(公有 其他通信)
5.1 创建keystone服务实体
[root@controller ~]# openstack service create --name keystone --description "Openstack Identity" identity
--name:指定服务实体的名称
5.2 创建public公有端点信息
[root@controller ~]# openstack endpoint create --region RegionOne identity public http://controller:5000/v3
类型为internal表示为内部,端口为5000,内部普通人员访问
5.3 创建admin管理员端点信息
[root@controller ~]# openstack endpoint create --region RegionOne identity admin http://controller:35357/v3
类型为admin,代表管理员入口,端口为35357 管理员访问的端口 5000端口管理员不适用
5.4 查看创建的端口信息
[root@controller ~]# openstack endpoint list
6. 验证测试
取消原先我们定义的环境变量
[root@controller ~]# unset OS_TOKEN OS_URL
[root@controller ~]# openstack service list
Missing value auth-url required for auth plugin password
连接的keystone的方式有两种,一种是通过环境变量,一种是通过命令行的方式,我们把环境变量取消了,自然而然就连接不上了
使用命令行的方式来连接到keystone测试
[root@controller ~]# 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
返回如上信息代表成功
7.编写admin-OpenStack.sh
[root@controller ~]# vim admin-openstack.sh
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=123456
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
验证测试
[root@controller ~]# source admin-openstack.sh
[root@controller ~]# openstack user list
8.编写user-OpenStack.sh
[root@controller ~]# vi user-openstack.sh
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=user
export OS_USERNAME=user
export OS_PASSWORD=123456
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
验证测试
[root@controller ~]# source user-openstack.sh
[root@controller ~]# openstack project list
至此,keystone认证服务安装完成。