首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >玩转企业云计算平台系列(三):Openstack 身份认证服务 Keystone

玩转企业云计算平台系列(三):Openstack 身份认证服务 Keystone

作者头像
民工哥
发布2023-12-28 11:27:08
发布2023-12-28 11:27:08
2.1K00
代码可运行
举报
运行总次数:0
代码可运行

Keystone概念

Keystone (OpenStack Identity Service)是OpenStack中的一个独立的提供安全认证的模块,主要负责openstack用户的身份认证、令牌管理、提供访问资源的服务目录、以及基于用户角色的访问控制。

Keystone类似一个服务总线,或者说是整 个Openstack框架的注册表,其他服务通过keystone来注册其服务的Endpoint (服务访问的URL),任何服务之间相互的调用,需要经过Keystone的身 份验证,来获得目标服务的Endpoint来找到目标服务。

Keystone服务在Openstack架构中的位置:

Keystone作用

在Openstack中,Ketstone负责用户认证和服务目录两大功能的实现,相当于一个注册中心,主要有以下功能:

  • 1、用户与认证,包括用户权限与用户行为跟踪。
    • 身份认证:负责令牌的发放和校验
    • 用户授权:授权用户有指定的可执行动作的范围
    • 用户管理:管理用户的账户
  • 2、服务目录,即提供一个服务目录,包括所有的服务项和相关API的端点。
    • 服务目录:提供可用服务的API端点位置
  • 3、SOA相关知识。

Keystone基本架构

更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

Keystone的管理对象

Keystone服务贯穿整个架构,在进行身份认证服务的整个流程中,有几个重要的概念。

  • 用户(user):指的是使用openstack架构的用户。
  • 证书(credentials):用于确认用户身份的凭证,证明自己是自己,包括用户的用户名和密码,或是用户名和API密钥,或者身份管理服务提供的认证令牌。
  • 认证(authentication):确定用户身份的过程。
  • 项目(project):可以理解为一个人,或服务所拥有的资源的集合。
  • 角色(role):用于划分权限,通过给user指定role,使user获得role对应操作权限
  • 服务(service):openstack架构的组件服务,如nova、neutron、cinder、swift、glance等。
  • 令牌(token):由字符串表示,作为访问资源的凭证,是用户的身份/权限证明文件;token决定了用户的权限范围,在指定的权限内进行操作;也包括令牌的有效期,在指定的时间范围内用户才有这些权限。
  • 端点(endpoint):一个可以通过网络来访问和定位某个openstack service的地址,即用户创建一个项目过程中需要的各个服务资源的位置
虚拟机创建流程
工作流程
  • 用户通过命令行或者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提供网络规划服务。
  • nova获取了镜像和网络之后,开始创建虚拟机,通过hypervisior可调用底层硬件资源进行创建。创建完成返回给用户,成功执行了用户的请求。

安装 Keystone

数据库安装与设置
代码语言:javascript
代码运行次数:0
运行
复制
yum install -y mariadb mariadb-server python2-PyMySQL

完成安装。 之后,我们为Openstack增加MySQL数据库的配置,在/etc/my.cnf.d/目录下,新创建openstack.cnf文件,并写入如下内容:

代码语言:javascript
代码运行次数:0
运行
复制
[mysqld]
bind-address = 192.168.136.101
default-storage-engine = innodb  #默认存储引擎[innodb]
innodb_file_per_table       # 使用独享表空间
max_connections = 4096          #最大连接数是4096 (默认是1024)
collation-server = utf8_general_ci  #数据库默认校对规则
character-set-server = utf8 #默认字符集

之后,我们需要创建Openstack运行所需要的数据库,并授予响应的权限,进入mysql后,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
create database keystone;
grant all on keystone.* to 'keystone'@'localhost' identified by 'keystone';
grant all on keystone.* to 'keystone'@'%' identified by 'keystone';

create database glance;
grant all on glance.* to 'glance'@'%' identified by 'glance';
grant all on glance.* to 'glance'@'localhost' identified by 'glance';

create database nova;
grant all on nova.* to 'nova'@'localhost' identified by 'nova';
grant all on nova.* to 'nova'@'%' identified by 'nova';

create database nova_api;
grant all on nova_api.* to 'nova_api'@'localhost' identified by 'nova_api';
grant all on nova_api.* to 'nova_api'@'%' identified by 'nova_api';

create database neutron;
grant all on neutron.* to 'neutron'@'%' identified by 'neutron';
grant all on neutron.* to 'neutron'@'localhost' identified by 'neutron';

flush privileges;

在上述配置中,keystone为认证服务的数据库,glance为镜像数据库,nova为虚拟化数据库,neutron为网络资源管理数据库。上述命令执行过程如下:

更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

安装、配置keystone

直接采用YUM的方式进行安装,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
yum install -y openstack-keystone httpd mod_wsgi
keystone配置

在keystone安装完成后,我们还需要进行keystone的配置。但是在进行keystone的配置之前,我们还需要先生成一个token,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openssl rand -hex 10

