点击下方名片,设为星标

回复“1024”获取2TB学习资源!

前面介绍了 Openstack 入门基础环境部署等相关的知识点,今天我将详细的为大家介绍 Openstack 身份认证服务 Keystone相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发分享朋友圈支持一波!!!

Keystone概念

Keystone (OpenStack Identity Service)是OpenStack中的一个独立的提供安全认证的模块,主要负责openstack用户的身份认证、令牌管理、提供访问资源的服务目录、以及基于用户角色的访问控制。6bd57379d4671120f0f478e49f56b504.pngKeystone类似一个服务总线,或者说是整 个Openstack框架的注册表,其他服务通过keystone来注册其服务的Endpoint (服务访问的URL),任何服务之间相互的调用,需要经过Keystone的身 份验证,来获得目标服务的Endpoint来找到目标服务。

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

Keystone作用

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

  • 1、用户与认证,包括用户权限与用户行为跟踪。

    • 身份认证:负责令牌的发放和校验

    • 用户授权:授权用户有指定的可执行动作的范围

    • 用户管理:管理用户的账户

  • 2、服务目录,即提供一个服务目录,包括所有的服务项和相关API的端点。

    • 服务目录:提供可用服务的API端点位置

  • 3、SOA相关知识。

Keystone基本架构

8930d4e8f4cc1dcab4eb55996f53874f.png更多关于云计算服务 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的地址,即用户创建一个项目过程中需要的各个服务资源的位置

虚拟机创建流程
72214ea2ad324ec9048dc517ec56b402.png
工作流程
6fd8871041d20f32c41f81541527d620.png
  • 用户通过命令行或者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

数据库安装与设置
yum install -y mariadb mariadb-server python2-PyMySQL

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

