由于上周使用Ubuntu安装了一下午没有安装成功,网上大部分教程又有点过时且不够详细,故详细记录一下安装过程与在安装过程中所遇到的问题。

一.配置yum仓库

使用的是OpenStack Q(Queens)版本。

yum -y install centos-release-openstack-queens
yum -y upgrade

二.安装公共组件

1. 安装openstackclient

openstackclient是用于与OpenStack内部服务进行通信的命令行客户端工具

yum -y install python-openstackclient

2. 安装数据库

OpenStack框架中很多组件的基础数据均保存在数据库中

yum -y install mariadb mariadb-server python2-PyMySQL

3. 配置数据库

新建一个配置文件

vim /etc/my.cnf.d/openstack.cnf
//内容如下:
[mysqld]
bind-address=192.168.10.110
default-storage-engine=innodb
innodb_file_per_table=on
max_connections=4096
collation-server=utf8_general_ci
character-set-server=utf8

4. 启动mariadb服务

systemctl start mariadb && systemctl enable mariadb

5. 安全配置

为了确保控制节点中的数据库的安全,需要进行一些额外配置,相关操作已经包含在mysql_secure_installation,一路y即可。

6. 配置MemCache

MemCache是一个开源的高性能分布式内存对象缓存工具,属于内存缓存,将经常需要存取的对象或数据缓存在内存中,再统一通过API的方式存取,并通过哈希运算将数据存放于内存的哈希表中,哈希表中的数据以键/值对的形式存放。
OpenStack中的Keystone组件主要承担了OpenStack框架内各个组件身份及权限认证工作,通过MemCache可以缓存租户的Token等身份信息,用户登录后进行身份及权限验证时,不需要查询存储在MySQL后端数据库中的用户信息,从而加快了数据访问速度。在数据库高负荷运行下的大型OpenStack集群环境中。采用这种方式能极大地提高用户的身份及权限验证效率。

  1. 安装MemCache

    yum -y install memcached python-memcached
  2. 配置MemCache

    vim /etc/sysconfig/memcached
    
    //修改内容
    OPTIONS="-l 192.168.10.110"
  3. 启动服务

    systemctl start memcached && systemctl enable memcached

三.Keystone安装

1. 数据库准备

//1.创建keystone数据库
create keystone;
//2.授予keystone用户对keystone数据库的权限
grant all privileges on keystone.* to 'keystone'@'localhost' identified by '000000';
grant all privileges on keystone.* to 'keystone'@'%' identified by '000000';

2. 安装配置Keystone组件

通过yum命令安装openstack-keystone、httpd、mod、wsgi这四个工具

yum -y install openstack-keystone httpd mod_wsgi

3. 配置Keystone组件

vim /etc/keystone/keystone.conf
//修改
[database]
//数据库类型://用户名:密码@数据库主机/数据库
//这里用localhost不行,改为ip地址
connection = mysql+pymysql://keystone:000000@192.168.10.110/keystone
[token]
provider=fernet

fernet:OpenStack官方推荐的token类型,其采用cryptography对称加密库(加密密明和解密密调相同)对token进行加密处理。fernet是专门为API token打造的一种轻量级安全消息格式,由于不需要使用数据库存储,因此降低了磁盘访问开销。从而提高了权限认证效率。

4. 初始化keystone数据库

su -s /bin/sh -c "keystone-manage db_sync" keystone
//表示临时切换到keystone用户执行keystone-manage db_sync命令

5. 初始化fernet密钥库及授权

keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

创建一个keystone用户及个keystone组,并针对keystone用户及keystone组初始化fernet token。由于fernet是基于对称加密的,因此在初始化过程中需要生成相应的密钥对。并针对刚刚创建的keystone用户及keystone组完成授权操作。

6. 配置Keystone服务

keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
  --bootstrap-admin-url http://192.168.10.110:5000/v3/ \
  --bootstrap-internal-url http://192.168.10.110:5000/v3/ \
  --bootstrap-public-url http://192.168.10.110:5000/v3/ \
  --bootstrap-region-id RegionOne

注意:
在OpenStack Queen版本发布之前,Keystone组件提供的服务需要运行于两个独立的端口,随着OpenStack版本的升级,原先占用35 357端口的identity v2 api已被移除,目前Keystone服务仅占用一个5 000端口。

7. 配置http服务

vim /etc/httpd/conf/httpd.conf
//修改内容
ServerName 192.168.10.110
//为httpd的配置文件创建软连接
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
//启动服务并设置为自启动
systemctl start httpd && systemctl enable httpd

遇到问题:

image-20230408220558009

原因:Selinux的安全策略引起的,为了主机的安全,它不允许访问不在它策略中指定的端口

添加端口:semanage port -a -t http_port_t -p tcp 5000

(98条消息) 启动Apache报错:Permission denied AH00072 make_sock could not bind to address address _permission denied: ah00072: make_sock: could not b_jc58127的博客-CSDN博客

image-20230408220804001

8. 配置Keystone管理账户

export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://192.168.10.110:5000/v3
export OS_IDENTITY_API_VERSION=3

image-20230408221441349

ps: 出现问题可用tail -f /var/log/keystone/keystone.log查看日志

四、租户模型初始化

1. 创建域

域类似于企业中的部门

openstack domain create --description "An Example Domain" example

出现问题:

image-20230409100226889

解决方案:(98条消息) 【已解决】Failed to discover available identity versions when contacting http://controller:5000/v3._加35357端口_21岁被迫秃头的博客-CSDN博客

2. 创建service项目

OpenStack是通过租户或项目管理资源的。针对系统内部可能用到的各类资源,需要创建service项目( service项目供系统自身使用。不要随意删除)。

openstack project create --domain default --description "Service Project" service
//创建service项目,该项目属于default域中

3. 创建demo项目

用于学习

openstack project create --domain default --description "Demo Project" Demo

4. 创建demo用户

openstack user create --domain default --password=demo demo
//创建一个用户名为demo,密码为demo,属于default域中

5. 创建user角色

openstack role create user
//创建名为user的角色

6. 为demo用户赋予user角色

openstack role add --project demo --user demo user
//将demo用户加入demo项目中并赋予user角色

参考链接

02Openstack安装公共组件_哔哩哔哩_bilibili

03Keystone组件安装_哔哩哔哩_bilibili

04Keystone租户模型初始化_哔哩哔哩_bilibili

最后修改:2023 年 04 月 10 日
如果觉得我的文章对你有用,请随意赞赏