会生成一串字符串,该命令执行情况如下:

keystone的配置文件是/etc/keystone/keystone.conf,进入该文件后,我们需要改动以下4个地方:

  • 首先,我们找到[default]模块,将该模块下的admin_token字段修改为我们刚刚复制的字符串内容。
  • 其次,我们找到[database]模块,在该模块下添加如下内容:
代码语言:javascript
代码运行次数:0
运行
复制
connection = mysql+pymysql://keystone:keystone@192.168.136.101/keystone

在上述配置中,keystone:keystone表示MySQL数据库的用户名和密码,最后的/keystone表示MySQL的数据库。我们可以根据自己的实际配置进行灵活修改。 再次,我们找到[token]模块,在该模块下添加如下内容:

代码语言:javascript
代码运行次数:0
运行
复制
provider = fernet
driver = memcache

表示使用fernet的令牌提供方式和memcache的数据库存储。最后,我们找到[memcache]模块,在该模块下添加如下内容:

代码语言:javascript
代码运行次数:0
运行
复制
servers = 192.168.136.101:11211

最后,我们完成上述配置后,实际有用的配置如下所示:

这样,我们的keystone就配置完成了。

keystone数据库初始化

在keystone配置完成后,我们还需要进行keystone的数据库初始化配置。执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
su -s /bin/sh -c "keystone-manage db_sync" keystone

等待该命令执行结束后,我们来查看数据库初始化的效果,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
mysql -h 192.168.136.101 -ukeystone -pkeystone -e "use keystone;show tables;"

结果如下所示:

从上图可以看出,我们的keystone数据库初始化成功!

Fernet Keys初始化

最后,我们还需要初始化Fernet Keys,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

就可以在/etc/keystone/目录下生成fernets-keys目录,在该目录下就存放了线管的Fernet证书。

Openstack Keystone配置环境变量

在进行Keysrtone的配置之前,我们需要先创建环境变量,这样我们才能成功连接到Keystone中。执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
export OS_TOKEN=e4f523fef7082712e949
export OS_URL=http://192.168.136.101:35357/v3
export OS_IDENTITY_API_VERSION=3

可以设置这三个环境变量。其中,第一个OS_TOKEN是我们在Keystone配置文件中设置的admin_token的值,OS_URL是本机的IP地址,这两个参数大家在使用时可以根据自己的实际情况进行修改。

注意,只有完成这三个环境变量的创建,才能够进行下步的操作,否则Openstack会报错!更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

帮助命令

在openstack中,使用–help参数来显示一条命令的帮助,例如,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack --help

可以显示所有openstack的相关命令。该命令执行结果(部分)如下所示:

当然,我们也可以针对单个模块,来查看命令帮助,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack user --help

可以显示openstack user模块的相关命令,该命令执行结果如下所示:

同样的,我们执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack service --help

也可以显示service模块的相关命令,该命令执行结果如下所示:

这样,当我们遇到不会的openstack命令后,就可以使用–help参数来查看具体的使用方式了。接下来,我们就可以正式进行Keystone域、项目、用户和角色的创建了。

域、项目、用户和角色的创建

首先,我们先创建一个Default域,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack domain create --description "Default" Default

即可创建Default的域,在上述命令中,–description参数后面是对该域的描述,不具有实际作用,该命令执行结果如下:

接下来,我们在该Default域下创建admin的项目,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack project create --domain Default --description "admin" admin

该命令执行结果如下:

在这里,我们的admin项目是专门用于Openstack管理的项目,通过该项目可以管理Openstack中所有的云主机。

接下来,我们尝试在Default域中,创建admin用户,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack user create --domain Default --password-prompt admin

即可创建名为admin的用户,该命令执行后,会输入两次密码,作为该用户的登录密码。该命令执行情况如下所示:

接下来,我们需要创建admin的角色,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack role create admin

该命令执行结果如下所示:

之后,我们需要将admin用户添加到admin项目上,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack role add --project admin --user admin admin

在上述命令中,–project参数指定了项目明,–user参数则指定了用户名,最后的admin是我们刚刚创建的Role。

这样,我们的Default域就配置完成了。接下来,我们再以基本相同的方式,来配置一个demo域。

首先,我们先创建demo域,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack project create --domain Default --description "Demo" demo

该命令执行情况如下所示:

之后,我们在Default域中,创建user-demo用户,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstacl user create --domain Default --password-prompt user-demo

该命令执行结果如下所示:

接下来,我们创建名为user的角色,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack role create user

该命令执行结果如下所示:

最后,我们将demo用户添加到demo项目中,并授予user权限,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack role add --project demo --user user-demo user

这样我们的Keystone域、项目、用户和角色的创建就完成了。更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

Keystone中Nova、Neutron与Glance用户的创建与授权

Service服务项目创建

