手动部署OpenStack(三)之“Keystone认证服务配置”

配置详细步骤

笔记链接:http://note.youdao.com/noteshare?id=75a9c5fa39865ef369e73d4c9aadfd03

1、安装MySQL服务
注:该项的所有操作步骤需要使用root用户进行
该项需要在controller控制节点主机进行单独设置。
OpenStack持久化数据需要存储到数据库中,如Nova相关的主机信息,instance状态,网络相关的网络,子网,端口,地址范围,agent,cinder相关的volume存储,卷的分配情况等等,一般而言,在构建controller的高可用集群上,MySQL是必须要考虑的地方,数据库一般运行在controller节点,其它节点只需安装MySQL-Python包即可。
①清空yum缓存 #yum clean all
制作新的缓存 #yum makecache
#yum install -y mysql mysql-server MySQL-python

②修改配置文件 #vi /etc/my.cnf

启动MySQL服务器 #service mysqld start

设置MySQL服务器开机自动启动 #chkconfig mysqld on

③修改MySQL数据库root密码为openstack
#/usr/bin/mysqladmin -u root password ‘openstack’
mysql数据库的初始化 #mysql_install_db

2、安装rabbitmq消息队列
注:该项的所有操作步骤需要使用root用户进行
该项需要在controller控制节点主机进行单独设置。
①导入key
#mkdir -p /data/rabbitmq
#cd /data/rabbitmq
#vi rabbitmq-signing-key-public.asc.txt

在新建文本文档 rabbitmq-signing-key-public.asc.txt内添加如下内容:、

#rpm --import rabbitmq-signing-key-public.asc.txt >导入公匙

②安装rabbitmq,将以下4个rpm包:

通过xftp工具上传到/data/rabbitmq目录下

使用命令#rpm -ivh [包名]将上图4个rpm包进行安装。

③#cd /etc/rabbitmq
#echo “[{rabbit,[loopback_users,[]}]}].”>rabbitmq.config >开启远程访问
#service rabbitmq -server start

#/usr/lib/rabbitmq/bin/rabbitmq-plugins list >查询RabbitMQWeb管理插件是否开启。

#rabbitmq-plugins enable rabbitmq_management >安装RabbitmqWeb管理插件
#rabbitmqctl list_users >查看用户列表
#chkconfig rabbitmq-server on

④http://10.20.0.10:15672/进入管理界面来查看rabbitmq的信息。默认管理员用户和密码都是:guest

⑤为nova,neutron,cinder,heat创建用户并授予权限。
#rabbitmqctl add_user nova NOVA_MOPASS
#rabbitmqctl add_user neutron NEUTRON_MOPASS
#rabbitmqctl add_user cinder CINDER_MOPASS
#rabbitmqctl add_user heat HEAT_MOPASS
#rabbitmqctl list_users

⑥对相应用户执行授权操作
#rabbitmqctl set_permissions -p / nova‘.’‘.’‘.
#rabbitmqctl set_permissions -p / neutron‘.
’‘.’‘.
#rabbitmqctl set_permissions -p / cinder‘.’‘.’‘.
#rabbitmqctl set_permissions -p / heat‘.
’‘.’‘.

#rabbitmqctl list_permissors

3、Keystone安装
★该项的所有操作步骤需要使用root用户进行
★此项在controller0主机上进行操作
①创建库和授权
连接数据库,用户名:root密码:openstack
#mysql -uroot -popenstack

#显示所有数据库
show databases;

#创建数据库keystone
create database keystone;

#查看数据库
show databases;

#授权本地用户
grant all privileges on keystone.* to ‘keystone’@‘localhost’ identified by ‘KEYSTONE_DBPASS’;
#授权远程用户
grant all privileges on keystone.* to ‘keystone’@’%’ identified by ‘KEYSTONE_DBPASS’;
exit

#mysql -uroot -popenstack
#查看所有用户
SELECT User,Host,Password FROM mysql.user;
exit

②#验证登录数据库,用户名:keystone密码:KETSTONE_DBPASS
#mysql -ukeystone -pKEYSTONE_DBPASS
exit

③keystone的安装和配置
a.安装软件包
#yum install -y openstack-keystone python-keystoneclient openstack-utils

b.生成token
#export ADMIN_TOKEN=$(openssl rand -hex 10)
:随机生成一个16进制的token
#echo $ADMIN_TOKEN
c.配置token
#openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token ba5a52a1aeb0b919a67f
查看参数修改结果
cat /etc/keystone/keystone.conf|more

d.配置数据库连接
#vi /etc/hosts
#Reboot

#openstack-config --set /etc/keystone/keystone.conf database connection mysql://keystone:KEYSTONE_DBPASS@controller0/keystone
#cat /etc/keystone/keystone.conf | more

