1、OPENSTACK配置与管理项目式实训任务三 Keystone的手工安装与配置OPENSTACK配置与管理二任务涉及节点:controller三任务目标:1.完成Keystone基本组件的安装;2.完成Keystone数据库的创建以及授权;3.完成Keystone主配置文件的修改;4.完成Keystone安全与认证配置;5.完成Keystone用户、租户、角色以及服务和端点的创建;6.完成Keystone环境变量脚本的创建。一任务前提环境:成功完成任务3中所有内容后开始本实验,或者从已完成任务的镜像开始,继续完成本任务内容。OPENSTACK配置与管理四任务步骤及其详解:(此处有视频:6-1K
2、eystone的安装及其配置)步骤一:Keystone基本组件的安装在controller节点上执行yum源安装命令安装Keystone依赖包,命令如下。rootcontroller#yum-y install openstack-keystone python-keystoneclient执行上述安装命令成功后,我们可以看到成功标志,所有Keystone依赖包都安装完成,如图1所示。图1 Keystone依赖包安装完成反馈结果OPENSTACK配置与管理步骤二:创建Keystone数据库并授权首先,登陆MySQL数据库,命令如下。rootcontroller#mysql-uroot-p000
3、000登陆后,我们首先创建Keystone数据库,命令如下。mysqlCREATE DATABASE keystone;看到提示Query OK,1 row affected(0.00 sec),表明数据库创建成功。接着创建MySQL的Keystone用户,并赋予其Keystone数据库的操作权限,命令如下。mysql GRANT ALL PRIVILEGES ON keystone.*TO keystonelocalhost IDENTIFIED BY 000000;mysql GRANT ALL PRIVILEGES ON keystone.*TO keystone%IDENTIFIED
4、BY 000000;mysql exitOPENSTACK配置与管理上述SQL语句中,第一个Keystone为表名,第二个Keystone为MySQL的用户名,“*”代表该库中所有表,“%”代表所有主机,localhost代表本机。通用的语法为:GRANT ALL PRIVILEGES ON 数据库名.表名TO 用户名主机 IDENTIFIED BY 密码;执行上述SQL语句后,我们可以尝试使用Keystone用户,密码为000000登陆MySQL数据库,登陆命令如下。rootcontroller#mysql-ukeystone-p000000本书中随后的实训项目中,均以上述方式创建数据库并进
5、行数据库的授权,故后续实训项目中不再赘述。OPENSTACK配置与管理步骤三:修改配置Keystone文件rootcontroller#openstack-config-set/etc/keystone/keystone.conf database connection mysql:/keystone:000000controller/keystone上述命令的功能是在/etc/keystone/keystone.conf文件的database段落中添加“connection=mysql(数据库类型):/keystone(登陆数据库的用户名):000000(用户密码)controller(数据
6、库主机名)/keystone(数据库)”配置。我们通过vi命令直接修改/etc/keystone/keystone.conf文件,也可以达到相同效果。接着,我们需要同步数据库,为认证服务创建数据库表,命令如下。rootcontroller#su-s/bin/sh-c keystone-manage db_sync keystoneOPENSTACK配置与管理可以通过执行下面一条语句,查看是否同步并创建成功,命令如下,结果如图2所示。rootcontroller#mysql-u root-p000000-euse keystone;show tables;图2 查看Keystone数据库同步情况
7、接下来,我们通过openssl服务生成一个十位长度的十六进制随机数作为token值,命令如下。rootcontroller#ADMIN_TOKEN=$(openssl rand-hex 10)然后将此token值写入Keystone配置文件rootcontroller#openstack-config-set/etc/keystone/keystone.conf DEFAULT admin_token$ADMIN_TOKENOPENSTACK配置与管理上述命令的功能是在/etc/keystone/keystone.conf文件的DEFAULT段落中添加“admin_token=$ADMIN_T
8、OKEN”配置。将“ADMIN_TOKEN”变量的值传递给admin_token令牌。我们还可以通过命令echo$ADMIN_TOKEN查看token值。验证结果如下,83781a39b99cdba8596f(此数随机生成,每次各不相同不同)。OPENSTACK配置与管理步骤四:Keystone安全与认证配置(此处有视频:6-2Keystone的安装及其配置)默认情况下,Keystone使用PKI令牌。创建签名密钥和证书,并且限制对生成的数据的访问,命令如下。rootcontroller#keystone-manage pki_setup-keystone-user keystone-keys
9、tone-group keystone更改ssl目录及其下所有文件和目录的所属用户和所属组,命令如下。rootcontroller#chown-R keystone:keystone/etc/keystone/ssl上述命令中,-R参数可以实现迭代操作。去掉ssl目录及其下所有文件和目录的其他用户的所有权限,命令如下。rootcontroller#chmod-R o-rwx/etc/keystone/sslOPENSTACK配置与管理步骤五:启动认证服务并将其加入开机自启rootcontroller#service openstack-keystone start上述命令执行完之后,当看到OK
10、的提示时,表示成功,如图3所示。图3 启动认证服务接着我们服务加入开机自启,命令如下。rootcontroller#chkconfig openstack-keystone on上述命令执行后,可以通过命令chkconfig可以查看,看到3、4、5为on即表示成功加入开机自启,结果如下。rootcontroller#chkconfig|grep openstack-keystoneopenstack-keystone 0:off 1:off 2:on 3:on 4:on 5:on 6:offOPENSTACK配置与管理步骤六:清除失效令牌默认情况下,认证服务无限期的在数据库中存储失效的令牌。尽
11、管对生产环境中的审计有潜在价值时,但累积的得失效令牌将大幅增加数据库的大小,可能会降低服务质量,特别是在具备有限资源的测试环境下。我们建议使用cron配置一个周期性任务,来每小时清除失效的令牌。运行以下命令来每小时清除失效令牌,日志输出,命令如下。rootcontroller#(crontab-l-u keystone 2&1|grep-q token_flush)|echo hourly/usr/bin/keystone-manage token_flush/var/log/keystone/keystone-tokenflush.log 2&1 /var/spool/cron/keysto
12、neOPENSTACK配置与管理步骤七:创建用户、租户和角色在安装认证服务之后,我们需要设置用户、租户以及角色来进行认证。通常,我们需要指定一个用户名和密码通过认证服务进行身份验证。然而,在现在为止,我们还没有创建任何用户,所以我们必须使用在前面的步骤中创建的授权令牌。设置OS_SERVICE_TOKEN,以及OS_SERVICE_ENDPOINT环境变量来指定何处身份服务正在运行。我们需要用授权令牌取代ADMIN_TOKEN。命令如下。rootcontroller#export OS_SERVICE_TOKEN=$ADMIN_TOKENrootcontroller#export OS_SER
13、VICE_ENDPOINT=http:/controller:35357/v2.0我们可以通过env命令查看环境变量,来验证上述语句我们创建的环境变量是否生效,命令如下。rootcontroller#envOPENSTACK配置与管理现在我们可以创建一个管理用户、角色、租户并授予用户访问权限。命令如下,结果如图4、5和6所示。rootcontroller#keystone user-create-name=admin-pass=000000图4 创建用户的反馈结果OPENSTACK配置与管理上述命令用于创建用户并为其设定密码,这里我们创建了一个admin用户。本书实训中我们所有的密码都为000
14、000,实际生产环境中,我们应该按实际需要设定密码。rootcontroller#keystone role-create-name=admin图5 创建角色的反馈结果OPENSTACK配置与管理上述命令用于创建角色,这里我们创建了一个admin角色。rootcontroller#keystone tenant-create-name=admin-description=Admin Tenant图6 创建租户的反馈结果OPENSTACK配置与管理上述命令用于创建租户,这里我们创建了一个admin租户,对租户的描述即“-description”选项可以省略。rootcontroller#keys
15、tone user-role-add-user=admin-tenant=admin-role=admin上述命令可以实现用户、角色和组合的连接,即将用户添加到组合中,并赋予租户相应角色即权限,这里我们将admin用户添加到admin租户中并为admin用户绑定admin角色。同时,需要注意的是,执行绑定角色赋予权限的这条命令是没有任何输出的。rootcontroller#keystone user-role-add-user=admin-role=_member_-tenant=admin上述命令中,我们除了给admin用户赋予admin权限之外,还赋予admin用户_member_权限。默
16、认情况下,认证服务会创建一个特殊的_member_角色,OpenStack的Dashboard服务需要用户拥有_member_角色。所以我们赋予了admin用户_member_权限。OPENSTACK配置与管理云用户里,除了管理员之外,还应该有非管理员即一般用户,下面我们使用上面创建用户、租户和角色的命令来创建一个一般用户,命令如下。(此处有视频:6-3keystone的安装及其配置)rootcontroller#keystone user-create-name=demo-pass=000000rootcontroller#keystone tenant-create-name=demo-d
17、escription=Demo Tenantrootcontroller#keystone user-role-add-user=demo-role=_member_-tenant=demo上述命令中,我们创建了一个名为“demo”的租户,当我们增加额外的普通用户时不需要再重新创建租户了,直接将新添的普通的租户加入到“demo”租户中即可。OPENSTACK配置与管理在Openstack中,几乎所有的服务(包括Keystone服务)要想正常运行,都必须首先向Keystone服务器注册。每一个服务需要向Keystone注册以下两个方面的信息,即用户信息,服务(service)和端点(endpoi
18、nt)信息。为方便管理,这里我们创建一个“service”租户,将本书所有的服务都创建在“service”租户下。命令如下,结果如图7所示。rootcontroller#keystone tenant-create-name=service-description=Service Tenant图7 创建service租户的反馈结果OPENSTACK配置与管理步骤八:创建服务(service)和端点(endpoint)在OpenStack中我们需要在安装服务时将每一个在Keystone服务中进行注册登记,以便Keystone服务可以知道其他服务的安装位置同时定位它们的网络位置。所以现在我们必须先
19、注册Keystone服务本身。与创建用户、租户和角色时一样,此时我们同样需要使用OS_SERVICE_TOKEN环境变量,进行身份验证。首先我们需要创建一个服务入口即服务(service),命令如下,结果如图8所示。rootcontroller#keystone service-create-name=keystone-type=identity-description=Openstack Identity图8 创建Keystone服务的反馈结果OPENSTACK配置与管理上面结果中的ID是随机生成的,每人每次实验产生的结果是不相同的。我们需要在创建端点(endpoint)之前创建服务(ser
20、vice),因为OpenStack需要使用返回的服务(service)ID来为OpenStack各服务指定一个API端点(endpoint)。当我们创建一个端点时,我们需要分别为public API,internal API,and admin API指定URL。我们可以使用IP地址也可以使用设定好的主机名即我们定义的controller。命令如下,结果如图9所示。rootcontroller#keystone endpoint-create-service-id=$(keystone service-list|awk/identity/print$2)-publicurl=http:/con
21、troller:5000/v2.0 -internalurl=http:/controller:5000/v2.0-adminurl=http:/controller:35357/v2.0图9 创建endpoint的反馈结果OPENSTACK配置与管理上述命令中,我们先来讲解下面这条命令keystone service-list|awk/identity/print$2的作用。“keystone service-list”命令的作用是列出所有已经创建的服务(service),命令awk/identity/print$2的作用是通过awk的筛选功能,匹配到“identity”所在行,“print
22、$2”是指打印出第二个数值即输出第二个字段中的数值。两条命令中间的“|”为Linux中的管道符,作用是将前一个命令的输出结果,传递给后一个命令并作为第二个命令的条件使用。注意,Keystone服务为admin API使用了一个不同的端口35357。OPENSTACK配置与管理步骤九:验证认证服务Keystone的安装为验证Keystone服务的正确安装和配置,清除OS_SERVICE_TOKEN,以及OS_SERVICE_ENDPOINT环境变量中的值,命令如下。rootcontroller#unset OS_SERVICE_TOKEN OS_SERVICE_ENDPOINT接着,用管理凭证和
23、管理终端建立了一个admin-openrc.sh文件,命令如下。rootcontroller#vi admin-openrc.sh在admin-openrc.sh文件中写入以下内容。export OS_USERNAME=adminexport OS_PASSWORD=000000export OS_TENANT_NAME=adminexport OS_AUTH_URL=http:/controller:35357/v2.0然后,在环境变量中导入这个文件来读取,使环境变量生效,命令如下。rootcontroller#source admin-openrc.shOPENSTACK配置与管理我们可以
24、通过Keystone命令来验证我们的admin-openrc.sh文件被正确配置,命令如下。rootcontroller#keystone token-get上述命令会返回一个令牌和指定租户的ID,这能验证我们已经正确配置了我们的环境变量。接下来我们需要验证我们的管理员账户已经被授权执行管理命令的权限。我们可以通过 查看keystone user-list命令输出中的id是否匹配keystone user-role-list命令中的user_id,以及管理角色是否对用户和相关组合罗列出来,这能验证我们的用户账户是否拥有绑定角色相匹配的admin权限。命令如下,结果如图10和图11所示。root
25、controller#keystone user-list图10 查看用户列表的反馈结果OPENSTACK配置与管理rootcontroller#keystone user-role-list-user admin-tenant admin图11 查看权限的反馈结果上述命令中,只要我们通过命令或环境变量定义我们的认证信息和认证服务端点,我们就可以从任意一台机器上运行所有的OpenStack命令。OPENSTACK配置与管理步骤十:常见错误及调试排错错误1:环境变量我们在执行Keystone相关命令时,经常提示认证错误信息,例如,查看用户列表命令如下。rootcontroller#keyston
26、e user-list执行命令后出现了如下的提示错误提示。The request you have made requires authentication.(HTTP 401)一般出现这样的情况都是环境变量导入错误,在与Keystone进行认证时没有通过。我们首先查看环境变量文件,命令如下。rootcontroller#vi/admin-openrc.shOPENSTACK配置与管理发现文件中的环境变量如下,其中第二行的用户密码不是创建用户时所对应的密码。export OS_USERNAME=adminexport OS_PASSWORD=123456export OS_TENANT_NAM
27、E=adminexport OS_AUTH_URL=http:/controller:35357/v2.0我们将其改为export OS_PASSWORD=000000保存后重新导入该环境变量文件,命令如下。rootcontroller#source/admin-openrc.sh重新查看用户列表,如图12发现用户显示正常。图12 更正环境变量文件后keystone命令正常执行OPENSTACK配置与管理错误2:端点创建错误 我们在创建Keystone服务端点的时候,难免对发生一些小错误,端口配置错误会导致Keystone找不到该服务,例如,我们在创建Keystone服务端点时,将admin的
28、端口写成了5000,在导入admin的环境变量后,我们查看用户列表命令如下。rootcontroller#source/admin-openrc.sh rootcontroller#keystone user-list提示以下报错:The resource could not be found.(HTTP 404)我们查看已经创建的服务端点命令如下。rootcontroller#keystone endpoint-list发现还是提示The resource could not be found.(HTTP 404)。OPENSTACK配置与管理这是因为当前系统的admin用户已经不具备访问K
29、eystone服务的令牌了,我们需要手动为系统指定令牌,我们首先查看Keystone的配置文件。rootcontroller#vi/etc/keystone/keystone.conf查看Keystone的admin令牌的令牌值(admin_token),这里为了方便演示,使用000000作为admin的令牌值。查找到admin令牌的令牌值后,我们导入令牌以及Keystone服务的admin端点。rootcontroller#export OS_SERVICE_TOKEN=000000 r o o t c o n t r o l l e r#e x p o r t OS_SERVICE_END
30、POINT=http:/controller:35357/v2.0导入完成后,我们重新查看Keystone服务端点。rootcontroller#keystone endpoint-listOPENSTACK配置与管理以上命令的执行结果如图13所示,从图中我们发现Keystone服务的adminurl端点配置错误,正确的应该是http:/controller:35357/v2.0图13 查询当前服务端点的反馈结果我们通过Keystone命令删除该端点。rootcontroller#keystone endpoint-delete f903895e45324b3d9ad98b854a8fb7ec
31、这里命令后的f903895e45324b3d9ad98b854a8fb7ec号是端点的id号,通过前面的keystone endpoint-list可以查询到。OPENSTACK配置与管理删除后,我们重新创建Keystone服务端点,命令如下。rootcontroller#keystone endpoint-create-service-id=$(keystone service-list|awk/identity/print$2)-p u b l i c u r l=h t t p:/c o n t r o l l e r:5 0 0 0/v 2.0 -i n t e r n a l u r
32、 l=h t t p:/c o n t r o l l e r:5 0 0 0/v 2.0 -adminurl=http:/controller:35357/v2.0创建后,我们可以看到创建成功的反馈信息,如图14所示。图14 重新创建服务端点成功的反馈信息OPENSTACK配置与管理接下来,我们将两个临时变量从系统环境变量中删除:ro o t c o n tro l l e r#u n s e t O S _S E RVI CE _TO K E N OS_SERVICE_ENDPOINT现在系统中环境变量只有我们之前导入的admin用户了,我们查看keystone的用户列表:rootcontroller#keystone user-list发现用户列表显示正常:问题解决。一般遇到404 Not Found,资源无法找到的问题时,可以首先查看服务端点有没有问题,服务端点是该服务的入口,如果入口不能访问,那么肯定是找不到服务资源的。