一.环境
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"
重启网卡
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
配置域名解析
- 设置节点主机名为``block1``。
- 编辑 /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验证联通性
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验证操作
1.3.4启动OpenStack库
在CentOS中, ``extras``仓库提供用于启用 OpenStack 仓库的RPM包。 CentOS 默认启用``extras``仓库,因此你可以直接安装用于启用OpenStack仓库的包。
yum install centos-release-openstack-mitaka
有一个异常,需要:centos-release-ceph-hammer
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
1.5NoSQL 数据库
安全并配置组件
安装MongoDB包:
yum install mongodb-server mongodb
编辑文件 /etc/mongod.conf 并完成如下动作
配置 bind_ip 使用控制节点管理网卡的IP地址。
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
1.6消息队列
安全并配置组件
安装包:
yum install rabbitmq-server
启动消息队列服务并将其配置为随系统启动:
# systemctl enable rabbitmq-server.service
# systemctl start rabbitmq-server.service
添加 openstack 用户:
rabbitmqctl add_user openstack RABBIT_PASS
用合适的密码替换 RABBIT_DBPASS
给``openstack``用户配置写和读权限:
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
1.7Memcached
安全并配置组件
安装软件包:
yum install memcached python-memcached -y
启动Memcached服务,并且配置它随机启动
# systemctl enable memcached.service
# systemctl start memcached.service
二.认证服务
先决条件
完成下面的步骤以创建数据库:
- 用数据库连接客户端以 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
配置 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
创建服务实体和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