#cat /etc/keystone/keystone.conf | grep connection=

e.配置UUID token和SQL驱动
#openstack-config --set /etc/keystone/keystone.conf token provider keystone.token.providers.uuid.Provider

#cat /etc/keystone/keystone.conf | more
查看[token]下,是否修改成功:

#配置SQL撤回驱动
#openstack-config --set /etc/keystone/keystone.conf revoke driver keystone.contrib.revoke.back
#cat /etc/keystone/keystone.conf | grep revoke

f.为便于排错,显示详细的日志信息
#openstack-config --set /etc/keystone/keystone.conf DEFAULT verbose True
#cat /var/log/keystone/keystone.log(日志文件)

(没有执行动作,无记录信息,还未生成日志文件)
④生成PKI认证所需的证书文件
#keystone-manage pki_setup --keystone-user keystone --keystone-group keystone

#ll -d /etc/keystone/ssl/
#chown -R keystone:keystone /etc/keystone/ssl/
#chmod -R o-rwx /etc/keystone/ssl/
#chown -R keystone:keystone /var/log/keystone/
#ll -d /etc/keystone/ssl/

⑤同步keystone数据库,生成keystone所需的表
#su -s /bin/sh -c “keystone-manage db_sync” keystone
#mysql -ukeystone -pKEYSTONE_DBPASS -e “show tables from keystone;”
(如果表是空的,显示结果是空的,那么就是同步不成功)

⑥启动keystone服务和校验服务状态
#chkconfig openstack-keystone on
#service openstack-keystone start
#service openstack-keystone status

⑦创建一个cron任务,配置定期清理过期的token
#(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/keystone

4、keystone创建user,tenant,role和endpoint
★该项的所有操作步骤需要使用root用户进行
★此项在controller0主机上进行操作

keystone安装和配置完成之后,需要对keystone执行初始化配置,需要定义用户user,租户tenant ,角色role ,服务service和端点endpoint,每个服务都需要将自己以service的形式注册到 keystone中,包括keystone自己。由于初始第一-次keystone也没有注册,需要通过token的方式执行初始化(配置用户之后,也是通过token的方式执行认证)。
①定义token环境变量(或者通过keystone携带参数的方式执行)
#export ADMIN_TOKEN=ba5a52a1aeb0b919a67f
(蓝色部分要跟自己前面的token一致,不要有空格)

#echo KaTeX parse error: Expected 'EOF', got '#' at position 13: ADMIN_TOKEN #̲export OS_SERVI…{ADMIN_TOKEN}
#export OS_SERVICE_ENDPOINT=http://controller0:35357/v2.0
#echo $OS_SERVICE_TOKEN
#echo $OS_SERVICE_ENDPOINT
(如果重启虚拟机主机,要重新执行一次)

如果在创建用户租户角色等过程中出现以下警告提示,请重新将token环境变量命令执行一次!

②创建用户,租户和权限
a. 创建tenant
#keystone tenant-create --name admin --description “Admin Tenant”
#keystone tenant-get 76f2c2d453c94432acdf30d59533959c
(这里的蓝色部分ID是上条命令执行结果显示的ID)
#keystone tenant-list

b. 创建admin用户
#keystone user-create --name admin --pass ADMIN_PASS --email [email protected]
#keystone user-get ad0c0cf061f241499a5b045befd612a7
(这里的蓝色部分ID是上条命令执行结果显示的ID)
#keystone user-list

c. 创建admin角色
#keystone role-create --name admin
#keystone role-get 5f975b8db3104f3fb10e586a996d06d1
(这里的蓝色部分ID是上条命令执行结果显示的ID)
#keystone role-list

d. 将用户admin赋予admin角色和admin progect内
#keystone user-role-add --user admin --role admin --tenant admin
#keystone user-role-list --user admin --tenant admin

e. 创建_menber_角色,并将admin用户加入该角色
#export OS_TENANT_NAME=admin
#export OS_USERNAME=admin
#export OS_PASSWORD=ADMIN_PASS
#export OS_AUTH_URL=http://controller0:35357/v2.0
(环境变量执行一次)

#keystone role-create --name member

#keystone user-role-add --user admin --role member --tenant admin
#keystone user-role-list --user admin --tenant admin

③创建demo账号相关的角色

a. 创建demo用户
#keystone user-create --name demo --pass=DEMO_PASS [email protected] --enable=True
#keystone user-get 6a242c58fedf405aa28b94a7bba13c53
(这里的蓝色部分ID是上条命令执行结果显示的ID)

#keystone user-list