[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后,执行命令:

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为网络资源管理数据库。上述命令执行过程如下:
c5fdfc59990ff6af6776f605ef32842b.png更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

安装、配置keystone

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

yum install -y openstack-keystone httpd mod_wsgi
keystone配置

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

openssl rand -hex 10

会生成一串字符串,该命令执行情况如下:
ca3d85f0d941ab338b21db072082a737.pngkeystone的配置文件是/etc/keystone/keystone.conf,进入该文件后,我们需要改动以下4个地方:

  • 首先,我们找到[default]模块,将该模块下的admin_token字段修改为我们刚刚复制的字符串内容。

  • 其次,我们找到[database]模块,在该模块下添加如下内容:

connection = mysql+pymysql://keystone:keystone@192.168.136.101/keystone

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

provider = fernet
driver = memcache

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

servers = 192.168.136.101:11211

最后,我们完成上述配置后,实际有用的配置如下所示:
93e3f682cd53b1136bb63326f09574bd.png
这样,我们的keystone就配置完成了。

keystone数据库初始化

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

su -s /bin/sh -c "keystone-manage db_sync" keystone

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

mysql -h 192.168.136.101 -ukeystone -pkeystone -e "use keystone;show tables;"

结果如下所示:
e8e599b7cc765a344a0becbf0b5f2dec.png从上图可以看出,我们的keystone数据库初始化成功!

Fernet Keys初始化

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

keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone

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

Openstack Keystone配置环境变量

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

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参数来显示一条命令的帮助,例如,执行命令:

openstack --help

可以显示所有openstack的相关命令。该命令执行结果(部分)如下所示:57a772de20a473be01dbc9a56d916bbd.png当然,我们也可以针对单个模块,来查看命令帮助,执行命令:

openstack user --help

可以显示openstack user模块的相关命令,该命令执行结果如下所示:
09419835fb66125e561892bcb05f3d5d.png同样的,我们执行命令:

openstack service --help

也可以显示service模块的相关命令,该命令执行结果如下所示:
b01ed1d6411e36fac83dc6c1987eb2c1.png这样,当我们遇到不会的openstack命令后,就可以使用–help参数来查看具体的使用方式了。接下来,我们就可以正式进行Keystone域、项目、用户和角色的创建了。

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

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

openstack domain create --description "Default" Default

即可创建Default的域,在上述命令中,–description参数后面是对该域的描述,不具有实际作用,该命令执行结果如下:
98e06209411fb80a1c158bdbcdfc807f.png接下来,我们在该Default域下创建admin的项目,执行命令:

openstack project create --domain Default --description "admin" admin

该命令执行结果如下:
563b8b5df7176916ce8c54f1304867eb.png在这里,我们的admin项目是专门用于Openstack管理的项目,通过该项目可以管理Openstack中所有的云主机。

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

openstack user create --domain Default --password-prompt admin

即可创建名为admin的用户,该命令执行后,会输入两次密码,作为该用户的登录密码。该命令执行情况如下所示:
9d565def993ba0dd1476ce2d53250c1e.png接下来,我们需要创建admin的角色,执行命令:

openstack role create admin

该命令执行结果如下所示:
6206f48a8b89ff4a4d6dcd6c05f3ec2e.png之后,我们需要将admin用户添加到admin项目上,执行命令:

openstack role add --project admin --user admin admin

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

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

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

openstack project create --domain Default --description "Demo" demo

该命令执行情况如下所示:
c0a411a7526d51a76e69de56ace4dc0a.png之后,我们在Default域中,创建user-demo用户,执行命令:

openstacl user create --domain Default --password-prompt user-demo

该命令执行结果如下所示:
b6bd1b573af5ea8d99489b279421c1b2.png接下来,我们创建名为user的角色,执行命令:

openstack role create user

该命令执行结果如下所示:
20f4ee2e2b5fed32bc0fca3b88ff2a4c.png最后,我们将demo用户添加到demo项目中,并授予user权限,执行命令:

openstack role add --project demo --user user-demo user

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

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

Service服务项目创建

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

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

openstack project create --domain Default --description "Service" service

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

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

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

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

openstack user create --domain Default --password-prompt glance

该命令执行结果如下所示:
c9ac2e3621d0ff257eeb02df9af0fbcd.png对Glance用户进行授权的命令如下:

openstack role add --project service --user glance admin

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

openstack user create --domain Default --password-prompt nova
openstack role add --project service --user nova admin

上述两条命令执行结果如下:
13fdbcce1b84cd44de11782c9a215a13.pngNeutron的用户创建和授权命令如下:

openstack user create --domian Default --password-prompt neutron
openstack role add --project service --user neutron admin

上述两条命令执行结果如下:
73108ac299e8b0b799325bd1ddaab884.png这样,我们就实现了Openstack的Keystone中Nova、Neutron与Glance用户的创建与授权了。

Keystone服务注册

Keystone 服务创建

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

openstack service create keystone --description "Openstack Keystone" identity

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

Keystone端点创建

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

openstack endpoint create --region RegionOne identity http://192.168.136.101:5000/v3

该命令执行结果如下所示:
b29ba4694763b2d432ba0243c44eadf1.png内部(Internal)端点的创建命令如下所示:

openstack endpoint create --region RegionOne identity internal http://192.168.136.101:5000/v3

该命令执行结果如下所示:
3d91b7e48a5d85bb3a2276122f15076c.pngadmin端点创建命令如下所示:

openstack endpoint create --region RegionOne identity admin http://192.168.136.101:35357/v3

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

Keystone安装结果检验

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

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

unset OS_TOKEN OS_URL

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

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

在弹出的对话框中输入密码,结果如下所示:
cd4f56ab69969a2ce6adb5b7208192b2.png从上图可知,我们的admin用户安装成功!接下来,我们测试一下user-demo用户,执行命令:

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用户的密码,结果如下所示:
e5cf956f02a7fcda40462a2d9d6686ed.png从上图可知,我们的user-demo用户安装成功!更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

环境变量脚本使用

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

admin用户的脚本文件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=admin
export OS_AUTH_URL=http://192.168.136.101:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

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

openstack token issue

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

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

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

openstack token issue

执行结果如下所示:
918704f825b8d6449eb3e55450a2699a.png从以上结果看出,我们的admin用户和user-demo用户的脚本均配置成功!更多关于云计算服务 Openstack 系列的学习文章,请参阅:企业云计算平台 Openstack ,本系列持续更新中。

参考文章: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

读者专属技术群

构建高质量的技术交流社群,欢迎从事后端开发、运维技术进群(备注岗位,已在技术交流群的请勿重复添加)。主要以技术交流、内推、行业探讨为主,请文明发言。广告人士勿入,切勿轻信私聊,防止被骗。

扫码加我好友,拉你进群

0de7c4a4540caad803fab07725ede41f.jpeg

推荐阅读 点击标题可跳转

一个比 Navicat 更强大、更牛逼的客户端工具

打败Notion的年度笔记软件!到底还有多少牛X功能

扛不住了?暴跌 36%!这是要凉啊……

被约谈!两天走人。。。被裁是一种什么体验?

2023 最受 IT 公司欢迎的 30 款开源软件!

别总写代码!这 130 个网站比涨工资都重要!

c6c733c807a21c4d8033670328d4e3b9.png

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下在看,加个星标,这样每次新文章推送才会第一时间出现在你的订阅列表里。点在看支持我们吧!

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