一.环境

1.1安全

OpenStack 服务支持各种各样的安全方式,包括密码 password、policy 和 encryption,支持的服务包括数据库服务器,且消息 broker 至少支持 password 的安全方式。

你可以手动创建安全密码,也可以通过运行下面的命令

openssl rand -hex 10

下面的表格给出了需要密码的服务列表以及它们在指南中的关联关系

密码名称

描述

数据库密码(不能使用变量)

数据库的root密码

ADMIN_PASS

admin 用户密码

CEILOMETER_DBPASS

Telemetry 服务的数据库密码

CEILOMETER_PASS

Telemetry 服务的 ceilometer 用户密码

CINDER_DBPASS

块设备存储服务的数据库密码

CINDER_PASS

块设备存储服务的 cinder 密码

DASH_DBPASS

Database password for the dashboard

DEMO_PASS

demo 用户的密码

GLANCE_DBPASS

镜像服务的数据库密码

GLANCE_PASS

镜像服务的 glance 用户密码

HEAT_DBPASS

Orchestration服务的数据库密码

HEAT_DOMAIN_PASS

Orchestration 域的密码

HEAT_PASS

Orchestration 服务中``heat``用户的密码

KEYSTONE_DBPASS

认证服务的数据库密码

NEUTRON_DBPASS

网络服务的数据库密码

NEUTRON_PASS

网络服务的 neutron 用户密码

NOVA_DBPASS

计算服务的数据库密码

NOVA_PASS

计算服务中``nova``用户的密码

RABBIT_PASS

RabbitMQ的guest用户密码

SWIFT_PASS

对象存储服务用户``swift``的密码

1.2主机网络

关闭防火墙和selinux

 

1.2.1控制节点服务器操作

配置网络接口

将第一个接口配置为管理网络接口:

IP 地址: 10.0.0.11

子网掩码: 255.255.255.0 (or /24)

默认网关: 10.0.0.1