b. 创建demo租户
#keystone tenant-create --name demo --description “Demo Tenant” --enable True
#keystone tenant-get 947f8918273141c2aa48555c8bae3c2e
(这里的蓝色部分ID是上条命令执行结果显示的ID)
#keystone tenant-list

c. demo用户和租户,_member_角色关联
#keystone user-role-add --user demo --tenant demo --role member
#keystone user-role-list --user demo --tenant demo

④创建service租户,其他project之间的交互,需要加入到service这个租户里,后续需要使用

#keystone tenant-create --name service --description “Service Tenant”
#keystone tenant-get a6876a30df3840ad979323334052eee1
(这里的蓝色部分ID是上条命令执行结果显示的ID)
#keystone tenant-list

⑤创建keystone自身的服务和端点endpoint(服务访问点)

openstack中任何服务(包括keystone自己)都需要以service的形式将其访问的ur注册到keystone中,这样便于组件之间通讯。
如nova需要和neutron通讯,则向keystone寻找到neutron的url即可endpoint通常分为三种: adminurl , interurl和publicur.此外,keystone还可以对不同服务划分region,通过region将不通区域的服务进行隔离。如下是服务service和端点enpdoint的配置过程。
a. 创建keystone的service类型,其他服务通过该catalog即可访问到keystone服务。
#keystone service-create --name keystone --type identity --description “OpenStack Identity”
#keystone service-get ebf6cd82018846c891c0e7a757288fa0
(这里的蓝色部分ID是上条命令执行结果显示的ID)
#keystone service-list

b. 将keystone服务端口注册到service中,从而通过service访问keystone
#keystone endpoint-create --service-id=$(keystone service-list|awk ‘/ identity / {print $2}’) --publicurl http://controller0:5000/v2.0 --internalurl http://controller0:500key0/v2.0 --adminurl http://controller0:35357/v2.0 --region regionOne

⑥校验keystone的配置

a. 取消keystone的环境变量
#unset OS_SERVICE_TOKEN
#unset OS_SERVICE_ENDPOINT
(取消掉刚才设置的两个环境变量)
b. 校验admin用户获取token是否正常
#keystone --os-username admin --os-tenant-name admin --os-password ADMIN_PASS --os-auth-url http://controller0:35357/v2.0 token-get
(以管理租户,管理用户身份获得一个验证令牌)

c. 校验admin是否有管理权限,如用户,租户,角色,服务,端点等
#keystone --os-username admin --os-tenant-name admin --os-password ADMIN_PASS --os-auth-url http://controller0:35357/v2.0 user-list
(以管理租户,管理用户身份获得用户列表)
#keystone --os-username admin --os-tenant-name admin --os-password ADMIN_PASS --os-auth-url http://controller0:35357/v2.0 service-list
(以管理租户,管理用户身份获得服务列表;有输出内容表示执行成功)

d. 校验demo账号获取token情况
#keystone --os-username admin --os-tenant-name admin --os-password ADMIN_PASS --os-auth-url http://controller0:35357/v2.0 token-get
(有输出内容表示正常)

e. 校验demo账号是否有权限
#keystone --os-username demo --os-tenant-name demo --os-password DEMO_PASS --os-auth-url http://controller0:35357/v2.0 user-list
#keystone --os-username demo --os-tenant-name demo --os-password DEMO_PASS --os-auth-url http://controller0:35357/v2.0 endpoint-list
#tail -f /var/log/keystone/keystone.log
(日志中有警告,提示需要admin权限)

⑦设置用户环境变量文件

使用keystone客户端和keystone服务交互的时候, 可以在keystone命令后面加上类似如–os username的参数,如果每次执行都需要加上该参数的话,会非常不便捷,为了避免每次执行命令都需要加上参数, keystone支持设置环境变量,将所需要的信息,以环境变量的方式加载,后续直接输入子命令即可,不需要加额外参数。
a. 配置admin用户的环境变量
#vi /root/admin-openrc.sh
#source /root/admin-openrc.sh(使改变的环境变量立即生效)
#set |grep OS_
#keystone token-get
#keystone user-list

b. 配置demo账号的环境变量
#vi /root/demo-openrc.sh
#source /root/demo-openrc.sh
#keystone token-get
#keystone user-list

说明:
至此,keystone的配置已完成,配置过程中,对每个步骤,都做校验,以确保万无失;如果遇到错误,请校验配置文件和日志信息,结合日志信息排错,后续,openstack中的所有服务,都需要注册个账号 ,并以service的形式到keystone中注册访问端点endpoint,
配置文件:/etc/keystone/keystone.conf
日志文件:/var/log/keystone
常见的表: user,group,tenant,role,service endpoint,region,plicy等

你可能感兴趣的:(虚拟化,openstack部署)