在Openstack中,各个服务需要访问Keystone,而访问Keystone的需要进行认证。为了配置各个服务对Keystone访问的认证,我们需要为每个服务创建用户,并且每个用户还要属于一个项目。接下来,我们就需要创建这个Server项目,并且给每个服务单独创建一个用户。

首先,我们来创建service服务项目,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack project create --domain Default --description "Service" service

该命令执行结果如下所示:

Nova、Neutron与Glance用户的创建与授权

接下来,我们要为Glance、Nova和Neutron三个服务分别创建用户,并进行授权。

Glance用户的创建命令如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
openstack user create --domain Default --password-prompt glance

该命令执行结果如下所示:

对Glance用户进行授权的命令如下:

代码语言:javascript
代码运行次数:0
运行
复制
openstack role add --project service --user glance admin

Nova的用户创建和授权命令如下:

代码语言:javascript
代码运行次数:0
运行
复制
openstack user create --domain Default --password-prompt nova
openstack role add --project service --user nova admin

上述两条命令执行结果如下:

Neutron的用户创建和授权命令如下:

代码语言:javascript
代码运行次数:0
运行
复制
openstack user create --domian Default --password-prompt neutron
openstack role add --project service --user neutron admin

上述两条命令执行结果如下:

这样,我们就实现了Openstack的Keystone中Nova、Neutron与Glance用户的创建与授权了。

Keystone服务注册

Keystone 服务创建

首先,我们来创建identity服务,这样当其他服务需要注册时,就需要寻找我们创建的identity服务。执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack service create keystone --description "Openstack Keystone" identity

即可创建名为identity的Service服务了,该命令执行结果如下所示:

Keystone端点创建

接下来,我们还要创建Keystone的Endpoint,我们需要分别创建public、private以及admin三种权限的端点。公共(public)端点的创建命令如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
openstack endpoint create --region RegionOne identity http://192.168.136.101:5000/v3

该命令执行结果如下所示:

内部(Internal)端点的创建命令如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
openstack endpoint create --region RegionOne identity internal http://192.168.136.101:5000/v3

该命令执行结果如下所示:

admin端点创建命令如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
openstack endpoint create --region RegionOne identity admin http://192.168.136.101:35357/v3

注意,在上述命令中,由于admin的URL与Internal和Public URL的分离性,因此在这里我们将其端口配置为35357。该命令执行结果如下所示:

Keystone安装结果检验

在完成上述步骤后,我们的Keystone就已经安装完毕了,接下来,让我们检验一下Keystone的安装结果。

首先,我们先删除之前设置的环境变量OS_TOKEN以及OS_URL。(注:OS_TOKEN必须删除,OS_URL也可以不删除,相应的在下面的命令中,就可以省略–os-auth-url参数了)执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
unset OS_TOKEN OS_URL

接下来,我们先测试admin用户,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack --os-auth-url http://192.168.136.101:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue

在弹出的对话框中输入密码,结果如下所示:

从上图可知,我们的admin用户安装成功!接下来,我们测试一下user-demo用户,执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack --os-auth-url http://192.168.136.101:5000/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name demo --os-username user-demo token issue

同样的,在弹出的对话框中输入user-demo用户的密码,结果如下所示:

从上图可知,我们的user-demo用户安装成功!更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

环境变量脚本使用

最后,为了我们更方便的使用Keystone,我们可以把admin用户和user-demo用户的相关参数写成脚本文件,这样当我们要使用该用户登录openstack时,执行该脚本,就可以直接登录使用,从而免去了上述很长的命令了。

admin用户的脚本文件admin-openstack.sh内容如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_AUTH_URL=http://192.168.136.101:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

我们执行该脚本后,然后执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack token issue

结果如下所示:

同理,我们也可以配置user-demo用户的脚本文件demo-openstack.sh,其内容如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=user-demo
export OS_PASSWORD=user-demo
export OS_AUTH_URL=http://192.168.136.101:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

执行该脚本文件后,我们执行命令:

代码语言:javascript
代码运行次数:0
运行
复制
openstack token issue

执行结果如下所示:

从以上结果看出,我们的admin用户和user-demo用户的脚本均配置成功!

参考文章:https://blog.csdn.net/KY06_Xxy/article/details/110959473 https://blog.csdn.net/weixin_40228200/article/details/125079572 https://blog.csdn.net/weixin_40228200/article/details/125108273

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 民工哥技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Keystone概念
  • Keystone作用
  • Keystone基本架构
  • Keystone的管理对象
    • 虚拟机创建流程
    • 工作流程
  • 安装 Keystone
    • 数据库安装与设置
    • 安装、配置keystone
    • Openstack Keystone配置环境变量
    • 帮助命令
  • 域、项目、用户和角色的创建
  • Keystone中Nova、Neutron与Glance用户的创建与授权
    • Service服务项目创建
    • Nova、Neutron与Glance用户的创建与授权
  • Keystone服务注册
    • Keystone 服务创建
    • Keystone端点创建
    • Keystone安装结果检验
    • 环境变量脚本使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档