1controller需要部署支持服务有rabbitmq-server消息队列mariaDBmysql)数据库基础必备的服务有openstackkeytone,openstack-glanceopenstack-novaneutron-server以及openstack-dashbaord,可选的服务有:openstack-cinderopenstack-swiftopenstack-troveopenstack-heatopenstack-ceilometer服务

2neutron节点需要部署不同的agent服务,包括neutron-dhcp-agentneutron-l3-agentneutron-openvswitch-agentneutron-metadata-agentopenvswitch;

3compute节点需要部署计算和网络的服务,包括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创建usertenantroleendpoint

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寻找到neutronurl即可,endpoint通常分为三种:adminurlinterurlpublicurl。此外,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