OpenStack云计算平台搭建与管理教学教案共17单元11Word文件下载.docx
- 文档编号:19870562
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:26
- 大小:280.14KB
OpenStack云计算平台搭建与管理教学教案共17单元11Word文件下载.docx
《OpenStack云计算平台搭建与管理教学教案共17单元11Word文件下载.docx》由会员分享,可在线阅读,更多相关《OpenStack云计算平台搭建与管理教学教案共17单元11Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。
由于OpenStack的所有组件都要通过“Keystone”组件的认证才能够进入云管理平台,因此首先安装身份认证组件:
“Keystone”。
教学内容与教学设计:
11.1Keystone的基本概念
第1篇
11.1.1基本名词解释
从本章开始我们将要接触很多OpenStack的专业名词,如域、项目、服务、端点、用户、角色、凭据、鉴权、令牌、组等,感觉好复杂的样子呢。
下面我们通过一个浅显的例子来理解它们。
假设我投资了一个网吧,这个网吧就是项目(Project)。
该网吧对外提供多种服务(Service),比如上网、泡方便面、叫外卖等。
为了知道客户想要什么服务,每个服务都有一个不同的服务地址,只要你来到这个地址就能使用对应的服务,如到前台可以泡方便面,这里的地址就是服务端点(Endpoint)。
在这个项目里,我、网管和来上网的人都是用户(User),我们都可以使用该网吧的服务。
但我们在网吧里的权限又不一样,因为我们的角色(Role)不一样。
我的角色是老板,我有查账的权限;
网管的角色是管理员,负责收银和软硬件管理;
其他人的角色是顾客,只能上网与消费。
用户来到服务端点后并不是马上就可以使用服务,得把身份凭据(Credentials)提供出来由系统进行鉴权(Authentication)以判断是否可以使用该服务(比如年龄不到不允许使用上网服务)。
当通过鉴权后会给发给你一个令牌(Token),每次你要使用项目中某项服务的时候只需要出示令牌即可。
比如你还需要买方便面时只需要出示令牌由管理员进行记账即可,不需要再次鉴权。
另外,为了便于管理还可以将若干个用户分为若干组(Group),如VIP组收费打八折,一般会员组收费打九折,这实际是进行批量权限设定,你进了这个组就有了这个组的所有权限。
随着业务扩大,又开设了很多连锁加盟店(不同的项目),显然每个加盟店有自己的用户,不能拿着一个网吧的会员卡到另一个网吧消费。
此时我们可以把部分项目(Project)和用户(User)划到一个域(Domain)中,并规定只有本域中的用户才能使用本域中项目的资源。
其中域(Domain)、项目(Project)、组(Group)、用户(User)、角色(Role)的关系图如图11.1所示。
图11.1域、项目、组、用户和角色关系模型图
(1)项目(Project)
Project是可供用户访问的资源集合,不同的项目(Project)之间资源是隔离的。
(2)用户(User)
User指代任何拥有身份验证信息来使用OpenStack的实体,它属于特定的域(Domain),可以是真正的使用人、其他系统或者服务。
OpenStack中自带了“admin”用户,该用户从属于“admin”项目并且分配有“admin”角色。
用户必须要指定一个项目(Project)才可以申请使用OpenStack的服务。
(3)域(Domain)
Domain是项目(Project)和用户(User)的集合。
默认存在“default”域,如果没有创建域,所有项目和用户都使用“default”域。
(4)角色(Role)
Role是预定义的权限集合。
OpenStack自带两个预定义角色,即“admin”和“member”。
“member”角色提供普通用户访问权限。
“admin”角色提供整个OpenStack环境的管理特权。
如果项目中的用户被分配了“admin”角色,则该用户获得与“admin”用户相同的特权。
“admin”用户不仅是所属项目的管理员,还能够管理OpenStack环境中的所有项目。
(5)组(Group)
Group是域中的部分用户的集合。
通过分配角色到组,可以批量向在该组中的所有用户分配权限。
(6)凭据(Credentials)
是Keystone验证用户身份时需要的身份验证数据。
这些数据包含用户名、密码、项目名、域名等信息。
(7)鉴权(Authentication)
鉴权(Authentication)是Keystone通过检查用户的凭据(Credentials)来确定用户的身份的过程。
当用户的凭据(Credentials)通过验证后,Keystone给用户提供身份验证令牌(Token),让用户能够访问该服务。
(8)令牌(Token)
令牌(Token)是一个加密字符串,作为访问资源的“通行证”。
一个Token包含了在指定范围和有效时间内可以被访问的资源信息。
(9)服务(Service)
即Openstack中提供的组件服务,如计算服务、镜像服务等。
(10)端点(Endpoint)
一个可以通过网络来访问和定位某个服务(Service)的地址,通常是一个URL地址。
如“http:
//controller:
5000/v3”就是Keystone组件对外提供服务的端点。
Endpoint分为三类:
1 admin-url:
给管理员提供服务的地址
2 internal-url:
给OpenStack内部组件提供服务的地址
3 public-url:
给其他用户提供服务的地址
在OpenStackTrain版中这三类端点是一样的,只是保留了不同的定义而已。
11.1.2Keystone基本架构
图11.2Keystone服务后端支持模块
如图11.2所示,Keystone的服务(Service)是由Token、Catalog、Identity、Policy四大后端模块所支持的。
(1)Tokenbackend
顾名思义该模块用来生成和管理Token令牌。
(2)Catalogbackend
用来存储和管理服务(Service)、服务端点(Endpoint)。
(3)Identitybackend
用来管理项目(Project)、用户(User)、角色(Role)和提供验证服务。
(4)Policybackend
用来管理所有访问的权限。
11.1.3Keystone认证的基本步骤
图11.3虚拟机生成步骤示意图
从图11.3可以看出,对OpenStack中任何服务的访问都要经过Keystone的鉴权。
Keystone的鉴权分为两种:
(1)判断用户凭证是否合法
用户初次使用服务时需要提交给Keystone用户名、密码等用户凭证信息。
Keystone进行鉴权判断是否为合法用户,如果是则颁发令牌(Token)。
在颁发的令牌中包含有用户对服务的使用权限、令牌的失效时间等信息。
拿着令牌就可以在系统内通行了。
(2)判断用户令牌是否合法
当用户(User)使用OpenStack的任一组件服务时都需要提交已获得的令牌。
提供服务的组件将收到的令牌提交给KeyStone判断该令牌是否合法,是否过期,是否有权获得服务等。
只有通过了KeyStone的验证后服务才会响应相应的请求。
第1章
第2章
第3章
第4章
第5章
第6章
6.1
11.2安装与配置Keystone认证服务
为了避免接下来的工作中由于操作不当造成系统重装的风险,我们将前期工作进行拍摄快照保存。
由于本章工作只在控制节点上实施,因此只需要给控制节点拍摄快照。
详细操作请参阅任务6.4。
11.2.1安装和配置Keystone
(1)安装Keystone软件包
[root@controller~]#yuminstallopenstack-keystonehttpdmod_wsgi-y
这里安装了三个软件:
“openstack-keystone”,“httpd”,“mod_wsgi”。
openstack-keystone是Keystone的软件包;
Keystone组件实际是一款基于服务器网关接口(WSGI)协议的Web应用,它需要在支持WSGI协议的Web服务器上运行;
Httpd是一个Web服务器,当它安装上mod_wsgi扩展模块就能支持WSGI协议,以满足Keystone的运行需要。
在安装openstack-keystone包的时候,同时也会在系统自动创建名为“keystone”的用户以及同名用户组。
我们可以用如下两种方式查看系统自动生成的“keystone”用户和“keystone”用户组的相关信息。
1查看keystone用户信息
[root@controller~]#cat/etc/passwd|grepkeystone
能看见已经存在“keystone”用户。
2查看keystone用户组信息
[root@controller~]#cat/etc/group|grepkeystone
能看见已经存在“keystone”用户组。
(2)创建keystone数据库并授权
1进入数据库
[root@controller~]#mysql-uroot-p000000
因为MariaDB数据库完全兼容MySql数据库,因此在使用方式上是与MySql数据库是一样的。
该命令的参数-u后为用户名,-p后为密码,不需要空格。
2建立keystone数据库
MariaDB[(none)]>
CREATEDATABASEkeystone;
#创建一个名为keystone的数据库
【提示】SQL命令需要“;
”作为结束符,不要忘记。
3为数据库授权
GRANTALLPRIVILEGESONkeystone.*TO'
keystone'
@'
localhost'
IDENTIFIEDBY'
KEYSTONE_DBPASS'
;
%'
上面两条语句把“keystone”数据库所有表(keystone.*)的所有权限(ALLPRIVILEGES)赋予本地主机('
)及任意远程主机('
)中名为keystone的用户,验证密码为“KEYSTONE_DBPASS”。
【提示】OpenStack的密码都可以根据实际需要进行设置,但一定要记住它们!
4退出数据库
exit;
(3)修改Keystone配置文件
[root@controller~]#vi/etc/keystone/keystone.conf
这是一个很长的配置文件,我们首先配置Keystone组件使用的数据库。
利用vi的搜索功能,搜索到[database]区域,增加或者修改
connection=mysql+pymysql:
//keystone:
KEYSTONE_DBPASS@controller/keystone
该行配置数据库连接信息:
用户“keystone”和密码“KEYSTONE_DBPASS”(keystone:
KEYSTONE)去连接controller主机中的名字叫“keystone”的数据库(@controller/keystone)。
【提示】这里设置的用户名和密码要和数据库里对keystone数据库授权时设置的用户名和密码一致。
然后在[token]区域下取消注释让下面设置生效。
provider=fernet
Keystone令牌有三种生成方式:
UUID、PKI、Fernet。
其中“Fernettoken”是当前主流推荐的token加密格式。
它是一种轻量级的消息格式,不需要存储于数据库,减少了磁盘的IO,带来了一定的性能提升。
一个“Fernettoken”的样子长得像这样的:
gAAAAABeuBugyxPug1qqhcvgl-4rHhlrd6VT71g0LdjbtnpvnKANkSqzndDcwHky-o0c06nU7jfaZhEpgnEnw8Csrw7nxrBeIMY3xBtLwLY0DJBQhHyd55b890lOt9UzXiv--YZNk7jPYP3RzfUg8HmBUSI2SUmHd2eYcrowUq32c7hv7gODLoA
在这个字符串中存储了用加密密钥加密后的用户信息、权限信息、过期时间信息等。
Keystone在验证的时候将用解密密钥进行解密获得原始信息。
(4)同步数据库
Keystone安装后已经提供了数据库的基础表数据,但还没有导入到数据库中,我们需要手动将数据同步导入到数据库中。
[root@controller~]#sukeystone-s/bin/sh-c"
keystone-managedb_sync"
【命令解释】
sukeystone:
切换到keystone用户,因为只有keystone用户(安装时自动创建的用户)拥有对keystone数据库完全操作的权限所以要切换到keystone用户来执行同步,执行完后将把用户切换回root用户;
-s/bin/sh:
-s为su命令的参数,指定用什么编译器(Shell)来执行命令,“/bin/sh”就是指定的编译器;
-c:
为su的参数,后面在引号内的是具体执行的命令;
keystone-manage:
是用来同Keystone服务进行交互的命令行工具。
keystone-manage的命令格式:
keystone-manage[参数]具体操作(action)
keystone-manage常见操作:
db_sync:
同步数据库;
fernet_setup:
创建一个“Fernetkey”仓库,用于令牌(token)加密;
credential_setup:
创建一个“Fernetkey”仓库,用于凭证(credential)加密;
bootstrap:
认证引导服务,初始化Keystone的登录信息;
token_flush:
清除过期的token。
(5)检查同步后的数据库
[root@controller~]#mysql-uroot-p000000#进入到数据库
usekeystone;
#转换到keystone数据库
MariaDB[keystone]>
showtables;
#查询该数据库中所有的表
见到如上数据库表列表时表示数据库导入成功。
11.2.2Keystone组件初始化
(1)初始化Fernet密钥存储库
[root@controller~]#keystone-managefernet_setup--keystone-userkeystone--keystone-groupkeystone
该命令将自动创建“/etc/keystone/fernet-keys/”目录,并生成两个Fernet密钥放到目录下。
此密钥用于加密和解密令牌(token)。
[root@controller~]#keystone-managecredential_setup--keystone-userkeystone--keystone-groupkeystone
该命令将自动创建“/etc/keystone/credential-keys/”目录,并生成两个Fernet密钥放到目录下。
此密钥用于验证用户凭证的正确性。
当token过期后需要重新输入用户名和密码等相关凭证,该密钥完成对凭证的加密和解密工作。
(2)初始化身份认证引导
已知OpenStack有一个默认用户为“admin”,但现在还没有对应的密码等登录所必需的信息。
下面我们用“keystone-managebootstrap”命令来给admin用户初始化它的登录信息。
以后登录时只需要比对用户名、密码等信息就可以进行鉴权。
[root@controller~]#keystone-managebootstrap--bootstrap-passwordADMIN_PASS--bootstrap-admin-urlhttp:
5000/v3/--bootstrap-internal-urlhttp:
5000/v3/--bootstrap-public-urlhttp:
5000/v3/--bootstrap-region-idRegionOne
【命令及参数解释】
keystone-managebootstrap:
给系统初始化鉴权所需要的登录信息;
--bootstrap-password:
设置admin用户的密码;
--bootstrap-admin-url:
设置admin用户使用的服务地址(endpoint);
--bootstrap-internal-url:
设置内部用户使用的服务地址(endpoint);
--bootstrap-public-ur:
设置其他用户使用的服务地址(endpoint);
--bootstrap-region-id:
设置区域ID名称,用于配置集群服务。
从命令中可以看到admin-url、internal-url、public-ur都是同样的地址,均指向Keystone的服务端点。
(3)创建wsgi配置文件软链接
[root@controller~]#ln-s/usr/share/keystone/wsgi-keystone.conf/etc/httpd/conf.d/
该命令将wsgi-keystone.conf文件软链接到了“/etc/httpd/conf.d/”这个目录下面,链接完成后在该目录下可以看到“wsgi-keystone.conf”文件。
这里并不是把该文件拷贝过去,只是建立了一个映射,类似于快捷方式。
因为“/etc/httpd/conf.d/”目录下的conf文件都是Apache的配置文件,所以这个命令让“wsgi-keystone.conf”也成为Apache的配置文件之一。
该配置文件让Apache能够应用mod_wsgi模块以支持WSGI协议。
(4)修改Apache配置,启动Apache服务
Keystone本质上是一个WEB应用,所以要借助WEB服务器运行。
Apache就是一个WEB服务器应用,它的服务名为“httpd”。
1 修改Apache配置
[root@controller~]#vi/etc/httpd/conf/httpd.conf
配置服务器的名称为控制节点的名称:
ServerNamecontroller
2 重启Apache服务
[root@controller~]#systemctlenablehttpd#开机启动
[root@controller~]#systemctlrestarthttpd#重新启动
11.3鉴权并验证Keystone服务
11.3.1鉴权
在以上的操作中,我们设置了OpenStack用户“admin”的密码为“ADMIN_PASS”。
现在该如何通过Keystone的认证登入系统呢?
我们首先需要鉴权,判断用户是否是合法用户。
我们可以通过环境变量传送用户名及密码等相关登录信息给KeyStone,由它进行鉴权。
(1)创建初始化环境变量文件
[root@controller~]#viadmin-openrc
在文件中写入如下命令
exportOS_USERNAME=admin
exportOS_PASSWORD=ADMIN_PASS
exportOS_PROJECT_NAME=admin
exportOS_USER_DOMAIN_NAME=Default
exportOS_PROJECT_DOMAIN_NAME=Default
exportOS_AUTH_URL=http:
5000/v3
exportOS_IDENTITY_API_VERSION=3
exportOS_IMAGE_API_VERSION=2
在这里面我们定义了要登录OpenStack系统用户名(OS_USERNAME)是“admin”,登录密码(OS_PASSWORD)是“ADMIN_PASS”,用户属于的域(OS_USER_DOMAIN_NAME)是“Default”,项目属于的域(OS_PROJECT_DOMAIN_NAME)是“Default”,认证地址(OS_AUTH_URL)是“http:
5000/v3”,Keystone版本号(OS_IDENTITY_API_VERSION)是“3”,镜像管理应用的版本号(OS_IMAGE_API_VERSION)是“2”。
(2)导入环境变量进行鉴权
[root@controller~]#.admin-openrc#运行
[root@controller~]#export-p#查看环境变量
能看到如上结果,说明环境变量导入成功。
这里的环境变量就是模拟用户登录时将用户名、密码等信息提供给KeyStone来验证是否允许其登录。
11.3.2验证Keystone服务
(1)创建service项目
[root@controller~]#openstackprojectcreate--domaindefaultservice
“openstackprojectcreate”:
创建一个项目;
“--domaindefault”:
该项目建立在“default”这个域下,该域名必须存在;
“service”:
这是新项目的名。
【提示】系统存在一个默认名为“Default”、ID名为“default”的域,由于在“--domain”后的输入既可以是域的名字,也可以是域的ID,所以在这里输入Default和default均可以。
[root@controller~]#openstackprojectlist#查看现有项目列表
(2)创建user的角色
[root@controller~]#openstackrolecreateuser
(3)登入系统查看系统已有的域、项目、用户和角色信息
如果在后面操作中看到“Missingvalueauth-urlrequiredforauthpluginpassword”这样的错误信息,说明用户的登录信息还没有导入系统,只需将上面创建的“admin-openrc”导入到环境变量即可。
1 查看已有域(Domain)
[root@c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenStack 计算 平台 搭建 管理 教学 教案 17 单元 11