【云计算】实验3:Keystone 组件


一、实验目的

  1. 熟悉Linux基本服务配置;
  2. 理解OpenStack基本环境中各组件用途。

二、实验环境

  1. 实验资源 云主机Vultr、DigitalOCean等
  2. 软件环境 CentOS 7

三、实验内容

2.0.keystone 认证服务基本概念

1)用户与认证:
User 用户
Tenant 租户
Token 令牌
Role 角色
2)服务目录:提供服务目录,包括所有服务项与相关 API 的端点
Service 服务
Endpoint 端点

2.1.在控制节点创建 keystone 相关数据库

1)创建 keystone 数据库并授权
mysql -p123456

在数据库 MariaDB [(none)]> 提示符后执行如下命令:
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@‘localhost’ IDENTIFIED BY
‘keystone’;
GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’%’ IDENTIFIED BY ‘keystone’;
flush privileges;
show databases;
select user,host from mysql.user;
exit
在这里插入图片描述

2.2.在控制节点安装 keystone 相关软件包

1)安装 keystone 软件包
配置Apache服务,使用带有“mod_wsgi”的HTTP服务器来相应认证服务请求,端口为5000。
yum install openstack-keystone httpd mod_wsgi -y
yum install openstack-keystone python-keystoneclient openstack-utils -y
在这里插入图片描述
在这里插入图片描述
2)快速修改 keystone 配置
下面使用的快速配置方法需要安装 Openstack-utils
openstack-config --set /etc/keystone/keystone.conf database connection
mysql+pymysql://keystone:keystone@controller/keystone
openstack-config --set /etc/keystone/keystone.conf token provider fernet
其他方式查看生效配置
grep /etc/keystone/keystone.conf
例:[root@openstack01 tools]# grep/etc/keystone/keystone.conf
connection = mysql+pymysql://keystone:keystone@controller/keystone
provider = fernet
在这里插入图片描述

2.3.初始化同步 keystone 数据库

1)同步 keystone 数据库
su -s /bin/sh -c “keystone-manage db_sync” keystone
在这里插入图片描述
在这里插入图片描述
2)同步后进行测试
确定需要的表已经建立
mysql -h127.0.0.1 -ukeystone -pkeystone -e “use keystone;show tables;”

2.4.初始化 Fernet 令牌库

注:以下命令执行后没有反馈信息
keystone-manage fernet_setup --keystone-user keystone --keystone-group
keystone
keystone-manage credential_setup --keystone-user keystone
–keystone-group keystone
在这里插入图片描述

2.5.配置启动 Apache

1)修改 httpd 配置文件
vi /etc/httpd/conf/httpd.conf

ServerName controller
注:controller 是上一部分实验设定的 hostname
在这里插入图片描述
2)配置虚拟主机
创建 keystone 虚拟主机配置文件的快捷方式
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
或者可以手动编辑创建该文件
cat /usr/share/keystone/wsgi-keystone.conf
在这里插入图片描述
3)启动 httpd 并配置开机自启动
systemctl start httpd.service
systemctl status httpd.service
netstat -anptl|grep httpd
systemctl enable httpd.service
systemctl list-unit-files |grep httpd.service
若 http 启动报错,可能需关闭 selinux ;或安装 yum install openstack-selinux;
或检查 80 端口占用情况等。
在这里插入图片描述

2.6.初始化 keystone 认证服务

1)创建 keystone 用户, 初始化的服务实体和 API 端点
创建 keystone 服务实体和身份认证服务,以下三种类型分别为公共的、内部的、管理的;
需要创建一个密码 ADMIN_PASS,作为登陆 openstack 的管理员用户,这里创建为 123456
命令如下:
keystone-manage bootstrap --bootstrap-password 123456
–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
该命令,会在 keystone 数据库执增加以下内容:
1)在 endpoint 表增加 3 个服务实体的 API 端点
2)在 local_user 表中创建 admin 用户
3)在 project 表中创建 admin 和 Default 项目(默认域)
4)在 role 表创建 3 种角色,admin,member 和 reader
5)在 service 表中创建 identity 服务
在这里插入图片描述
2)临时配置管理员账户的相关变量进行管理
编写环境变量脚本
vi admin-openrc
admin-openrc 可根据自己需要进行命名,名字无需统一。admin-openrc 添加如下内容:
export OS_USERNAME=admin
export OS_PASSWORD=123456
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
export OS_IMAGE_API_VERSION=2

查看系统变量
env |grep OS_
查看 keystone 实例信息
openstack endpoint list
openstack project list
openstack user list
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.7.创建 keystone 的一般实例

1)创建一个名为 example 的 keystone 域
以下命令会在 project 表中创建名为 example 的项目
openstack domain create --description “An Example Domain” example
在这里插入图片描述
2)为 keystone 系统环境创建名为 service 的项目提供服务
以下命令会在 project 表中创建名为 service 的项目
openstack project create --domain default --description “Service Project”
service
在这里插入图片描述
3)创建 myproject 项目和对应的用户及角色
以下命令会在 project 表中创建名为 myproject 项目
openstack project create --domain default --description “Demo Project”
myproject
在这里插入图片描述
4)在默认域创建 myuser 用户
使用–password 选项为直接配置密码,使用–password-prompt 选项为交互式输入密码
直接创建用户和密码
openstack user create --domain default --password=myuser myuser
在这里插入图片描述
5)在 role 表创建 myrole 角色
openstack role create myrole
在这里插入图片描述
6)将 myrole 角色添加到 myproject 项目中和 myuser 用户组中
openstack role add --project myproject --user myuser myrole
在这里插入图片描述

