这个服务还是去看官方文档的介绍,相当于是给所有服务提供一个api接口,因为OpenStack服务有很多,而且端口都不同,没办法把后面所有的端口都记住,只能装一个类似于前台的keystone服务,让这个keystone服务告诉用户每个服务的端口都是什么。后续安装其他OpenStack服务的步骤大致如下:
- 在MySQL上面创库授权
- keystone上面创建用户,并关联角色
- 在keystone上面注册api
- yum安装服务的软件包
- 修改服务的配置文件
- 同步数据库
- 启动服务
后面的服务都要遵循这个规则,唯独现在的keystone不需要,因为keystone相当于一个大哥。
- 创库授权:
在mysql中执行下面的命令(直接在终端输入mysql即可进入):
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
exit
直接复制粘贴即可,在keystone在没有配置好之前可以设置一个管理员token(令牌)。这个管理员token相当于是一个过渡的。这里官方文档输入了命令生成,但是我们这里不要去生成,因为后面的配置文件都是默认的管理员token,现在生成一个随机值的话,后面的配置文件都需要去修改,很麻烦。
- 安装keystone相关软件包
这里装的包是http和wsgi,这个http很容易理解,wsgj回顾以前讲nginx的时候说用fastcgi来对接php服务,现在OpenStack是python代码,所以python这边用的是wsgj来对接的,同理nginx和http是一样的套路,所以这里对接wsgj。
yum install openstack-keystone httpd mod_wsgi -y
装完之后我们需要修改配置文件,安装一个OpenStack的工具包,方便修改配置文件:
yum install openstack-utils -y
装完之后修改的配置文件只需要修改三行,这个配置文件是真的长2000多行,我们输入下面的命令先过滤掉注释然后备份一下文件,接着用OpenStack工具包去修改配置文件即可:
\cp /etc/keystone/keystone.conf{,.bak}
grep -Ev '^$|#' /etc/keystone/keystone.conf.bak >/etc/keystone/keystone.conf
openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token ADMIN_TOKEN
openstack-config --set /etc/keystone/keystone.conf database connection mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
openstack-config --set /etc/keystone/keystone.conf token provider fernet
可以去配置文件里面看看是否修改成功了,一般都是成功了,然后和我对一下md5值,如果你的系统啥都都是跟我一样,那么你的md5值也是一样的:
[root@controller opt]# md5sum /etc/keystone/keystone.conf
d5acb3db852fe3f247f4f872b051b7a9 /etc/keystone/keystone.conf
如果md5值不一样,那就把上面的命令再执行一下,如果还不一样那么就可能是你的系统版本和我的不一样。
- 同步数据库
现在同步数据库,一定要注意下面的命令全部复制粘贴,不要看前面有个su就只复制后面的那是不可以的:
su -s /bin/sh -c "keystone-manage db_sync" keystone
同步时间稍长,之后输入下面的命令看有没有结果:
mysql keystone -e 'show databases;'
一般都是有结果的,如果没有那么就是你的数据库没有做初始化操作,在上一节的初始化操作那里没有做好
- 初始化fernet
执行下面的命令,因为刚才的配置文件最后一行用的模式是fernet:
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
- 配置httpd
根据官方文档把httpd的配置文件里写上controller:
echo "ServerName controller" >>/etc/httpd/conf/httpd.conf
用vi修改配置文件,这里一定要记得进入了 vi之后按i进入插入模式再粘贴:
vi /etc/httpd/conf.d/wsgi-keystone.conf
粘贴内容如下,监听一个35357端口和一个5000端口:
Listen 5000
Listen 35357
<VirtualHost *:5000>
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /usr/bin/keystone-wsgi-public
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
<Directory /usr/bin>
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:35357>
WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-admin
WSGIScriptAlias / /usr/bin/keystone-wsgi-admin
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/httpd/keystone-error.log
CustomLog /var/log/httpd/keystone-access.log combined
<Directory /usr/bin>
Require all granted
</Directory>
</VirtualHost>
之后检查httpd配置文件的md5值:
[root@controller ~]# md5sum /etc/httpd/conf.d/wsgi-keystone.conf
8f051eb53577f67356ed03e4550315c2 /etc/httpd/conf.d/wsgi-keystone.conf
结果应该跟上面一样才对,否则就检查你的配置文件吧。
- 启动httpd
一样的话就启动httpd:
systemctl enable httpd.service
systemctl start httpd.service
启动成功之后会有一个35357和5000端口
这里会用到刚才的管理员token。
export OS_TOKEN=ADMIN_TOKEN
export OS_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
执行完之后查看环境变量有没有上面三条:
[root@controller ~]# env|grep OS
HOSTNAME=controller
OS_IDENTITY_API_VERSION=3
OS_TOKEN=ADMIN_TOKEN
OS_URL=http://controller:35357/v3
输出的结果就是上面的token,有了这个环境变量才可以注册api
openstack service create \
--name keystone --description "OpenStack Identity" identity
openstack endpoint create --region RegionOne \
identity public http://controller:5000/v3
openstack endpoint create --region RegionOne \
identity internal http://controller:5000/v3
openstack endpoint create --region RegionOne \
identity admin http://controller:35357/v3
上面是4条命令,直接全部复制粘贴即可,之后验证命令分别输入:
openstack service list
openstack endpoint list
一个是查看服务,一个是查看api接口的,我直接给个图,大家必须要输出成下面的样子才行,服务有一个,接口有三个,顺序和id不一样没关系:
创建一个default域,再创建项目,再创建用户,最后再把这个用户给一个admin的角色。到最后的最后再给权限。直接批量执行:
openstack domain create --description "Default Domain" default
openstack project create --domain default \
--description "Admin Project" admin
openstack user create --domain default \
--password ADMIN_PASS admin
openstack role create admin
openstack role add --project admin --user admin admin
openstack project create --domain default \
--description "Service Project" service
检验的命令:
openstack domain list
openstack project list
openstack user list
openstack role list
结果如图:
创建环境变量脚本,这个文件创建在root目录下就行了
cd
vi admin-openrc
环境变量内容:
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
保存之后输入下面的命令让环境变量生效:
source admin-openrc
生效了之后输入下面的命令如果输出和我一样就对了:
openstack token issue
openstack user list
如果你的报错了请检查你的密码设置。我这里用的默认的ADMIN_PASS,输入“unset OS_TOKEN OS_URL”可以重置环境变量
1 条评论
“创建域、项目、用户和角色”这个区域上边博主忘了传图,这里只要回复类似表格内容就正确