keystone认证服务
1、keystone管理用户
1-1、简介:
在OpenStack云计算平台中,Keystone是一个核心组件,主要用于提供统一的认证服务。其功能包括:
- 身份验证:Keystone负责验证用户的身份,通常通过用户名和密码或其他认证机制进行。
- 令牌发放和校验:一旦用户身份验证成功,Keystone会发放一个令牌(Token),该令牌包含了用户在指定范围和有效时间内可以访问的资源信息。同时,Keystone还负责校验令牌的合法性。
- 服务列表管理:Keystone维护了一个服务列表,记录了OpenStack中运行的各个组件服务的信息。
- 用户权限定义:Keystone支持用户权限的划分和管理,通过角色(Role)机制,可以为不同的用户或用户组分配不同的操作权限。
1-2、身份服务功能:
- 身份认证:令牌管理、访问控制
- 在经过身份认证后,提供路径指引服务
- 用户授权:授权用户在一个服务中所拥有的权限(作用范围、有效期)
- 用户管理:管理用户账户
- 服务目录:提供可用于服务的API端点,即提供具体的URL路径(具体的路径)
1-3、服务认证流程:
1-3-1:流程图:
1-3-2:模块信息:
- user:用户
- keystone 身份验证:为所有服务模块提供认证与授权
- Nova 计算服务:管理实例的生命周期
- Glance 镜像服务:提供镜像服务
- Neutron 网络服务:提供网络服务
1-3-3:执行流程:
在OpenStack中,Keystone的工作原理大致如下:
- 用户向Keystone发送用户名和密码进行身份验证。
- 验证成功后,Keystone返回一个临时令牌和一个服务目录列表给用户。
- 用户使用临时令牌向服务目录中的服务请求资源时,需要再次通过Keystone的验证。
- Keystone验证令牌通过后,允许用户访问相应的服务资源。
1-3-4:详细分析:
- user ——> keystone
1.首先Client用户通过命令或horizon(账号密码)的方式进行登录(验证方式包括:令牌、密钥等);
- keystone ——> user
2.keystone会向Client发送credentials用于表示验证成功,同时向user发送一个Token(可以使用服务的权限范围和时间)和Endpoint(API地址或具体的URL);
- user ——> Nova
3.Client通过Token和Endpoint向nova的API发送申请创建虚拟机的请求;
- Nova——> keystone
4.nova会向keystone认证client用户的Token是否可用;
- keystone ——> nova
5.认证成功,令牌有效
- nova ——> glance
6.nova拿着client的Token和Image(申请的镜像对应的属性,规格)向glance提出镜像的请求;
- glance ——> keystone
7.glance会拿着nova给的Token向keystone认证,是否可用;
- keystone ——> glance
8.认证成功,令牌有效,glance处理nova请求
- glance ——> nova
9.glance会给nova具体的Image本身;
- nova ——> neutron
10.nova拿着Client的Token令牌和network需求向neutron发出请求;
- neutron ——> keystone
11.neutron拿着nova给的Token去向keystone认证,是否可用
- keystone ——> neutron
12.认证成功,令牌有效,neutron处理nova的请求
- neutron ——> nova
13.neutron会提供给nova的具体的网络服务本身;
- nova ——> Client
14.nova开始创建虚拟机,创建成功后返回信息给Client,然后Client会收到虚拟机创建成功的信息
keystone端口号:5000
1-4、open stack架构的keystone组件部署
-
keystone认证;
-
glance镜像;
-
nova核心组件;
-
neutron网络
2、部署keystone认证组件
2-1Keystone的配置
- 安装keystone相关软件包
[root@controller bin]# yum install -y openstack-keystone httpd mod_wsgi
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
软件包 1:openstack-keystone-9.0.2-1.el7.noarch 已安装并且是最新版本
软件包 httpd-2.4.6-40.el7.centos.4.x86_64 已安装并且是最新版本
软件包 mod_wsgi-3.4-12.el7_0.x86_64 已安装并且是最新版本
无须任何处理
- 创建keystone数据库
[root@controller bin]# mysql -uroot -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 133
Server version: 10.1.17-MariaDB MariaDB Server
Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> create database keystone;
ERROR 1007 (HY000): Can't create database 'keystone'; database exists
MariaDB [(none)]> drop database keystone
-> ;
Query OK, 37 rows affected (3.09 sec)
MariaDB [(none)]> create database keystone;
Query OK, 1 row affected (0.04 sec)
MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'localhost' identified by 'keystone';
Query OK, 0 rows affected (0.15 sec)
MariaDB [(none)]> grant all privileges on keystone.* to 'keystone'@'%' identified by 'keystone';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]>
- 生成管理员的令牌环
[root@controller /]# openssl rand -hex 10
65790615279353b4cef2
[root@controller /]#
- 编辑keystone配置文件
配置数据库连接、定义管理员初始令牌的值
[root@controller /]# vi /etc/keystone/keystone.conf
##修改如下:
admin_token = 65790615279353b4cef2
connection = mysql+pymysql://keystone:keystone@controller/keystone
provider = fernet
- 为keystone创建数据表
[root@controller /]# su -s /bin/sh -c "keystone-manage db_sync" keystone
##查看
[root@controller /]# mysql -h 192.168.10.144 -ukeystone -pkeystone -e "use keystone;show tables;"
+------------------------+
| Tables_in_keystone |
+------------------------+
| access_token |
| assignment |
| config_register |
| consumer |
| credential |
| domain |
| endpoint |
| endpoint_group |
| federated_user |
| federation_protocol |
| group |
| id_mapping |
| identity_provider |
| idp_remote_ids |
| implied_role |
| local_user |
| mapping |
| migrate_version |
| password |
| policy |
| policy_association |
| project |
| project_endpoint |
| project_endpoint_group |
| region |
| request_token |
| revocation_event |
| role |
| sensitive_config |
| service |
| service_provider |
| token |
| trust |
| trust_role |
| user |
| user_group_membership |
| whitelisted_config |
+------------------------+
[root@controller /]#
- 初始化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
- 配置Apache服务器
[root@controller /]# cp /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
cp:是否覆盖"/etc/httpd/conf.d/wsgi-keystone.conf"? y
[root@controller /]# vi /etc/httpd/conf/httpd.conf
##修改 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 :::*
[root@controller /]#
- 定义环境变量
[root@controller /]# export OS_TOKEN=babeaba15768af9f7848
[root@controller /]# export OS_URL=http://controller:35357/v3
[root@controller /]# export OS_IDENTITY_API_VERSION=3
[root@controller /]#
2-2创建域、项目、用户和角色
以下创建的为管理员环境即admin
- 创建default域
openstack domain create --description "Default Domain" default
- 创建admin项目
openstack project create --domain default --description "Admin Project" admin
- 创建admin用户
openstack user create --domain default --password-prompt admin
- 创建admin角色
openstack role create admin
- 将以上创建的关联在一起
openstack role add --project admin --user admin admin
2-3创建普通用户环境
创建方法和上面的一致,普通用户就相当于我们在阿里云上注册的一个新账号
- 创建user项目
[root@controller ~]# openstack project create --domain default --description "User Project" user
- 创建user用户
[root@controller ~]# openstack user create --domain default --password-prompt user
- 创建user角色
[root@controller ~]# openstack role create user
- 将以上三者关联到一起
[root@controller ~]# openstack role add --project user --user user user
2-4 创建服务实体和API端点信息
服务实体包括:keystone、Nova、glance、neutron等
API端点信息:访问每一个服务的URL路径
端点信息可以分为如下三类:
admin (管理员入口)
internal(私有 内部通信)
public(公有 其他通信)
- 创建keystone服务实体
[root@controller ~]# openstack service create --name keystone --description "Openstack Identity" identity
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Openstack Identity |
| enabled | True |
| id | 9be4fafed2f94284bbe0eab06bebcd55 |
| name | keystone |
| type | identity |
+-------------+----------------------------------+
- 创建public公有端点信息
[root@controller ~]# openstack endpoint create --region RegionOne identity public http://controller:5000/v3
- 创建internal私有端点信息
[root@controller ~]# openstack endpoint create --region RegionOne identity internal http://controller:5000/v3
- 创建admin管理员端点信息
[root@controller ~]# openstack endpoint create --region RegionOne identity admin http://controller:35357/v3
2-5验证测试
- 删除原先我们定义的环境变量
[root@controller ~]# unset OS_TOKEN OS_URL
##再次执行报错
[root@controller ~]# openstack service list
Missing value auth-url required for auth plugin password
##这里提示要进行用户认证,这里还没有连接到keystone
- 使用命令行的方式来连接到keystone测试
因为我们已经创建完成了admin环境和user环境
[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
Password:
##有信息返回,则表示成功
openstack service list
Missing value auth-url required for auth plugin password
##这里提示要进行用户认证,这里还没有连接到keystone
- 使用命令行的方式来连接到keystone测试
因为我们已经创建完成了admin环境和user环境
```shell
[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
Password:
##有信息返回,则表示成功