1、controller需要部署支持服务有rabbitmq-server消息队列和mariaDB(mysql)数据库,基础必备的服务有openstack–keytone,openstack-glance,openstack-nova和neutron-server以及openstack-dashbaord,可选的服务有:openstack-cinder,openstack-swift,openstack-trove,openstack-heat和openstack-ceilometer服务;
2、neutron节点需要部署不同的agent服务,包括neutron-dhcp-agent,neutron-l3-agent,neutron-openvswitch-agent,neutron-metadata-agent和openvswitch;
3、compute节点需要部署计算和网络的服务,包括nova-compute,libvirt,网络有openstack-neutron-agent,openvswitch,可选的服务有Ceilemoter Agent;
十二、KeyStone安装(在controller上root用户进行)
keystone在整个openstack环境内,充当“大管家“的角色,它主要承担两方面的工作:1. 为所有的用户实现认证和授权工作,其中认证支持两种方式:用户密码和基于token的认证,2. 为每个服务提供访问端点,即endpoint,每个服务(keystone自己,nova,neutron,glance,cinder)需要将自己的端口以服务的形式向keystone注册,便于组件之间的交互使用,组件之间交互需要通过keystone作为桥梁,寻找到对应的服务。
(1)数据库创建与配置
# mysql -uroot -popenstack
> show databases;
> 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';
> SELECT User, Host, Password FROM mysql.user;
> exit
#验证登录数据库,用户名keystone密码KEYSTONE_DBPASS
# mysql -ukeystone -pKEYSTONE_DBPASS
> exit
# mysql -hcontroller0 -ukeystone -pKEYSTONE_DBPASS
> exit
(2)keystone的安装与配置
#安装keystone
# yum install -y openstack-keystone httpd python-openstackclient memcached python-memcached openstack-utils
注:这里可能缺少一个python-webob包,下载地址在:http://rpm.pbone.net/index.php3/stat/4/idpl/29708385/dir/opensuse/com/python-WebOb-1.2.3-1.4.x86_64.rpm.html
或者:https://pan.baidu.com/s/1JoiXHreIJeWampyh7MA8Vw
提取码:ez90
#生成token
#随机生成一个16进制的token
# export ADMIN_TOKEN=$(openssl rand -hex 10)
# echo $ADMIN_TOKEN
#配置token,XXX部分是上一步生成的token
# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token XXX
# cat /etc/keystone/keystone.conf|more
#找到这一行,查看[DEFAULT]的内容是否已修改成功:
[DEFAULT]
admin_token = XXX
#配置数据库连接
# vi /etc/hosts
#在127.0.0.1那一行后面插入本机主机名
# reboot
# openstack-config --set /etc/keystone/keystone.conf database connection mysql://keystone:KEYSTONE_DBPASS@controller0/keystone
# cat /etc/keystone/keystone.conf | more
#查看[database]是否已修改成功:
[database]
connection = mysql://keystone:KEYSTONE_DBPASS@controller0/keystone
#配置UUID token和SQL驱动(provider用在多region场景,分为UUID和PKI两种)
# openstack-config --set /etc/keystone/keystone.conf token provider keystone.token.providers.uuid.Provider
# cat /etc/keystone/keystone.conf |more
#查看[token]下,是否修改成功:
[token]
provider = keystone.token.providers.uuid.Provider
#配置SQL撤回驱动
# openstack-config --set /etc/keystone/keystone.conf revoke driver keystone.contrib.revoke.backends.sql.Revoke
#为便于排错,显示详细的日志信息(可选)
# openstack-config --set /etc/keystone/keystone.conf DEFAULT verbose True
#查看日志文件,没有执行动作,无记录信息,还未生成日志文件
# cat /var/log/keystone/keystone.log
(3) 生成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/
(4) 同步keystone数据库,生成keystone所需的表
# su -s /bin/sh -c "keystone-manage db_sync" keystone
#如果表是空的,显示结果是空的,那么就是同步不成功
# mysql -ukeystone -pKEYSTONE_DBPASS -e "show tables from keystone;"
(5) 启动keystone服务和校验服务状态
# chkconfig openstack-keystone on
# service openstack-keystone start
# service openstack-keystone status
(6) 配置定期清理过期的token(默认存在DB,防止影响性能)
# (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
十三、 kesytone创建user,tenant,role和endpoint
keystone安装和配置完成之后,需要对keystone执行初始化配置,需要定义用户user,租户tenant,角色role,服务service和端点endpoint,每个服务都需要将自己以service的形式注册到keystone中,包括keystone自己。由于初始第一次keystone也没有注册,需要通过token的方式执行初始化(配置用户之后,也是通过token的方式执行认证)。
(1) 定义token环境变量(或者通过keystone携带参数的方式执行)
#XXX部分要跟自己的token前面一致,不要有空格
# export ADMIN_TOKEN=XXX
# echo $ADMIN_TOKEN
# export OS_SERVICE_TOKEN=${ADMIN_TOKEN}
# export OS_SERVICE_ENDPOINT=http://controller0:35357/v2.0
# echo $OS_SERVICE_TOKEN
# echo $OS_SERVICE_ENDPOINT
#如果重启虚拟机主机,要重新执行一次。
(2) 创建用户,租户和权限
#创建tenant
# keystone tenant-create --name admin --description "Admin Tenant"
#这里的XXX部分是上一条指令执行结果中的ID
# keystone tenant-get XXX
# keystone tenant-list
#创建admin用户
# keystone user-create --name admin --pass ADMIN_PASS --email admin@example.com
#这里的XXX部分是上一条指令执行结果中的ID
# keystone user-get XXX
# keystone user-list
#创建admin角色
# keystone role-create --name admin
#这里的XXX部分是上一条指令执行结果中的ID
# keystone role-get XXX
# keystone role-list
#将用户admin赋予admin角色和admin project内
# keystone user-role-add --user admin --role admin --tenant admin
# keystone user-role-list --user admin --tenant admin
#创建_member_角色,并将admin用户加入该角色(dashboard默认赋予_member_角色)
#环境变量执行一遍
# 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
(3)创建demo账号相关的角色
#创建demo用户
# keystone user-create --name demo --pass DEMO_PASS --email demo@example.com --enable True
#这里的XXX部分是上一条指令执行结果中的ID
# keystone user-get XXX
# keystone user-list
#创建demo租户
# keystone tenant-create --name demo --description "Demo Tenant" --enable True
#这里的XXX部分是上一条指令执行结果中的ID
# keystone tenant-get XXX
# keystone tenant-list
#demo用户和租户、_member_角色关联
# keystone user-role-add --user demo --tenant demo --role _member_
# keystone user-role-list --user demo --tenant demo
(4) 创建service租户,其他project之间的交互,需要加入到service这个租户里,后续需要使用
# keystone tenant-create --name service --description "Service Tenant"
#这里的XXX部分是上一条指令执行结果中的ID
# keystone tenant-get XXX
# keystone tenant-list
(5) 创建keystone自身的服务和端点endpoint
openstack中任何服务(包括keystone自己)都需要以service的形式将其访问的url注册到keystone中,这样便于组件之间通讯,如nova需要和neutron通讯,则向keystone寻找到neutron的url即可,endpoint通常分为三种:adminurl,interurl和publicurl。此外,keystone还可以对不同服务划分region,通过region将不通区域的服务进行隔离。如下是服务service和端点enpdoint的配置过程。
#创建keystone的service类型,其他服务通过该catalog即可访问到keystone服务
# keystone service-create --name keystone --type identity --description "OpenStack Identity"
#这里的XXX部分是上一条指令执行结果中的ID
# keystone service-get XXX
# keystone service-list
#将keystone服务端口注册到service中,从而通过service访问keystone
#创建客户服务的api端点
# 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 endpoint-list
(6)校验keystone的配置
#取消keystone的环境变量,取消掉刚才设置的两个环境变量
# unset OS_SERVICE_TOKEN
# unset OS_SERVICE_ENDPOINT
#校验admin用户获取token是否正常,以管理租户,管理用户身份获得一个验证令牌
# keystone --os-username admin --os-tenant-name admin --os-password ADMIN_PASS --os-auth-url http://controller0:35357/v2.0 token-get
#校验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
#校验demo账号获取token情况
#有输出,则表示正常。
# keystone --os-username demo --os-tenant-name demo --os-password DEMO_PASS --os-auth-url http://controller0:35357/v2.0 token-get
#校验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
#日志中有警告,提示需要admin权限。
# tail -f /var/log/keystone/keystone.log
(7)设置用户环境变量文件
使用keystone客户端和keystone服务交互的时候,可以在keystone命令后面加上类似如<span style=”color: black;”–<os-username的参数,如果每次执行都需要加上该参数的话,会非常不便捷,为了避免每次执行命令都需要加上参数,keystone支持设置环境变量,将所需要的信息,以环境变量的方式加载,后续直接输入子命令即可,不需要加额外参数。
#配置admin用户的环境变量
# vi /root/admin-openrc.sh
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller0:35357/v2.0
# source /root/admin-openrc.sh
# set |grep OS_
# keystone token-get
# keystone user-list
#配置demo账号的环境变量
# vi /root/demo-openrc.sh
export OS_TENANT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller0:5000/v2.0
# 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等