版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
私有云基础架构与运维项目5OpenStack云平台Keystone认证服务
OpenStack云平台是由众多组件构成的一套复杂系统。Keystone为OpenStack平台提供统一的身份认证服务,确保平台的安全性,满足不同用户和服务的需求,通过授权管理,Keystone能够控制用户对资源的访问权限,哪些组件可以被允许连入系统,哪些组件允许用户使用其功能,都需要认证服务去判断和决定,防止未经授权的访问和操作。可以说Keystone服务是OpenStack云平台的第一道屏障,因此Keystone是OpenStack云平台中第一个需要安装的服务。1.知识目标(1)了解Keystone的功能;(2)理解用户、角色、服务、端点等专业名词;(3)深刻理解Keystone的组件架构;(4)掌握Keystone认证的基本步骤和服务的部署过程。2.技能目标(1)具备安装与配置Keystone服务的能力;(2)能够解决Keystone服务的问题;(3)能够具备管理Keystone服务的能力。3.素质目标(1)具备自我学习、探究学习和创新学习的能力;(2)养成探索问题、独立思考解决综合问题的方法和能力;(3)具备资料检索、举一反三、触类旁通的方法能力,提升职业迁移与长远目标发展能力。学习目标学习导图目录任务5.1项目需求分析任务5.2认识Keystone服务任务5.3部署Keystone服务项目需求分析
任务5.1项目需求分析
OpenStack是开源的云计算管理平台项目,是一系列软件开源项目的组合。复杂的生态系统包含大量的用户、服务和功能。为了确保用户身份的真实性,保护资源免受未经授权的访问,OpenStack云平台需要具备身份认证功能,阻止未经授权的用户访问敏感资源,从而保护云计算平台的安全性。OpenStack云平台具备不同的组件,它们对应着不同的服务、功能,哪些组件和服务可以被哪些用户进行怎么样的操作,这些都是OpenStack云平台关心的问题,随着OpenStack云平台功能性的不断扩展,组件不断的增加,其对安全性、稳定性和扩展性的要求也在不断提高。因此在OpenStack云平台生态系统中需要一个核心组件,全面负责云平台的身份认证、服务目录和访问控制功能,保证服务资源的授权管理,确保OpenStack云平台的安全性、稳定性和可扩展性,使得用户能够安全、有效地访问和操作云计算资源。Keystone(OpenStackIdentityService)是OpenStack中的一个独立的提供安全认证的模块,主要负责OpenStack用户的身份认证、授权管理,可以对访问资源的服务目录以及基于用户角色进行访问控制。它确保所有用户和服务之间的交互受到严格的身份验证和权限控制,确保了整个云计算平台的安全性。随着OpenStack作为开源云平台使用性越来越广泛,使得OpenStack云平台的功能性和扩展性也越来越强大。因此,作为OpenStack云平台的第一道安全防线,Keystone服务也同时具备高可用性与容错性的特性,同时在开放性和可定制性上也有很好表现。Keystone具有高可用性和容错性的特性,能够在多个节点之间进行身份认证和授权的负载均衡和故障恢复。这确保了即使在某个节点出现故障的情况下,Keystone仍然能够继续提供服务,从而保证了OpenStack平台的可用性和稳定性。项目需求分析任务5.2认识Keystone服务5.2.1Keystone认证服务以及关键对象Keystone服务为OpenStack云平台提供认证服务和授权管理的时候,是通过关键对象来进行关联和绑定的,这些关联对象包括项目、服务、用户、角色和端点。用户通过角色与项目关联,定义了用户在特定项目中的权限。服务代表了OpenStack的不同组件,而端点(Endpoint)则定义了不同服务的实际访问地址,Keystone服务是通过端点来保证服务的权限。下面针对Keystone服务的关键对象进行具体的说明。5.2.1Keystone认证服务以及关键对象
1.项目(Project)在OpenStack中,项目(Project)是一个人或服务所拥有的资源集合。这些资源可以是计算资源(如虚拟机)、网络资源(如虚拟网络、IP地址)、存储资源(如块存储、对象存储)等。不同的项目之间资源是隔离的,这意味着一个项目中的资源不能被其他项目直接访问或使用。
2.服务(Service)在OpenStack架构中,服务是指云平台中各个组件所提供的特定功能或服务。这些服务可以是计算服务、存储服务、网络服务、镜像服务等,它们共同构成了OpenStack云平台的完整功能集。每个服务都有自己的API接口,用于与其他服务或用户进行交互。在OpenStack云平台中,每个服务都需要在Keystone中进行注册,以便其他服务或用户能够发现和访问它们。注册过程中,服务会提供其API接口的端点信息(如URL),这些信息会被存储在Keystone的服务目录中。当用户或另一个服务需要访问某个服务时,它会首先向Keystone查询该服务的端点信息,然后根据这些信息发起请求。5.2.1Keystone认证服务以及关键对象
3.端点(Endpoint)端点是服务的网络访问点,定义了服务接口的访问URL。每个服务可以有多个端点,通常包括公共端点(用于外部访问)、内部端点(用于内部通信)和管理端点(用于管理操作)。如果现在一个用户需要访问Nova组件,这就需要先去找Keystone服务,因为Keystone服务中记录着去Nova的路径,Keystone服务收到用户的请求后,开始验证用户的授权,授权通过后,就会给用户去往Nova的路径(这里叫端点Endpoint),这样用户就访问到了Nova。Keystone组件对外提供服务的端点都是“http://控制节点IP地址:5000/v3”。
4.用户(User)用户是使用OpenStack云服务的实体,这些实体可以是个人、系统或服务。在OpenStack的身份服务(keystone)中,用户被表示为具有特定身份验证信息的API消费者。每个用户都拥有一个唯一的用户名和密码(或其他身份验证机制,如API密钥),用于在云平台上进行身份验证和授权。5.2.1Keystone认证服务以及关键对象
5.角色(Role)角色是OpenStack云平台中用于划分权限的一种机制。通过给用户指定角色,使用户获得角色对应的操作权限。在OpenStack的keystone数据库中定义了各种角色,这些角色代表了不同的权限集合。因此,角色是实现权限控制的基础。在OpenStack中,不同的角色拥有不同的权限,这些权限决定了用户能够执行哪些操作。例如,admin角色通常拥有最高权限,可以执行云平台上的所有操作,而普通用户角色则可能只能执行一些基本的操作。
6.认证(Authentication)、凭据(Credentials)认证是Keystone验证用户身份的过程,凭据是认证用户身份时需要的身份验证数据。只有经过验证通过的用户才能访问和操作云平台上的资源。用户认证的过程如下。(1)用户提交凭证:用户通过命令行、Web界面或其他方式登录OpenStack云平台时,需要提交一组凭证(如用户名和密码、API密钥等)以证明自己的身份。(2)keystone验证凭证:keystone服务接收用户提交的凭证后,会对其进行验证。验证过程包括检查凭证的有效性、是否过期以及是否与数据库中的记录匹配等。(3)发放令牌(Token):如果凭证验证成功,keystone服务会为用户发放一个认证令牌。这个令牌是一个加密的字符串,作为用户访问资源的“通行证”。(4)后续请求验证:用户在随后的请求中需要使用这个令牌来访问OpenStack云平台上的资源。每次请求时,keystone服务都会验证令牌的有效性,以确保用户具有访问资源的权限。5.2.1Keystone认证服务以及关键对象
7.令牌(Token)令牌是一个加密字符串,是访问资源的“通行证”。用户成功认证后获得的一种临时的认证凭证,每次使用OpenStack中的某个服务都要先验证持有该令牌的用户是否有权使用该服务(如果不是VIP用户,则不能进入VIP区)。Token决定了用户的权限范围,在指定的权限内进行操作;也包括令牌的有效期,在指定的时间范围内用户才有这些权限。
8.组(Group)组是一部分用户的集合,通过分配角色到组,可以批量向在该组中的所有用户分配权限。如果用户很多,给每个用户单独分配权限非常麻烦,可以将若干个用户分为一组,如VIP组、office组等,只需要给组分配权限,用户加入某个组就自动拥有了这个组的所有权限。
9.域(domain)域是项目和用户的集合。目的是为身份实体定义管理界限。域可以表示个人、公司或操作人员所拥有的空间。用户可以被授予某个域的管理员角色,域管理员能够在域中创建项目、用户和组,并将角色分配给域中的用户和组。5.2.2Keystone关键对象之间的关系
1.域、项目、角色、用户、组的关系域是用户和项目的集合,项目是资源的集合,角色是权限的集合,组是用户的集合。角色可以分配给用户或者组,这个用户和组里的所有用户就获得了该角色的所有权限。获得了权限的用户就可以使用和管理同域中的项目提供的资源。5.2.2Keystone关键对象之间的关系
2.OpenStack中默认存在的域、项目、角色、用户
(1)域:OpenStack默认存在“Default”域,如果没有另外创建域,所有项目和用户都将属于“Default”域。
(2)项目:OpenStack自带“admin”项目。
(3)角色:OpenStack自带两个预定义角色,即“admin”和“member”,“member”角色集合了普通用户的访问权限,而“admin”角色集合了对整个OpenStack进行管理的特权。
(4)用户:OpenStack中自带“admin”用户,该用户属于“admin”项目并且分配有“admin”角色。5.2.3Keystone服务的基本架构Keystone服务由不同的服务模块组成,每个模块承担了各自的任务,它们各司其职,一起组成了一个有机整体。Keystone服务主要提供令牌模块、目录模块、验证模块和策略模块四个方面的核心服务。5.2.3Keystone服务的基本架构
1.令牌模块:验证并管理用于验证身份的令牌。Keystone会颁发给用户两种类型的令牌。一种无明确访问范围的令牌(主要目的是用来保存用户的credential),可以基于此令牌获取有确定访问范围的令牌。用户选择要访问的项目,继而可以获取与项目或者域绑定的令牌,只有通过与某个特定项目或者域相绑定的令牌,才可以访问此项目或者域内的资源。令牌只在有限的时间内有效。
2.目录模块(Catalog):目录服务对外提供一个服务的查询目录,或者说是每个服务的可访问端点列表。服务目录存有所有服务的端点信息,服务之间的资源访问首先需要获取到该资源的端点信息(通常是一些URL列表)然后才可以根据该信息进行资源访问。从目前的版本来看,Keystone提供的服务目录是与有访问范围的令牌同时返回给用户的。
3.验证模块:对用户的身份进行验证。认证服务同时提供了与该用户相关的元数据。
4.策略模块:Keystone的策略模块主要负责基于规则的授权决策,它提供了一个灵活的机制来控制对OpenStack资源的访问。策略模块通过定义一系列规则,这些规则决定了哪些用户或用户组在哪些条件下可以执行哪些操作。这些规则是基于角色的访问控制(RBAC)的一种实现方式,但比传统的RBAC更加灵活和强大。5.2.3Keystone服务的基本架构Keystone的策略模块具有高度的灵活性和可扩展性。管理员可以根据需要添加、修改或删除规则,以适应不断变化的安全需求和业务场景。此外,策略模块还支持自定义规则逻辑和复杂的条件判断,以满足更高级别的访问控制需求。通过这几个模块提供的服务,Keystone在用户与服务之间搭起了一道桥梁,即用户首先从Keystone获取令牌以及服务列表,当用户访问服务时,发送自己的令牌,受访问的服务向Keystone求证令牌的合法性,来决定访问最终的有效性。5.2.4Keystone服务的认证过程Keystone服务的管理采用层次结构,主要分为服务层、数据库层、消息队列层、认证层、授权层和策略层共计6层。Keystone的管理层次结构决定了如何组织和管理Keystone中的资源和权限。通过对Keystone的认证、授权、策略和数据库等层级进行管理,可以有效地保护系统资源和数据的安全性,提高系统的可靠性和稳定性。用户给Keystone提供凭证用于登录系统,登录成功后Keystone将签发令牌给用户,以后每次调用其他组件服务的时候都要出示令牌并由Keystone对令牌进行验证通过后才能继续使用服务。5.2.4Keystone服务的认证过程(1)用户通过命令行或者horizon控制面板的方式登录openstack,凭借自己的证书(凭证里面有自己的用户名和密码)给keystone验证。(2)keystone对用户的证书进行验证,验证通过则会发布一个令牌(token)和用户所需服务的位置点(endpoint)给用户。(3)用户得到了位置点(endpoint)之后,携带自己的令牌,向nova服务发起请求,请求创建虚拟机。(4)nova会拿着user的token向keystone进行认证,判断user是否拥有执行创建虚拟机操作的权限,若验证通过,nova会向其提供相对应的服务。
1.OpenStack云平台用户申请虚拟机的认证过程5.2.4Keystone服务的认证过程(5)keystone认证通过之后,将结果返回给nova,nova即开始执行创建虚拟机的请求。首先需要镜像资源,nova带着令牌(token)和所需要的镜像名向glance提出镜像资源的请求。(6)glance会拿着nova提供的token去向keystone进行认证,判断user是否拥有使用镜像服务的权限。keystone认证成功后,将结果返回给glance,glance就可以向nova提供镜像服务了。(7)创建虚拟机还需要网络服务,因此nova携带token向neutron发送网络服务的请求。(8)neutron拿着nova给的token向keystone进行认证,验证判断user是否拥有使用网络服务的权限。keystone认证成功后,将结果返回给nuetron,nuetron就可以给nova提供网络规划服务了。
1.OpenStack云平台用户申请虚拟机的认证过程5.2.4Keystone服务的认证过程(9)nova获取了镜像和网络之后,开始创建虚拟机,通过hypervisior可调用底层硬件资源进行创建。创建完成返回给用户,成功执行了用户的请求。
1.OpenStack云平台用户申请虚拟机的认证过程任务5.3部署Keystone服务5.3.1创建数据库并授权登录mysql数据库,“-uroot”指定使用root管理员用户登录,“-p000000”使用root用户对应的密码000000进行登录,当用户名和密码正确就可以进入数据库。(root用户的密码在项目4中初始化数据库的时候已经设置过为000000)。1.使用root管理员身份登录数据库[root@controller~]#mysql-uroot-p000000WelcometotheMariaDBmonitor.Commandsendwith;or\g.YourMariaDBconnectionidis8Serverversion:10.3.28-MariaDBMariaDBServerCopyright(c)2000,2018,Oracle,MariaDBCorporationAbandothers.Type'help;'or'\h'forhelp.Type'\c'toclearthecurrentinputstatement.MariaDB[(none)]>注意:上述命令中“-p”选项后面直接接密码值“000000”(无空格)。出于安全考虑,尽量避免在命令行中直接输入密码,可以使用命令“mysql-uroot-p”,当系统提示“Enterpassword:”时,直接输入“000000”,这样密码不会在浏览器上显示出来。5.3.1创建数据库并授权进入到数据库之后,需要创建名为keystone的数据库,使用命令“createdatabasekeystone;”,看到提示信息“QueryOK,1rowaffected(0.001sec)”,表示数据库已经创建成功。2.创建keystone数据库MariaDB[(none)]>createdatabasekeystone;QueryOK,1rowaffected(0.001sec)注意:SQL语句中需要在末尾添加“;”来表示语句的结束。可以使用“showdatabases”命令来查看当前已存在的数据库的情况。操作如下所示。MariaDB[(none)]>showdatabases;+--------------------+|Database|+--------------------+|information_schema||keystone||mysql||performance_schema|+--------------------+4rowsinset(0.002sec)5.3.1创建数据库并授权将所有权限授予“keystone”用户,该用户只能从本地主机连接,并使用密码“000000”进行身份验证。执行成功后有“QueryOK,0rowsaffected(0.000sec)”提示。3.给用户授权使用keystone数据库MariaDB[(none)]>grantallprivilegesonkeystone.*to'keystone'@'localhost'identifiedby'000000';QueryOK,0rowsaffected(0.000sec)上述SQL语句中,第一个“keystone”为数据库名,第二个“keystone”为MySQL中的用户名,“*”代表keystone库中所有表,“localhost”代表本机,通常的语法是:GRANTALLPRIVILEGESON数据库名.表名TO'用户名'@'主机'IDENTIFIEDBY'密码‘;。将所有权限授予“keystone”用户,该用户可以从任何主机(“%”通配符代表所有主机)连接,并使用密码“000000”进行身份验证。MariaDB[(none)]>grantallprivilegesonkeystone.*to'keystone'@'%'identifiedby'000000';QueryOK,0rowsaffected(0.000sec)注意:需要对本地主机和远程主机的用户都执行授权的操作,否则会影响后续的操作。5.3.1创建数据库并授权使用show命令查看keystone数据库的情况。首先需要切换到keystone数据库,再使用show命令查看表的情况。命令如下所示。4.查看keystone数据库的情况MariaDB[(none)]>usekeystone;DatabasechangedMariaDB[keystone]>showtables;Emptyset(0.000sec)注意:此时keystone数据库是空的。5.3.1创建数据库并授权通过“showgrantsforkeystone;”命令,可以查看给用户“keystone”授予的权限列表。命令和结果如下所示。5.查看权限MariaDB[(none)]>showgrantsforkeystone;+---------------------------------------------------------------------------------------------------------+|Grantsforkeystone@%|+---------------------------------------------------------------------------------------------------------+|GRANTUSAGEON*.*TO`keystone`@`%`IDENTIFIEDBYPASSWORD'*032197AE5731D4664921A6CCAC7CFCE6A0698693'||GRANTALLPRIVILEGESON`keystone`.*TO`keystone`@`%`|+---------------------------------------------------------------------------------------------------------+2rowsinset(0.000sec)5.3.1创建数据库并授权通过“selectuser,hostfrommysql.user;”命令,在数据库中存放用户基本权限的表mysql.user中查看用户和主机的相关信息,显示所有用户及其对应的主机信息。命令和结果如下所示。5.查看权限MariaDB[(none)]>selectuser,hostfrommysql.user;+----------+-----------+|user|host|+----------+-----------+|keystone|%||root|||root|::1||keystone|localhost||root|localhost|+----------+-----------+5rowsinset(0.002sec)5.3.1创建数据库并授权此时,在数据库中的操作告一段落,可以使用exit或者quit命令从数据库中退出。6.退出数据库MariaDB[(none)]>exitBye5.3.2完成Keystone服务的部署使用yum命令安装Keystone服务所需要的软件包。命令如下所示。1.安装Keystone软件包[root@controller~]#yum-yinstallopenstack-keystonehttpdpython3-mod_wsgi
Keystone运行在Web服务器上的一个支持Web服务器网关接口(WebServiceGatewayInterface,WSGI)的Web应用。使用yum命令需要安装3款软件包,分别是openstack-keystone、httpd和python3-mod_wsgi。
openstack-keystone:是OpenStack认证服务Keystone所需要的包,它包含了Keystone服务的核心代码和组件。安装这个包后,就可以启动并运行Keystone服务,提供OpenStack的认证、授权、目录等功能。安装时会自动创建名为keystone的Linux用户及同名用户组。
httpd:ApacheHTTP服务器。OpenStack的Keystone默认将服务的API端点发布为web服务,所以需要一个HTTP服务器如Apache来提供web服务。。
python3-mod_wsgi:一个Apache的模块,它可以让WSGI兼容的Python应用在Apache上运行。Keystone的API端点就是一个Python+WSGI的应用,所以需要python3-mod_wsgi模块来运行该应用。5.3.2完成Keystone服务的部署在/etc/passwd文件中查找含有“keystone”字符串的行,显示的内容是keystone用户的相关信息,包括用户名keystone,用户ID为163,所在组的ID为163等。2.查看用户和用户组信息[root@controller~]#cat/etc/passwd|grepkeystonekeystone:x:163:163:0penStackKeystoneDaemons:/var/lib/keystone:/sbin/nologin在/etc/group文件中查找含有“keystone”字符串的行,显示的内容是keystone用户组的信息。[root@controller~]#cat /etc/group |grepkeystone keystone:x:163:5.3.2完成Keystone服务的部署使用crudini命令在keystone配置文件/etc/keystone/keystone.conf中需要做两处修改,分别是在[database]段落中添加数据库的连接地址和在[token]段落中添加令牌的生成方法。命令如下所示。3.修改Keystone的配置文件[root@controller~]#crudini--set/etc/keystone/keystone.confdatabaseconnectionmysql+pymysql://keystone:000000@controller/keystone[root@controller~]#crudini--set/etc/keystone/keystone.conftokenproviderfernetcrudini命令是Linux下的一个操作配置文件的命令工具,用来对配置文件进行编辑的工具。crud是4个单词的首字母简写,即create、read、update和delete,中文译为“增删改查”。这是数据的最常见的4类操作方法。配置文件往往会成若干个段落,以[default]之类的格式标识。5.3.2完成Keystone服务的部署此命令的常用用法如下所示:修改config_file配置文件中section所示的段落中,param所表示的配置参数设置参数的值为value:crudini--set[--existing]config_filesection[param][value]
获取配置文件内容:crudini--get[--format=sh|ini]config_file[section][param]
删除配置文件内容:crudini--del[--existing]config_filesection[param]
合并文件:crudini--merge[--existing]config_file[section]3.修改Keystone的配置文件5.3.2完成Keystone服务的部署修改config_file配置文件中section所示的段落中,param所表示的配置参数设置参数的值为value:crudini--set[--existing]config_filesection[param][value]
获取配置文件内容:crudini--get[--format=sh|ini]config_file[section][param]
删除配置文件内容:crudini--del[--existing]config_filesection[param]
合并文件:crudini--merge[--existing]config_file[section]3.修改Keystone的配置文件上述第一条命令的作用就是在/etc/keystone/keystone.conf配置文件中的[database]段落下,将connection参数的值设置为“mysql+pymysql://keystone:000000@controller/keystone”。其中“mysql+pymysql”表示数据库的类型,后接“://”,之后出现的第一个keystone表示登录数据库的用户名,“:”后面的“000000”是keystone用户的登录密码,“@”后面接数据库的主机名,“/”后面的keystone是数据库的名字。connection的参数值“mysql+pymysql://keystone:000000@controller/keystone”之间没有任何的空格,如若出现,会影响到后续的操作。5.3.2完成Keystone服务的部署修改config_file配置文件中section所示的段落中,param所表示的配置参数设置参数的值为value:crudini--set[--existing]config_filesection[param][value]
获取配置文件内容:crudini--get[--format=sh|ini]config_file[section][param]
删除配置文件内容:crudini--del[--existing]config_filesection[param]
合并文件:crudini--merge[--existing]config_file[section]3.修改Keystone的配置文件第二条命令的命令作用是在/etc/keystone/keystone.conf配置文件的[token]段落下,设置provider属性的值为fernet。provider表示token提供者,这里是fernet;fernet表示使用fernettoken方案。keystone令牌(token)有三种生成方式:uuid、fernet、pki,其中fernet是当前主流推荐的令牌加密格式,会生成一段随机字符串,在字符串中存储了被加密的用户信息、权限信息、过期时间等信息。keystone在验证时用解密密钥对其进行解密以获得原始信息。5.3.2完成Keystone服务的部署修改config_file配置文件中section所示的段落中,param所表示的配置参数设置参数的值为value:crudini--set[--existing]config_filesection[param][value]
获取配置文件内容:crudini--get[--format=sh|ini]config_file[section][param]
删除配置文件内容:crudini--del[--existing]config_filesection[param]
合并文件:crudini--merge[--existing]config_file[section]3.修改Keystone的配置文件除了使用crudini命令修改配置文件之外,还可以使用vi编辑器打开配置文件/etc/keystone/keystone.conf,在安全模式下输入“/database”向下查找database关键字,并在[database]下方添加上“connection=mysql+pymysql://keystone:000000@controller/keystone”,也可以达到相同的效果。5.3.2完成Keystone服务的部署4.初始化Keystone数据库(1)同步数据库临时使用keystone用户的身份执行同步数据库的命令,为后续认证服务创建数据库表。命令如下所示。[root@controller~]#su-s/bin/sh-c"keystone-managedb_sync"keystone上述命令中“su”就是用来临时变更为keystone身份的命令,keystone用户(在安装时自动创建的用户)已经拥有对keystone数据库的管理权限。其他参数的说明如下所示:
-s/bin/sh:指定要执行的shell(如bash、csh、tcsh等),预设值为/etc/passwd内的该使用者的shell。但是shell必须在/etc/shells中指定,而且参数中必须是shell的完整的路径。如果没有,则默认为/bin/sh。
-ccommand:以变更的用户身份执行指令(command)后再变回原来用户。command一般用双引号指定。
keystone-manage:用来同keystone服务进行交互的命令行工具,通常该命令只用于不能通过HTTPAPI完成的操作。5.3.2完成Keystone服务的部署4.初始化Keystone数据库(1)同步数据库临时使用keystone用户的身份执行同步数据库的命令,为后续认证服务创建数据库表。命令如下所示。[root@controller~]#su-s/bin/sh-c"keystone-managedb_sync"keystone上述命令中“su”就是用来临时变更为keystone身份的命令,keystone用户(在安装时自动创建的用户)已经拥有对keystone数据库的管理权限。其他参数的说明如下所示:
-s/bin/sh:指定要执行的shell(如bash、csh、tcsh等),预设值为/etc/passwd内的该使用者的shell。但是shell必须在/etc/shells中指定,而且参数中必须是shell的完整的路径。如果没有,则默认为/bin/sh。
-ccommand:以变更的用户身份执行指令(command)后再变回原来用户。command一般用双引号指定。
keystone-manage:用来同keystone服务进行交互的命令行工具,通常该命令只用于不能通过HTTPAPI完成的操作。注意:此条命令执行后没有任何输出结果。5.3.2完成Keystone服务的部署4.初始化Keystone数据库操作功能说明db_sync同步数据库fernet_setup创建一个Fernet密钥库,用于令牌加密credential_setup创建一个Fernet密钥库,用于凭证加密bootstrap初始化身份认证信息,并将这些信息存入数据库token_flush清除过期的令牌5.3.2完成Keystone服务的部署4.初始化Keystone数据库(2)检查数据库因为同步数据库的命令执行之后没有任何的结果输出,所以需要手动查看一下数据库同步是否成功,执行的命令如下所示。[root@controller~]#mysql-uroot-p000000-e"usekeystone;showtables;"上述命令以root用户身份登录到数据库,通过“-e”参数可以同时执行数据库语句,首先需要切换到keystone数据库,再通过show命令查看keystone数据库里表格的情况。如果上述命令执行完,没有显示出表的情况,说明keystone数据库里没有任何表格,依然是空的,所以同步没有成功,需要检查前面的执行过程中是否存在问题,可以参考以下几个方面。(1)检查/etc/hosts文件中IP地址与主机名controller对应关系是否正确。(2)查看用户keystone对keystone数据库的授权情况。(3)查看keystone配置文件/etc/keystone/keystone.conf,[database]段落下数据库的连接设置connection的值中,避免出现多余的空格,影响数据库同步的成功率。5.3.3Keystone服务组件初始化1.安全认证
keystone-manage命令用于初始化fernettoken机制所需要的密钥存储库。fernet_setup是要创建一个fernet密钥库,用于令牌加密。系统会自动创建/etc/keystone/fernet-keys目录,并在目录中生成两个fernet密钥。这两个密钥用于加密和解密令牌。“--keystone-userkeystone”指定密钥库目录的拥有者是keystone用户。“--keystone-groupkeystone”指定密钥库目录的用户组为keystone组。这样keystone进程就有访问密钥库的权限了。命令如下所示。[root@controller~]#keystone-managefernet_setup--keystone-userkeystone--keystone-groupkeystone
keystone-manage命令用于生成fernet机制所需的密钥,并设置权限。“--keystone-user”和“--keystone-group”同上,也是设置密钥文件的owner和group。[root@controller~]#keystone-managecredential_setup--keystone-userkeystone--keystone-groupkeystone所以这两条命令一个初始化了密钥存储库,一个生成了密钥文件,并都将文件权限设置为keystone用户和组,完成了fernettoken机制的初始化配置。5.3.3Keystone服务组件初始化2.创建端点--引导身份服务使用“keystone-managebootstrap”命令初始化用户身份认证信息,命令如下所示。[root@controller~]#keystone-managebootstrap--bootstrap-password000000--bootstrap-admin-urlhttp://controller:5000/v3/--bootstrap-internal-urlhttp://controller:5000/v3/--bootstrap-public-urlhttp://controller:5000/v3/--bootstrap-region-idRegionOne用“keystone-managebootstrap”命令给“admin”用户初始化登录凭证,以后登录时出示凭证与此(“000000”)比对就可以进行认证。“--bootstrap-admin-urlhttp://controller:5000/v3/”指定admin用户访问的API端点URL;“--bootstrap-internal-urlhttp://controller:5000/v3/”指定内部访问的API端点URL;“--bootstrap-public-urlhttp://controller:5000/v3/”指定外部访问的API端点URL;“--bootstrap-region-idRegionOne”指定区域的名称为RegionOne。运行命令后,在keystone数据库中已经存放了登录时需要验证的信息。登录时把用户提供的用户名和密码等信息与数据库中的数据进行对比,一致就通过认证,否则认证失败。5.3.3Keystone服务组件初始化2.创建端点--引导身份服务参数功能说明--bootstrap-username设置登录用户名,如果没有该参数则默认登录用户为“admin”用户--bootstrap-password设置“admin”用户的密码--bootstrap-admin-url设置“admin”用户使用的服务端点--bootstrap-internal-url设置内部用户使用的服务端点--bootstrap-public-url设置外部用户使用的服务端点--bootstrap-region-id设置区域ID名称,用于配置集群服务5.3.3Keystone服务组件初始化3.启动认证服务(1)修改Apache服务的配置文件使用vi编辑器打开Apache服务的配置文件,将ServerName后面内容改为controller,端口号为80,操作命令如下所示。[root@controller~]#vi/etc/httpd/conf/httpd.conf……ServerNamecontroller:80……5.3.3Keystone服务组件初始化3.启动认证服务(2)创建配置链接在Apache服务中添加一个软链接,将Keystone身份认证服务的WSGI配置文件wsgi-keystone.conf添加到HTTPD配置目录/etc/httpd/conf.d/中,在启动httpd的时候会自动读取这个虚拟主机的配置文件。使用“ln-s”命令创建符号链接(也叫软连接)。命令格式为“ln-s源文件目标文件”。操作命令如下所示。[root@controller~]#ln-s/usr/share/keystone/wsgi-keystone.conf/etc/httpd/conf.d/上述命令将“wsgi-keystone.conf”文件软链接到“/etc/httpd/conf.d/”目录。因为“/etc/httpd/conf.d/”目录下的“conf”文件都是Apache服务器的配置文件,所以这个命令让“wsgi-keystone.conf”成为Apache服务器的配置文件之一,让Apache服务器能够应用前面安装的“mod_wsgi”插件以支持WSGI协议。5.3.3Keystone服务组件初始化3.启动认证服务(3)重启服务前面对Apache服务的配置文件做了修改,为了使内容生效,需要将Apache服务启动。为了避免每次开机都要手动启动Apache服务,这里直接将服务设置为开机自启,操作命令如下所示。[root@controller~]#systemctlstarthttpd.service[root@controller~]#systemctlenablehttpd.serviceCreatedsymlink/etc/systemd/system/multi-user.target.wants/httpd.service→/usr/lib/systemd/system/httpd.service.5.3.4OpenStack云平台的登录验证通过Keystone服务是如何实现认证,从而登录系统的呢。接下来,通过环境变量传送用户名及密码等凭证给Keystone服务,由Keystone服务进行验证,实现其认证验证过程。5.3.4OpenStack云平台的登录验证1.创建包含管理凭证和管理终端的文件在root家目录下创建初始化环境变量文件admin-openrc.sh,将OpenStack服务的认证信息添加到文件中。命令操作如下所示。[root@controller~]#viadmin-openrc.sh添加如下内容:exportOS_USERNAME=adminexportOS_PASSWORD=000000exportOS_PROJECT_NAME=adminexportOS_USER_DOMAIN_NAME=DefaultexportOS_PROJECT_DOMAIN_NAME=DefaultexportOS_AUTH_URL=http://controller:5000/v3exportOS_IDENTITY_API_VERSION=3
export命令可用于显示或设置环境变量,此命令的效果仅限于当前登录终端,上述操作就是直接导入admin的相关环境变量。登录OpenStack云计算平台的用户名(OS_USERNAME)是“admin”,登录密码(OS_PASSWORD)是“000000”,用户名下所属的项目名称(OS_PROJECT_NAME)是“admin”,用户属于的域(OS_USER_DOMAIN_NAME)是“Default”,项目属于的域(OS_PROJECT_DOMAIN_NAME)是“Default”,认证服务的端点URL(OS_AUTH_URL)是“http://controller:5000/v3”,Keystone版本(OS_IDENTITY_API_VERSION)是“3”。5.3.4OpenStack云平台的登录验证2.导入环境变量
admin-openrc.sh文件中添加内容之后需要使用source命令执行一下,将文件中定义的环境变量导入到当前的shell环境中。这些环境变量包括OpenStack服务的认证信息,有项目名称、用户名称、密码、认证服务的URL等。这样,当需要使用OpenStack命令行工具的时候,这些认证信息会自动提供给命令行工具,从而无需手动输入。[root@controller~]#sourceadmin-openrc.sh5.3.4OpenStack云平台的登录验证3.查看现有环境变量使用“export-p”命令可以列出所有当前会话中定义的环境变量及其值,命令及部分如下所示。[root@controller~]#export-p……declare-xOS_AUTH_URL="http://controller:5000/v3"declare-xOS_IDENTITY_API_VERSION="3"declare-xOS_PASSWORD="000000"declare-xOS_PROJECT_DOMAIN_NAME="Default"declare-xOS_PROJECT_NAME="admin"declare-xOS_USERNAME="admin"declare-xOS_USER_DOMAIN_NAME="Default"……如果能看到上述结果,说明环境变量已经导入成功。Keystone从环境变量中获取相关信息并将之和数据库中的登录信息进行比对,一致则通过认证。5.3.5Keystone服务的各项管理
OpenStack云管理平台中对组件操作时需要Keystone认证之后才能进行,所以需要使用与OpenStack云管理平台进行交互的命令行工具,它就是openstack命令。通过openstack命令,用户可以执行各种管理任务,如创建和删除虚拟机、管理网络和存储资源等,便于用户和管理员能够高效地管理云资源。验证操作是官方提供的一些用于验证服务是否已成功运行的命令,如果这些命令顺利运行,则表示该服务已正常运行。认证服务Keystone为OpenStack每个服务提供身份验证,身份验证需要使用域、项目、用户和角色的组合。5.3.5Keystone服务的各项管理域(domain)是认证边界,通常一个OpenStack平台不需要创建域,因为Keystone本身就有一个默认的域,名为Default。项目、用户、用户组、角色都包含在域中。Domain是项目(Project)、用户组(Group)、用户(User)和角色(Role)的集合,在公有云或者私有云中常常表示一个客户,和虚拟机数据中心(VDC)的概念类似。Domain可以看做一个命名空间,就像域名一样,全局唯一。在一个Domain内,Project、Group、User的名称不可以重复,但是在两个不同的Domain内,它们的名称可以重复。因此,在确定这些元素时,需要同时使用它们的名称和它们的Domain的ID或者name。1.域管理5.3.5Keystone服务的各项管理(1)显示域列表使用命令行管理OpenStack云平台时,由于命令比较多,可以使用“--help”命令来辅助,或者使用管道“|”与“grep”的组合来显示查询命令的使用方法。命令执行过程如下所示。1.域管理[root@controller~]#openstackdomain--helpCommand"domain"matches:domaincreatedomaindeletedomainlistdomainsetdomainshow或者执行下面的命令。5.3.5Keystone服务的各项管理1.域管理[root@controller~]#openstack--help|grepdomain[--os-default-domain<auth-domain>][--os-remote-project-domain-name<remote_project_domain_name>|--os-remote-project-domain-id<remote_project_domain_id>][--os-domain-id<auth-domain-id>][--os-domain-name<auth-domain-name>][--os-project-domain-id<auth-project-domain-id>][--os-project-domain-name<auth-project-domain-name>][--os-user-domain-id<auth-user-domain-id>][--os-user-domain-name<auth-user-domain-name>][--os-default-domain-id<auth-default-domain-id>][--os-default-domain-name<auth-default-domain-name>]--os-default-domain<auth-domain>DefaultdomainID,default=default.(Env:--os-remote-project-domain-name<remote_project_domain_name>--os-remote-project-domain-id<remote_project_domain_id>--os-domain-id<auth-domain-id>--os-domain-name<auth-domain-name>--os-project-domain-id<auth-project-domain-id>--os-project-domain-name<auth-project-domain-name>5.3.5Keystone服务的各项管理1.域管理--os-user-domain-id<auth-user-domain-id>Withv3applicationcredential:User'sdomainidWithpassword:User'sdomainidWithv3totp:User'sdomainidWithv3password:User'sdomainid(Env:--os-user-domain-name<auth-user-domain-name>Withv3applicationcredential:User'sdomainnameWithpassword:User'sdomainnameWithv3totp:User'sdomainnameWithv3password:User'sdomainname(Env:--os-default-domain-id<auth-default-domain-id>Withpassword:OptionaldomainIDtousewithv3andprojectdomaininv3andignoredinv2authentication.Withtoken:OptionaldomainIDtousewithv3andv2projectdomaininv3andignoredinv2authentication.--os-default-domain-name<auth-default-domain-name>Withpassword:Optionaldomainnametousewithv3APIandprojectdomaininv3andignoredinv2authentication.Withtoken:Optionaldomainnametoboththeuserandprojectdomaininv3andignoredin5.3.5Keystone服务的各项管理1.域管理domaincreateCreatenewdomaindomaindeleteDeletedomain(s)domainlistListdomainsdomainsetSetdomainpropertiesdomainshowDisplaydomaindetailsfederationdomainlistListaccessibledomainsroleaddAddsaroleassignmenttoauserorgrouponthesystem,adomain,oraprojectroleremoveRemovesaroleassignmentfromsystem/domain/project:user/group5.3.5Keystone服务的各项管理1.域管理[root@controller~]#openstackdomainlist+---------+---------+---------+--------------------+|ID|Name|Enabled|Description|+---------+---------+---------+--------------------+|default|Default|True|Thedefaultdomain|+---------+---------+---------+--------------------+通过上面的命令的显示结果,可以使用“openstackdomainlist”命令显示当前所有域的信息,包括域的ID、名称、激活状态和描述信息。执行的命令和结果如下所示。此时,可以看到已经存在一个名为Default的域,它的ID是default。5.3.5Keystone服务的各项管理1.域管理[root@controller~]#openstackdomaincreate--description"AnExampleDomain"example+-------------+----------------------------------+|Field|Value|+-------------+----------------------------------+|description|
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心灵手巧相拥抵制校园垃圾食品小学健康生活主题班会
- AI大模型企业级安全底座
- 筑牢交通意识远离交通危险小学主题班会课件
- 关于项目投入的确认函(8篇)
- 湖南省岳阳市岳阳县第一中学2024-2025学年高一上学期1月期末考试化学试题解析版
- 2026三年级诗词合作能力培养课件
- 2026三年级诗词作业设计课件
- 2026年笔译面试测试题及答案
- 2026年小学生文化测试题及答案
- 2026年广联达图形测试题及答案
- 川大宗教所真题
- 《工业产品生产单位质量安全总监和工业产品生产单位质量安全员守则》
- 车间人员技能矩阵图
- 植物生产与环境课程标准
- 2023变电二次安装工(中级工)技能理论考试题库(核心600题)
- GJB质量诚信教育培训
- 移动式操作平台搭设专项方案
- LY/T 2622-2016天麻林下栽培技术规程
- GB/T 4802.1-2008纺织品织物起毛起球性能的测定第1部分:圆轨迹法
- GB/T 21042-2007电子设备用固定电容器第22部分:分规范表面安装用2类多层瓷介固定电容器
- 2023年全套ISO16949质量手册及程序文件
评论
0/150
提交评论