[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.116
PREFIX=24
GATEWAY=10.0.0.254
DNS1=223.5.5.5
DNS2=223.6.6.6

不要改变 键``HWADDR`` 和 UUID,加入下面内容

cd /etc/sysconfig/network-scripts/
vim ifcfg-eth1

DEVICE=INTERFACE_NAME
TYPE=Ethernet
ONBOOT="yes"
BOOTPROTO="none"

修改完配置后,重启网卡

systemctl restart network

 

配置域名解析

1.设置节点主机名为 controller

2.编辑 /etc/hosts 文件包含以下内容:

# controller
10.0.0.11       controller

# compute1
10.0.0.31       compute1

# block1
10.0.0.41       block1

# object1
10.0.0.51       object1

# object2
10.0.0.52       object2

1.2.2计算节点

配置网络接口

将第一个接口配置为管理网络接口:

IP 地址:10.0.0.31

子网掩码: 255.255.255.0 (or /24)

默认网关: 10.0.0.1

cd /etc/sysconfig/network-scripts/
[root@compute network-scripts]# cat ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.117
PREFIX=24
GATEWAY=10.0.0.254
DNS1=223.5.5.5
DNS2=223.6.6.6

配置第二块网卡作为提供者网络,不分配给它IP地址

不要改变 键``HWADDR`` 和 UUID ,添加内容如下

cd /etc/sysconfig/network-scripts/
vim ifcfg-eth1
DEVICE=INTERFACE_NAME
TYPE=Ethernet
ONBOOT="yes"
BOOTPROTO="none"

openstack 各组件升级版本_网络接口

 

 

 

重启网卡

systemctl restart network

配置域名解析

1.设置节点主机名为compute1

2.编辑 /etc/hosts 文件包含以下内容:

# controller
10.0.0.11       controller

# compute1
10.0.0.31       compute1

# block1
10.0.0.41       block1

# object1
10.0.0.51       object1

# object2
10.0.0.52       object2

1.2.3块存储节点

配置网络接口

配置管理网络接口:

  • IP 地址: 10.0.0.41
  • 掩码: 255.255.255.0 (or /24)
  • 默认网关: 10.0.0.1

 

配置域名解析

  1. 设置节点主机名为``block1``。
  2. 编辑 /etc/hosts 文件包含以下内容
# controller
10.0.0.11       controller

# compute1
10.0.0.31       compute1

# block1
10.0.0.41       block1

# object1
10.0.0.51       object1

# object2
10.0.0.52       object2

1.2.4验证联通性

openstack 各组件升级版本_mysql_02

 

 

 

openstack 各组件升级版本_mysql_03

 

 

 

openstack 各组件升级版本_数据库_04

 

 

 

1.3网络时间协议(NTP)

1.3.1控制节点服务器

1.安装软件包
yum install chrony

2.编辑 /etc/chrony.conf 文件
server NTP_SERVER iburst  
##原来的server开头的都给删掉或者注释掉,配置支持设置多个server值
##控制节点默认跟公共服务器池同步时间。但是你也可以选择性配置其他服务器,比如你组织中提供的服务器。

3.为了允许其他节点可以连接到控制节点的 chrony 后台进程,在``/etc/chrony.conf`` 文件添加下面的键
allow 10.0.0.0/24

4.启动 NTP 服务并将其配置为随系统启动
# systemctl enable chronyd.service
# systemctl start chronyd.service

1.3.2其他节点服务器操作

其他节点会连接控制节点同步时间。在所有其他节点执行这些步骤。

1. 安装软件包:
# yum install chrony

2. 编辑``/etc/chrony.conf`` 文件并注释除``server`` 值外的所有内容。
server controller iburst

3. 启动 NTP 服务并将其配置为随系统启动:
# systemctl enable chronyd.service
# systemctl start chronyd.service

1.3.3验证操作

openstack 各组件升级版本_mysql_05

 

 

 

openstack 各组件升级版本_数据库_06

 

 

 

openstack 各组件升级版本_网络接口_07

 

 

 

1.3.4启动OpenStack库

在CentOS中, ``extras``仓库提供用于启用 OpenStack 仓库的RPM包。 CentOS 默认启用``extras``仓库,因此你可以直接安装用于启用OpenStack仓库的包。

yum install centos-release-openstack-mitaka

有一个异常,需要:centos-release-ceph-hammer

openstack 各组件升级版本_openstack 各组件升级版本_08

 

 

 

1.3.5完成安装

在主机上升级包

yum upgrade

安装 OpenStack 客户端

yum install python-openstackclient -y

CentOS 默认启用了 SELinux . 安装 openstack-selinux 软件包以便自动管理 OpenStack 服务的安全策略

yum install openstack-selinux -y

1.4SQL数据库

大多数 OpenStack 服务使用 SQL 数据库来存储信息。 典型地,数据库运行在控制节点上

配置组件

安装软件包


yum install mariadb mariadb-server python2-PyMySQL -y

创建并编辑 /etc/my.cnf.d/openstack.cnf,然后完成如下动作

在 [mysqld] 部分,设置 ``bind-address``值为控制节点的管理网络IP地址以使得其它节点可以通过管理网络访问数据库

[root@controller my.cnf.d]# cat /etc/my.cnf.d/openstack.cnf
[mysqld]

bind-address = 10.0.0.116
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

启动数据库

#systemctl enable mariadb.service
#systemctl start mariadb.service

修改root用户密码

mysql_secure_installation

openstack 各组件升级版本_数据库_09

 

 

1.5NoSQL 数据库

安全并配置组件

安装MongoDB包

yum install mongodb-server mongodb

编辑文件 /etc/mongod.conf 并完成如下动作

配置 bind_ip 使用控制节点管理网卡的IP地址。

openstack 各组件升级版本_mysql_10

 

 bind_ip = 10.0.0.116

默认情况下,MongoDB会在``/var/lib/mongodb/journal`` 目录下创建几个 1 GB 大小的日志文件。如果你想将每个日志文件大小减小到128MB并且限制日志文件占用的总空间为512MB,配置 smallfiles 的值

smallfiles = true

启动MongoDB

systemctl enable mongod.service
systemctl start mongod.service

openstack 各组件升级版本_openstack 各组件升级版本_11

 

 

1.6消息队列

安全并配置组件

安装包:

yum install rabbitmq-server

启动消息队列服务并将其配置为随系统启动

# systemctl enable rabbitmq-server.service
# systemctl start rabbitmq-server.service

openstack 各组件升级版本_数据库_12

 

 添加 openstack 用户

rabbitmqctl add_user openstack RABBIT_PASS

用合适的密码替换 RABBIT_DBPASS

openstack 各组件升级版本_网络接口_13

 

 给``openstack``用户配置写和读权限:

rabbitmqctl set_permissions openstack ".*" ".*" ".*"

openstack 各组件升级版本_openstack 各组件升级版本_14

 

 

1.7Memcached

安全并配置组件

安装软件包:

yum install memcached python-memcached -y

启动Memcached服务,并且配置它随机启动

# systemctl enable memcached.service
# systemctl start memcached.service

openstack 各组件升级版本_网络接口_15

 

 

二.认证服务

先决条件

完成下面的步骤以创建数据库:

  • 用数据库连接客户端以 root 用户连接到数据库服务器:

[root@controller ~]# mysql -hlocalhost -uroot -p123456

创建 keystone 数据库:

CREATE DATABASE keystone;

对``keystone``数据库授予恰当的权限:

grant all privileges on keyston.* to 'keyston'@'localhost' identified by '123456';
grant all privileges on keyston.* to 'keyston'@'%' identified by '123456';

 

退出数据库客户端。

生成一个随机值在初始的配置中作为管理员的令牌。

[root@controller ~]# openssl rand -hex 10
e7c59ee42b9459a5f115

安全并配置组件

运行以下命令来安装包。

yum install openstack-keystone httpd mod_wsgi -y

编辑文件 /etc/keystone/keystone.conf 并完成如下动作:

  • 在``[DEFAULT]``部分,定义初始管理令牌的值:

[DEFAULT]

...

admin_token = e7c59ee42b9459a5f115

使用前面步骤生成的随机数替换``ADMIN_TOKEN`` 值。

 

在 [database] 部分,配置数据库访问:

[database]

...

connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone

将``KEYSTONE_DBPASS``替换为你为数据库选择的密码。这里我的密码是123456

 

在``[token]``部分,配置Fernet UUID令牌的提供者。

[token]

...

provider = fernet

[root@controller ~]# cat /etc/keystone/keystone.conf|egrep -v "^$|^#"
[DEFAULT]
admin_token = e7c59ee42b9459a5f115
[assignment]
[auth]
[cache]
[catalog]
[cors]
[cors.subdomain]
[credential]
[database]
connection = mysql+pymysql://keystone:123456@controller/keystone
[domain_config]
[endpoint_filter]
[endpoint_policy]
[eventlet_server]
[eventlet_server_ssl]
[federation]
[fernet_tokens]
[identity]
[identity_mapping]
[kvs]
[ldap]
[matchmaker_redis]
[memcache]
[oauth1]
[os_inherit]
[oslo_messaging_amqp]
[oslo_messaging_notifications]
[oslo_messaging_rabbit]
[oslo_middleware]
[oslo_policy]
[paste_deploy]
[policy]
[resource]
[revoke]
[role]
[saml]
[shadow_users]
[signing]
[ssl]
[token]
provider = fernet
[tokenless_auth]
[trust]

初始化身份认证服务的数据库:

su -s /bin/sh -c "keystone-manage db_sync" keystone

 

初始化Fernet keys:

keystone-manage fernet_setup --keystone-user keyston --keystone-group keyston

openstack 各组件升级版本_网络接口_16

 

 

配置 Apache HTTP 服务器

编辑``/etc/httpd/conf/httpd.conf`` 文件,配置``ServerName`` 选项为控制节点:

ServerName controller

 

用下面的内容创建文件 /etc/httpd/conf.d/wsgi-keystone.conf。

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>

完成安装

启动 Apache HTTP 服务并配置其随系统启动:

systemctl enable httpd.service
# systemctl start httpd.service

openstack 各组件升级版本_mysql_17

 

 

创建服务实体和API端点

身份认证服务提供服务的目录和他们的位置。每个你添加到OpenStack环境中的服务在目录中需要一个 service 实体和一些 API endpoints

先决条件

默认情况下,身份认证服务数据库不包含支持传统认证和目录服务的信息。你必须使用:doc:keystone-install 章节中为身份认证服务创建的临时身份验证令牌用来初始化的服务实体和API端点。

你必须使用``–os-token``参数将认证令牌的值传递给:command:openstack 命令。类似的,你必须使用``–os-url`` 参数将身份认证服务的 URL传递给 openstack 命令或者设置OS_URL环境变量。本指南使用环境变量以缩短命令行的长度。

 

配置认证令牌:

export OS_TOKEN=ADMIN_TOKEN

将``ADMIN_TOKEN``替换为你在 :doc:`keystone-install`章节中生成的认证令牌。例如:

export OS_TOKEN=e7c59ee42b9459a5f115

 

配置端点URL:

export OS_URL=http://controller:35357/v3

 

配置认证 API 版本:

export OS_IDENTITY_API_VERSION=3

 

创建服务实体和API端点

在你的Openstack环境中,认证服务管理服务目录。服务使用这个目录来决定你的环境中可用的服务。

创建服务实体和身份认证服务:

openstack service create \
  --name keystone --description "OpenStack Identity" identity

未完持续更新中

 

A little progress every day