2.8.验证操作 keystone 是否安装成功

1)作为管理员用户去请求一个认证的 token
测试是否可以使用 admin 账户进行登陆认证,请求认证令牌
openstack --os-auth-url http://controller:5000/v3
–os-project-domain-name Default --os-user-domain-name Default
–os-project-name admin --os-username admin token issue
在这里插入图片描述
2)使用普通用户获取认证 token
以下命令使用”myuser“用户的密码和 API 端口 5000,只允许对身份认证服务 API 的常规(非
管理)访问。
openstack --os-auth-url http://controller:5000/v3
–os-project-domain-name Default --os-user-domain-name Default
–os-project-name myproject --os-username myuser token issue
在这里插入图片描述

2.9.创建 OpenStack 客户端环境脚本

为了提升客户端操作的效率,OpenStack 支持简单的客户端环境变量脚本即 OpenRC 文
件,我这里使用自定义的文件名
1)创建 admin 用户的环境管理脚本
vi admin-openrc

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:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

env |grep OS_
在这里插入图片描述
2)测试环境管理脚本
使用脚本加载相关客户端配置,以便快速使用特定租户和用户运行客户端
source admin-openrc
3)请求认证令牌
openstack token issue
在这里插入图片描述
keystone 配置完毕


总结

  Keystone(OpenStack Identity Service)是 OpenStack 框架中负责管理身份验证、服务规则和服务令牌功能的模块。用户访问资源需要验证用户的身份与权限,服务执行操作也需要进行权限检测,这些都需要通过 Keystone 来处理。Keystone类似一个服务总线, 或者说是整个Openstack框架的注册表, 其他服务通过keystone来注册其服务的Endpoint(服务访问的URL),任何服务之间相互的调用, 需要经过Keystone的身份验证, 来获得目标服务的Endpoint来找到目标服务。
  Openstack是一个SOA架构,各个项目独立提供先关的服务,且互不依赖,如nova提供计算服务,glance提供镜像服务等。防止耦合性,且扩展性不高实际上所有的组件都依赖keystone,
  它有两个功能:
(1)用户管理:验证用户身份信息合法性
(2)服务目录管理:提供各个服务目录的(Service Catalog:包括service和endpoint)服务,无论任何服务或者客户访问openstack都要访问keystone获取服务列表,以及每个服务的endpoint
在这里插入图片描述
Keystone基本概念介绍
  1.user:User即用户,指的是使用openstack service的用户,可以是人,服务,系统,就是说只要是访问openstack service 的对象都可以称为User
  2.Credentials:是用于确认用户身份的凭证。说白了就是“信物”,可以是:
    (1):用户名和密码
    (2):用户名跟API Kye(秘钥)#(1)(2)用户第一次确认身份的方法
    (3):一个keystone分配的身份的token #(3)用户已经确认身份后的方法 (token是有时间限制的)
  3.Authentication:
    (1):用户身份验证的过程。keystone服务通过检查用户的Credentials来确定用户的身份
    (2):第一次验证身份是使用用户名与密码或者用户名与API Key的形式。当用户的Credentials被验证后,keystone会给用户分配一个Authentication token 供该用户的后续请求操作(返回的token中就包含User的Role列表)
  4.Token
    (1):是一串数字字符串,当用户访问资源时需要使用的东西,在keystone中主要是引入令牌机制来保护用户对资源的访问,同时引入PKI、PKIZ、fernet、UUID其中一个随机加密产生一串数字,对令牌加以保护
    (2):token并不是长久有效的,是有时效性的,在有效的时间内可以访问资源。
  5.Role:
    (1):本身是一堆ACL集合,主要用于权限的划分。
    (2):可以给User指定Role,是user获得role对应的操作权限。
    (3):系统默认使用管理Role的角色 管理员用户:admin 普通用户:member(老版本) user(新版本)
    (4):user验证的时候必须带有Project。老版本叫(Tenant)
在这里插入图片描述
在这里插入图片描述
此图为虚拟机创建过程图
  组件组件包括:user、keystone、nova、glance、neutron虚拟机创建必备组件,keystone全局认证完后,nova获取资源,nova通过调度算法将资源调度到裸金属上(调度算法:资源集合,根据算法或者打分机制,根据权重分配到后端最高的节点)

  用户通过命令行或者horizon控制面板的方式登录openstack,凭借自己的证书(credentials)给keystone验证。
  Keystone对用户的证书验证,验证通过则会发布一个令牌(token)和用户所需服务的位置点(endpoint)给用户。用户得到了位置点(endpoint)之后,携带自己的令牌,向nova发起请求,请求创建虚拟机。nova会拿着用户的token向keystone进行认证,看是否允许用户执行这样的操作。
  keystone认证通过之后,返回给nova,nova即开始执行创建虚拟机的请求。首先需要镜像资源,nova带着令牌(token)和所需要的镜像名向glance提出镜像资源的请求。
  glance会拿着token去向keystone进行认证,看是否允许提供镜像服务。keystone认证成功后,返回给glance。glance向nova提供镜像服务。
  创建虚拟机还需要网络服务,nova携带token向neutron发送网络服务的请求
  neutron拿着nova给的token向keystone进行认证,看是否允许向其提供网络服务。keystone认证成功后,返回给nuetron。nuetron则给nova提供网络规划服务。
  网络服务。keystone认证成功后,返回给nuetron。nuetron则给nova提供网络规划服务。
  nova获取了镜像和网络之后,开始创建虚拟机,通过hypervisior可调用底层硬件资源进行创建。创建完成返回给用户,成功执行了用户的请求。

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值