CentOS -OpenStack-pike 服务搭建

Centos-7 部署openstack-pike步骤详解

加入老张:

作者老张

关注老张微信公众号:


一、        环境准备:

控制节点与计算节点都做环境部署

1.1   两台虚拟机

两台centos-7虚拟机:

一台控制节点(controller):  4G内存、1核、双网卡

一台计算节点(computer):  4G内存、1核、双网卡、

修改/etc/hosts配置文件,进行修改主机名。

#173.168.6.15   controller

#173.168.6.200  computer

将controller和compute的第一块网卡变成网络接口

因为给每台机器配置了两个网卡,先只需将controller和compute的第一个接口变成网络接口。

将controller和compute的第二块网卡作为provider网络打开第二个网卡#vi   /etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME

配置完后:systemctl   restart  network 重启网络

1.2、关闭防火墙和上下文

 

systemctl   stop  firewalld.service

systemctl   disable  firewalld.service  永久关闭防火墙

setenforcec    0(设置selinux为允许模式)或者编辑/etc/selinux/cocnfig

文件把enforce 改成disable

1.3、配置网络yum仓库

进入 cd /etc/yum.repos.d  目录下

输入命令wget  http://mirrors.aliyun.com/repo/Centos-7.repo

将阿里云的yum源下载到本地使用,执行这条命令后yum仓库里就有了阿里的yum源,需要把其他的yum源删除,执行yum clean all 删除系统缓存yum,然后执行yum  update 更新yum更新完成后就可以使用网络yum了。

1.4   安装并配置chrony

#yum install chrony

对于RHEL,CentOS或SUSE,请编辑该/etc/chrony.conf文件:

$Server controller

$Allow 173.168.6.0/24 (允许173.168.6.0网段的节点连接到控制节点上)

开启chrony

# systemctl enable chronyd.service

# systemctl start chronyd.service

校验:

chronyc  sources

控制节点:

其他节点:

1.5、安装Openstack

安装openstack最新的源:

#yum install centos-release-openstack-pike

#yum upgrade    (安装完openstack后在主机上升级包出现新的内核重启系统激活内核)

#yum install python-openstackclient         (安装opentack必须的插件)

#yum install openstack-selinux

 

1.6、安装配置mysql  和pymsql

大多数OpenStack服务使用SQL数据库来存储信息。数据库通常在控制器节点上运行。本指南中的程序根据分布使用MariaDB或MySQL。OpenStack服务还支持其他SQL数据库,包括 PostgreSQL。

安装软件包:

# yum install mariadb mariadb-server python2-PyMySQL

 

创建并编辑该/etc/my.cnf.d/openstack.cnf文件(/etc/my.cnf.d/如果需要,备份现有配置文件)并完成以下操作:

创建一个[mysqld]部分,并将bind-address 密钥设置为控制器节点的管理IP地址,以使其他节点能够通过管理网络进行访问。设置其他键以启用有用的选项和UTF-8字符集:

[mysqld]

bind-address = 10.0.0.11(本机地址)

 

default-storage-engine = innodb

innodb_file_per_table = on

max_connections = 4096

collation-server = utf8_general_ci

character-set-server = utf8

完成安装以后启动mariadb服务:

# systemctl enable mariadb.service

# systemctl start mariadb.service

 

通过运行mysql_secure_installation 脚本来保护数据库服务。特别是,为数据库root帐户选择一个合适的密码 :

#mysql_secure_installation

 

 

1.7    rabbitmq(消息队列)安装

OpenStack使用消息队列来协调服务之间的操作和状态信息。消息队列服务通常在控制器节点上运行。OpenStack支持多种消息队列服务,包括RabbitMQ, Qpid和ZeroMQ。但是,包装OpenStack的大多数发行版都支持特定的消息队列服务。本指南实现了RabbitMQ消息队列服务,因为大多数发行版都支持它。如果您更喜欢实施不同的消息队列服务,请参阅与其相关的文档。

 

消息队列在控制器节点上运行。

安装软件包:

# yum install rabbitmq-server

 

启动消息队列服务并将其配置为在系统引导时启动:

# systemctl enable  rabbitmq-server.service

# systemctl start  rabbitmq-server.service

 

添加openstack用户:

# rabbitmqctl add_user openstack RABBIT_PASS
 
Creating user "openstack" ...

 

注:用RABBIT_PASS适当的密码替换。

允许用户进行配置,写入和读取访问 openstack:

# rabbitmqctl set_permissions openstack ".*"".*"".*"
 
Setting permissions for user "openstack" in vhost "/" ...
 
开启rabbitmq服务:
systemctl  enable  rabbitmq-erver.service
systemctl   start   rabbitmq-erver.service

1.8    Memcached 安装与配置

服务的身份认证服务使用Memcached缓存令牌。memcached服务通常在控制器节点上运行。对于生产部署,我们建议启用防火墙,身份验证和加密的组合来保护它。

安装软件包:

# yum install memcached python-memcached

编辑/etc/sysconfig/memcached文件并完成以下操作:

配置服务以使用控制器节点的管理IP地址。这是为了使其他节点能够通过管理网络进行访问:

OPTIONS="-l 127.0.0.1,::1,controller"

 

注意:更改现有的行。OPTIONS="-l 127.0.0.1,::1"

完成安装启动Memcached服务并将其配置为在系统引导时启动:

#systemctl enable memcached.service

#systemctl start memcached.service

1.9   etcd部件安装与配置

只在控制节点做

安装软件包:

# yum install etcd

 

编辑/etc/etcd/etcd.conf文件并设置ETCD_INITIAL_CLUSTER,ETCD_INITIAL_ADVERTISE_PEER_URLS,ETCD_ADVERTISE_CLIENT_URLS, ETCD_LISTEN_CLIENT_URLS控制器节点,以使经由管理网络通过其他节点的访问的管理IP地址:

#[Member]
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://10.0.0.11:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379"
ETCD_NAME="controller"
#[Clustering]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"
ETCD_INITIAL_CLUSTER="controller=http://10.0.0.11:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER_STATE="new"

注:上面的地址修改成自己本机的IP地址。

安装完成启用并启动etcd服务:

# systemctl enable etcd

# systemctl start etcd

 

二、        认证服务(Identity service –keystone installation for Pike):

OpenStack身份识别服务为管理身份验证,授权和服务目录提供了单点集成。

身份服务通常是用户与之交互的第一个服务。一旦通过身份验证,最终用户就可以使用他们的身份访问其他OpenStack服务。同样,其他OpenStack服务利用身份服务来确保用户是他们所说的人,并发现部署中其他服务的位置。身份识别服务还可以与一些外部用户管理系统(如LDAP)集成。

用户和服务可以通过使用由身份服务管理的服务目录来定位其他服务。顾名思义,服务目录是OpenStack部署中可用服务的集合。每个服务可以有一个或多个端点,每个端点可以是以下三种类型之一:admin,internal或public。在生产环境中,出于安全原因,不同类型的终端类型可能会驻留在暴露给不同类型用户的单独网络中。例如,公共API网络可能从互联网上可见,因此客户可以管理他们的云。管理API网络可能仅限于管理云基础架构的组织中的运营商。内部API网络可能仅限于包含OpenStack服务的主机。另外,OpenStack支持多个区域的可伸缩性。RegionOne地区。在身份服务中创建的区域,服务和端点一起构成部署的服务目录。部署中的每个OpenStack服务都需要一个服务条目,并在Identity服务中存储相应的端点。这可以在Identity Service安装和配置完成后完成。

身份服务包含以下组件:

服务器

集中式服务器使用RESTful接口提供认证和授权服务。

驱动程序

驱动程序或服务后端集成到中央服务器。它们用于访问OpenStack外部的存储库中的身份信息,并且可能已经存在于部署OpenStack的基础架构(例如SQL数据库或LDAP服务器)中。

模块

中间件模块运行在使用Identity服务的OpenStack组件的地址空间中。这些模块拦截服务请求,提取用户凭据并将其发送到中央服务器进行授权。中间件模块和OpenStack组件之间的集成使用Python Web服务器网关接口。

本节介绍如何在控制器节点上安装和配置代码为keystone的OpenStack Identity服务。为了扩展性,这个配置部署了Fernet令牌和Apache HTTP服务器来处理请求。

在安装和配置Identity Service之前,您必须创建一个数据库。

2.1  创建keystone数据库

使用数据库访问客户端以root用户身份连接到数据库服务器:

$ mysql -u root -p

创建keystone数据库:

MariaDB [(none)]> CREATE DATABASE keystone;

授予对keystone数据库的适当访问权限:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.*TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';

MariaDB [(none)]> GRANT ALL PRIVILEGES ONkeystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';

注:用KEYSTONE_DBPASS适当的密码替换。

2.2  安装和配置keystone的部件

注意:默认配置文件因分布而异。您可能需要添加这些部分和选项,而不是修改现有部分和选项。此外,...配置片段中的省略号()指示您应该保留的潜在默认配置选项。

注意:本指南使用Apache HTTP服务器mod_wsgi在端口5000和35357上提供身份服务请求。默认情况下,keystone服务仍监听这些端口。因此,本指南手动禁用keystone服务。

运行以下命令来安装软件包:

# yum install openstack-keystone httpd mod_wsgi

编辑/etc/keystone/keystone.conf文件并完成以下操作:

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

[database]
# ...
connection=mysql+pymysql://keystone:[email protected]/keystone

注:替换KEYSTONE_DBPASS为您为数据库选择的密码;注释掉或删除connection该[database]部分中的其他选项 。

在该[token]部分中,配置Fernet令牌提供程序:

[token]
# ...
provider=fernet

填充身份服务数据库(同步数据库 ):

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

初始化Fernet密钥存储库:

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

引导身份服务:

# keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
  --bootstrap-admin-url http://controller:35357/v3/ \
  --bootstrap-internal-url http://controller:5000/v3/ \
  --bootstrap-public-url http://controller:5000/v3/ \
  --bootstrap-region-id RegionOne
注:替换ADMIN_PASS为管理用户的合适密码。

2.3  配置Apache HTTP服务器

编辑该/etc/httpd/conf/httpd.conf文件并配置该 ServerName选项以引用控制器节点:

#ServerName controller

创建一个指向/usr/share/keystone/wsgi-keystone.conf文件的链接:

# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

完成安装启动Apache HTTP服务并将其配置为在系统引导时启动:

# systemctl enable httpd.service

# systemctl start httpd.service

配置管理帐户:

$exportOS_USERNAME=admin
$exportOS_PASSWORD=ADMIN_PASS
$exportOS_PROJECT_NAME=admin
$exportOS_USER_DOMAIN_NAME=Default
$exportOS_PROJECT_DOMAIN_NAME=Default
$exportOS_AUTH_URL=http://controller:35357/v3
$exportOS_IDENTITY_API_VERSION=3

注:用keystone-install-configure-rdoADMIN_PASS中的命令替换为使用的密码。keystone-manage bootstrap。

2.4  创建一个域,项目,用户和角色

 

身份服务为每个OpenStack服务提供身份验证服务。身份验证服务使用域,项目,用户和角色的组合。

本指南使用一个服务项目,其中包含您添加到环境中的每项服务的唯一用户。创建service项目:

 注:如果创建存储项目、域、和用户报错(http409)极大可能是以前创建的keystone数据库跟想要创建的数据库产生冲突。

解决办法:你应该连接到mysql并执行以下查询删除keystone的数据库,然后再次创建。drop database keystone;而 create database keystone;现在,这将创建一个全新的梯形DB然后在重新配置。现在您需要重新同步db以便执行命令:su -s /bin/sh -c"keystone-manage db_sync" keystone

$ openstack project create --domain default \
  --description "Service Project" service
 
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 24ac7f19cd944f4cba1d77469b2a73ed |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | default                          |
+-------------+----------------------------------+

普通(非管理员)任务应该使用非特权项目和用户。作为示例,本指南创建demo项目和用户。

创建demo项目:

$ openstack project create --domain default \
  --description "Demo Project" demo
 
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 231ad6e7ebba47d6a1e57e1cc07ae446 |
| is_domain   | False                            |
| name        | demo                             |
| parent_id   | default                          |
+-------------+----------------------------------+

注意:在为此项目创建其他用户时不要重复此步骤。

创建demo用户:(会提示你输入密码,输入的密码即为为demo用户设置的密码,这里我默认使用1)

$ openstack user create --domain default \
  --password-prompt demo
 
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | aeda23aa78f44e859900e22c24817832 |
| name                | demo                             |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

创建user角色:

$ openstack role create user
 
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | 997ce8d05fc143ac97d83fdfb5998552 |
| name      | user                             |
+-----------+----------------------------------+

 

将user角色添加到demo项目和用户:

$ openstack role add --project demo --user demo user

注意:该命令不提供输出,

注意:您可以重复此过程来创建其他项目和用户。

注:当执行以上几条命令都出现Missing valueauth-url required for auth plugin password 错误时,应该重新设置一下admin用户的环境变量,重新激活一下  .admin-openrc

2.5  验证操作

在安装其他服务之前验证身份服务的操作;在控制节点上执行这些命令。

取消设置临时 变量OS_AUTH_URL和OS_PASSWORD环境变量:

$unset OS_AUTH_URL OS_PASSWORD

作为admin用户,请求身份验证令牌:

$ openstack --os-auth-url http://controller:35357/v3 \
  --os-project-domain-name Default --os-user-domain-name Default \
  --os-project-name admin --os-username admin token issue
 
Password:
+------------+-----------------------------------------------------------------+
| Field      | Value                                                           |
+------------+-----------------------------------------------------------------+
| expires    | 2016-02-12T20:14:07.056119Z                                     |
| id         | gAAAAABWvi7_B8kKQD9wdXac8MoZiQldmjEO643d-e_j-XXq9AmIegIbA7UHGPv |
|            | atnN21qtOMjCFWX7BReJEQnVOAj3nclRQgAYRsfSU_MrsuWb4EDtnjU7HEpoBb4 |
|            | o6ozsA_NmFWEpLeKy0uNn_WeKbAhYygrsmQGA49dclHVnz-OMVLiyM9ws       |
| project_id | 343d245e850143a096806dfaefa9afdc                                |
| user_id    | ac3377633149401296f6c0d92d79dc16                                |
+------------+-----------------------------------------------------------------+

注:该命令使用admin用户的密码。

作为demo用户,请求身份验证令牌:

$ openstack --os-auth-url http://controller:5000/v3 \
  --os-project-domain-name Default --os-user-domain-name Default \
  --os-project-name demo --os-username demo token issue
 
Password:
+------------+-----------------------------------------------------------------+
| Field      | Value                                                           |
+------------+-----------------------------------------------------------------+
| expires    | 2016-02-12T20:15:39.014479Z                                     |
| id         | gAAAAABWvi9bsh7vkiby5BpCCnc-JkbGhm9wH3fabS_cY7uabOubesi-Me6IGWW |
|            | yQqNegDDZ5jw7grI26vvgy1J5nCVwZ_zFRqPiz_qhbq29mgbQLglbkq6FQvzBRQ |
|            | JcOzq3uwhzNxszJWmzGC7rJE_H0A_a3UFhqv8M4zMRYSbS2YF0MyFmp_U       |
| project_id | ed0b60bf607743088218b0a533d5943f                                |
| user_id    | 58126687cbcc4888bfa9ab73a2256f27                                |
+------------+-----------------------------------------------------------------+

 

注意:此命令使用demo 用户和API端口5000 的密码,该端口只允许对Identity Service API进行常规(非管理员)访问。

 

2.8  创建OpenStack客户端环境脚本

创建客户端环境的脚本admin和demo 项目和用户。本指南的未来部分引用这些脚本来为客户端操作加载适当的凭据。注意客户端环境脚本的路径不受限制。为了方便起见,您可以将脚本放置在任何位置,但请确保它们可访问并位于适合您部署的安全位置,因为它们包含敏感凭据。

创建并编辑admin-openrc文件并添加以下内容:(此处为为openstack的admin用户设置环境变量)

exportOS_PROJECT_DOMAIN_NAME=Default
exportOS_USER_DOMAIN_NAME=Default
exportOS_PROJECT_NAME=admin
exportOS_USERNAME=admin
exportOS_PASSWORD=ADMIN_PASS
exportOS_AUTH_URL=http://controller:35357/v3
exportOS_IDENTITY_API_VERSION=3
exportOS_IMAGE_API_VERSION=2

替换ADMIN_PASS为您admin在身份识别服务中为用户选择的密码。

创建并编辑demo-openrc文件并添加以下内容:(此处为为openstack的demo用户设置环境变量)

exportOS_PROJECT_DOMAIN_NAME=Default
exportOS_USER_DOMAIN_NAME=Default
exportOS_PROJECT_NAME=demo
exportOS_USERNAME=demo
exportOS_PASSWORD=DEMO_PASS
exportOS_AUTH_URL=http://controller:5000/v3
exportOS_IDENTITY_API_VERSION=3
exportOS_IMAGE_API_VERSION=2

替换DEMO_PASS为您demo在身份识别服务中为用户选择的密码。

使用脚本要以特定项目和用户身份运行客户端,只需在运行客户端环境脚本之前加载相关的客户端环境脚本即可。

例如:加载admin-openrc文件以使用Identity服务的位置以及admin项目和用户凭据填充环境变量:

$ . admin-openrc

请求身份验证令牌:

$ openstack token issue
 
+------------+-----------------------------------------------------------------+
| Field      | Value                                                           |
+------------+-----------------------------------------------------------------+
| expires    | 2016-02-12T20:44:35.659723Z                                     |
| id         | gAAAAABWvjYj-Zjfg8WXFaQnUd1DMYTBVrKw4h3fIagi5NoEmh21U72SrRv2trl |
|            | JWFYhLi2_uPR31Igf6A8mH2Rw9kv_bxNo1jbLNPLGzW_u5FC7InFqx0yYtTwa1e |
|            | eq2b0f6-18KZyQhs7F3teAta143kJEWuNEYET-y7u29y0be1_64KYkM7E       |
| project_id | 343d245e850143a096806dfaefa9afdc                                |
| user_id    | ac3377633149401296f6c0d92d79dc16                                |
+------------+-----------------------------------------------------------------+

三、        图像服务(Image service – glanceinstallation for Pike)

本节介绍如何在控制器节点上安装和配置代码为glance的Image服务。为了简单起见,该配置将图像存储在本地文件系统上。

先决条件:

在安装和配置Image服务之前,您必须创建数据库,服务凭据和API端点。

3.1  创建glance数据库:

使用数据库访问客户端以root用户身份连接到数据库服务器:

$ mysql -u root -p

创建glance数据库:

MariaDB [(none)]> CREATE DATABASE glance;

授予对glance数据库的适当访问权限:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
  IDENTIFIED BY 'GLANCE_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
  IDENTIFIED BY 'GLANCE_DBPASS';

注:用GLANCE_DBPASS适当的密码替换,退出数据库访问客户端。

来源admin凭据来访问仅管理员CLI命令:

. admin-openrc

3.2  创建glance服务凭证:

创建glance用户:

注:创建glance用户时会提醒你输入密码在此刻输入法密码即为你为glance用户密码。

$ openstack user create --domain default --password-prompt glance
 
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 3f4e777c4062483ab8d9edd7dff829df |
| name                | glance                           |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

将admin角色添加到glance用户和 service项目中:

$ openstack role add --project service --user glance admin

创建glance服务实体:

openstack service create --name glance \
  --description "OpenStack Image" image
 
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Image                  |
| enabled     | True                             |
| id          | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
| name        | glance                           |
| type        | image                            |
+-------------+----------------------------------+

 

3.3  创建图像服务API端点:

$ openstack endpoint create --region RegionOne \
  image public http://controller:9292
 
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 340be3625e9b4239a6415d034e98aace |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+
 
$ openstack endpoint create --region RegionOne \
  image internal http://controller:9292
 
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | a6e4b153c2ae4c919eccfdbb7dceb5d2 |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+
 
$ openstack endpoint create --region RegionOne \
  image admin http://controller:9292
 
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 0c37ed58103f4300a84ff125a539032d |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 8c2c7f1b9b5049ea9e63757b5533e6d2 |
| service_name | glance                           |
| service_type | image                            |
| url          | http://controller:9292           |
+--------------+----------------------------------+

3.4  安装和配置openstack-glance

安装软件包:

# yum install openstack-glance

编辑/etc/glance/glance-api.conf文件并完成以下操作:

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

[database]
# ...
connection=mysql+pymysql://glance:[email protected]/glance

注:替换GLANCE_DBPASS为您为图像服务数据库选择的密码。

在[keystone_authtoken]和[paste_deploy]部分中,配置身份服务访问:

[keystone_authtoken]
# ...
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=glance
password=GLANCE_PASS
 
[paste_deploy]
# ...
flavor=keystone

 

注:替换GLANCE_PASS为您glance在身份识别服务中为用户选择的密码 。注释掉或删除该[keystone_authtoken]部分中的其他选项。

在该[glance_store]部分中,配置本地文件系统存储和映像文件的位置:

[glance_store]
# ...
stores=file,http
default_store=file
filesystem_store_datadir=/var/lib/glance/images/

编辑/etc/glance/glance-registry.conf文件并完成以下操作:

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

[database]
# ...
connection=mysql+pymysql://glance:[email protected]/glance

注:替换GLANCE_DBPASS为您为图像服务数据库选择的密码。

在[keystone_authtoken]和[paste_deploy]部分中,配置身份服务访问:

[keystone_authtoken]
# ...
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=glance
password=GLANCE_PASS
 
[paste_deploy]
# ...
flavor=keystone

注:替换GLANCE_PASS为您glance在身份识别服务中为用户选择的密码 。注释掉或删除该[keystone_authtoken]部分中的其他选项。

填充图像服务数据库:

# su -s /bin/sh -c "glance-manage db_sync" glance

注:忽略此输出中的任何弃用消息。

完成安装:

# systemctl enable openstack-glance-api.service \
  openstack-glance-registry.service
# systemctl start openstack-glance-api.service \
  openstack-glance-registry.service

3.5  验证操作

使用CirrOS验证Image服务的操作,这 是一个小型Linux映像,可帮助您测试OpenStack部署。在控制器节点上执行这些命令。

 

来源admin凭据来访问仅管理员CLI命令:

$ . admin-openrc

下载源图片:

$ wget http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img

注:wget如果您的发行版不包含它,请安装。

使用QCOW2磁盘格式,裸 容器格式和公开可见性将图像上传到Image服务 ,以便所有项目都可以访问它:

$ openstack image create "cirros"\
  --file cirros-0.3.5-x86_64-disk.img \
  --disk-format qcow2 --container-format bare \
  --public
 
+------------------+------------------------------------------------------+
| Field            | Value                                                |
+------------------+------------------------------------------------------+
| checksum         | 133eae9fb1c98f45894a4e60d8736619                     |
| container_format | bare                                                 |
| created_at       | 2015-03-26T16:52:10Z                                 |
| disk_format      | qcow2                                                |
| file             | /v2/images/cc5c6982-4910-471e-b864-1098015901b5/file |
| id               | cc5c6982-4910-471e-b864-1098015901b5                 |
| min_disk         | 0                                                    |
| min_ram          | 0                                                    |
| name             | cirros                                               |
| owner            | ae7a98326b9c455588edd2656d723b9d                     |
| protected        | False                                                |
| schema           | /v2/schemas/image                                    |
| size             | 13200896                                             |
| status           | active                                               |
| tags             |                                                      |
| updated_at       | 2015-03-26T16:52:10Z                                 |
| virtual_size     | None                                                 |
| visibility       | public                                               |
+------------------+------------------------------------------------------+

 

注:OpenStack动态生成ID,因此您将在示例命令输出中看到不同的值。

确认图像上传并验证属性:

$ openstack image list
 
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 38047887-61a7-41ea-9b49-27987d5e8bb9 | cirros | active |
+--------------------------------------+--------+--------+

注:当执行前几条命令报出Missing value auth-url required for auth plugin password 错误时应该重新设置一下环境变量(.admin-penrc)

四、        计算服务—控制节点配置(Compute service –nova installation for Pike)

本节介绍如何在控制器节点上安装和配置代码为nova的Compute服务。

4.1 安装和配置计算节点

在安装和配置Compute服务之前,您必须创建数据库,服务凭证和API端点。要创建数据库,请完成以下步骤:

使用数据库访问客户端以root用户身份连接到数据库服务器 :

mysql -u root –p

创建nova_api,nova和nova_cell0数据库:

MariaDB [(none)]> CREATE DATABASE nova_api;
MariaDB [(none)]> CREATE DATABASE nova;
MariaDB [(none)]> CREATE DATABASE nova_cell0;

授予对数据库的适当访问权限:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';
 
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' \
  IDENTIFIED BY 'NOVA_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' \
  IDENTIFIED BY 'NOVA_DBPASS';

注:用NOVA_DBPASS适当的密码替换。

来源admin凭据来访问仅管理员CLI命令:

. admin-openrc

4.2  创建计算服务凭据:

创建nova用户:(这里提示你输入的密码,就是你将要给nova用户输入的密码)

openstack user create --domain default --password-prompt nova
 
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 8a7dbf5279404537b1c7b86c033620fe |
| name                | nova                             |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

将admin角色添加到nova用户:

$ openstack role add --project service --user nova admin

创建nova服务实体:

$ openstack service create --name nova \
  --description "OpenStack Compute" compute
 
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Compute                |
| enabled     | True                             |
| id          | 060d59eac51b4594815603d75a00aba2 |
| name        | nova                             |
| type        | compute                          |
+-------------+----------------------------------+

创建Compute API服务端点:

$ openstack endpoint create --region RegionOne \
  compute public http://controller:8774/v2.1
 
+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | 3c1caa473bfe4390a11e7177894bcc7b          |
| interface    | public                                    |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 060d59eac51b4594815603d75a00aba2          |
| service_name | nova                                      |
| service_type | compute                                   |
| url          | http://controller:8774/v2.1               |
+--------------+-------------------------------------------+
 
$ openstack endpoint create --region RegionOne \
  compute internal http://controller:8774/v2.1
 
+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | e3c918de680746a586eac1f2d9bc10ab          |
| interface    | internal                                  |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 060d59eac51b4594815603d75a00aba2          |
| service_name | nova                                      |
| service_type | compute                                   |
| url          | http://controller:8774/v2.1               |
+--------------+-------------------------------------------+
 
$ openstack endpoint create --region RegionOne \
  compute admin http://controller:8774/v2.1
 
+--------------+-------------------------------------------+
| Field        | Value                                     |
+--------------+-------------------------------------------+
| enabled      | True                                      |
| id           | 38f7af91666a47cfb97b4dc790b94424          |
| interface    | admin                                     |
| region       | RegionOne                                 |
| region_id    | RegionOne                                 |
| service_id   | 060d59eac51b4594815603d75a00aba2          |
| service_name | nova                                      |
| service_type | compute                                   |
| url          | http://controller:8774/v2.1               |
+--------------+-------------------------------------------+

使用您选择的PLACEMENT_PASS以下内容创建展示位置服务用户

$ openstack user create --domain default --password-prompt placement
 
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | fa742015a6494a949f67629884fc7ec8 |
| name                | placement                        |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

将位置用户添加到具有管理员角色的服务项目中:

$ openstack role add --project service --user placement admin

在服务目录中创建Placement API条目:

$ openstack service create --name placement --description "Placement API" placement
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Placement API                    |
| enabled     | True                             |
| id          | 2d1a27022e6e4185b86adac4444c495f |
| name        | placement                        |
| type        | placement                        |
+-------------+----------------------------------+

创建Placement API服务端点:

$ openstack endpoint create --region RegionOne placement public http://controller:8778
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 2b1b2637908b4137a9c2e0470487cbc0 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 2d1a27022e6e4185b86adac4444c495f |
| service_name | placement                        |
| service_type | placement                        |
| url          | http://controller:8778           |
+--------------+----------------------------------+
 
$ openstack endpoint create --region RegionOne placement internal http://controller:8778
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 02bcda9a150a4bd7993ff4879df971ab |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 2d1a27022e6e4185b86adac4444c495f |
| service_name | placement                        |
| service_type | placement                        |
| url          | http://controller:8778           |
+--------------+----------------------------------+
 
$ openstack endpoint create --region RegionOne placement admin http://controller:8778
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 3d71177b9e0f406f98cbff198d74b182 |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | 2d1a27022e6e4185b86adac4444c495f |
| service_name | placement                        |
| service_type | placement                        |
| url          | http://controller:8778           |
+--------------+----------------------------------+

4.3  安装和配置组件

安装软件包:

# yum install openstack-nova-api openstack-nova-conductor \
  openstack-nova-console openstack-nova-novncproxy \
  openstack-nova-scheduler openstack-nova-placement-api

编辑/etc/nova/nova.conf文件并完成以下操作:

在该[DEFAULT]部分中,仅启用计算API和元数据API:

[DEFAULT]
# ...
enabled_apis=osapi_compute,metadata

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

[api_database]
# ...
connection=mysql+pymysql://nova:[email protected]/nova_api
 
[database]
# ...
connection=mysql+pymysql://nova:[email protected]/nova

用NOVA_DBPASS为Compute数据库选择的密码替换。

在该[DEFAULT]部分中,配置RabbitMQ消息队列访问:

[DEFAULT]
# ...
transport_url=rabbit://openstack:[email protected]

替换RABBIT_PASS为您为该openstack 帐户选择的密码RabbitMQ。

在[api]和[keystone_authtoken]部分中,配置身份服务访问:

[api]
# ...
auth_strategy=keystone
 
[keystone_authtoken]
# ...
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=nova
password=NOVA_PASS

替换NOVA_PASS为您nova在身份识别服务中为用户选择的密码。

在该[DEFAULT]部分中,将该my_ip选项配置为使用控制器节点的管理接口IP地址:

[DEFAULT]
# ...
my_ip=10.0.0.11

在本[DEFAULT]节中,启用对网络服务的支持:

[DEFAULT]
# ...
use_neutron=True
firewall_driver=nova.virt.firewall.NoopFirewallDriver
注:情况下,Compute使用内部防火墙驱动程序。由于网络服务包含防火墙驱动程序,因此您必须使用nova.virt.firewall.NoopFirewallDriver防火墙驱动程序禁用Compute防火墙驱动程序。

在本[vnc]节中,将VNC代理配置为使用控制器节点的管理接口IP地址:

[vnc]
enabled=true
# ...
vncserver_listen=$my_ip
vncserver_proxyclient_address=$my_ip

在该[glance]部分中,配置Image Service API的位置:

[glance]
# ...
api_servers=http://controller:9292

在该[oslo_concurrency]部分中,配置锁定路径:

[oslo_concurrency]
# ...
lock_path=/var/lib/nova/tmp

在该[placement]部分中,配置Placement API:

[placement]
# ...
os_region_name=RegionOne
project_domain_name=Default
project_name=service
auth_type=password
user_domain_name=Default
auth_url=http://controller:35357/v3
username=placement
password=PLACEMENT_PASS

替换PLACEMENT_PASS为您placement在身份识别服务中为用户选择的密码 。注释本[placement]节中的任何其他选项。

由于包装错误,您必须启用对Placement API的访问权限,方法是将以下配置添加到 /etc/httpd/conf.d/00-nova-placement-api.conf:

<Directory /usr/bin>
   <IfVersion >=2.4>
      Require all granted
   </IfVersion>
   <IfVersion < 2.4>
      Order allow,deny
      Allow from all
   </IfVersion>
</Directory>

重新启动httpd服务:

# systemctl restart httpd

填充nova-api数据库(忽略任何弃用消息)

# su -s /bin/sh -c "nova-manage api_db sync" nova

注册cell0数据库:

# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

创建cell1单元格:

# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
109e1d4b-536a-40d0-83c6-5f121b82b650

填充nova数据库:

# su -s /bin/sh -c "nova-manage db sync" nova

验证nova cell0和cell1是否正确注册:

# nova-manage cell_v2 list_cells
+-------+--------------------------------------+
| Name  | UUID                                 |
+-------+--------------------------------------+
| cell1 | 109e1d4b-536a-40d0-83c6-5f121b82b650 |
| cell0 | 00000000-0000-0000-0000-000000000000 |
+-------+--------------------------------------+

完成安装启动计算服务并将其配置为在系统引导时启动:

# systemctl enable openstack-nova-api.service \
  openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  openstack-nova-conductor.service openstack-nova-novncproxy.service
# systemctl start openstack-nova-api.service \
  openstack-nova-consoleauth.service openstack-nova-scheduler.service \
  openstack-nova-conductor.service openstack-nova-novncproxy.service

 

五、        计算服务—计算节点配置(Compute service – nova installation for Pike)

本节介绍如何在计算节点上安装和配置Compute服务。该服务支持多个虚拟机管理程序来部署实例或虚拟机(VM)。为简单起见,此配置在计算节点上使用Quick EMUlator(QEMU)管理程序和基于内核的VM(KVM)扩展,以支持虚拟机的硬件加速。在传统硬件上,此配置使用通用QEMU管理程序。您可以按照这些说明进行小的修改,以便使用其他计算节点水平扩展您的环境。

5.1 安装和配置部件

安装软件包:

# yum install openstack-nova-compute

编辑/etc/nova/nova.conf文件并完成以下操作在该[DEFAULT]部分中,仅启用计算API和元数据API:

[DEFAULT]
# ...
enabled_apis=osapi_compute,metadata

在该[DEFAULT]部分中,配置RabbitMQ消息队列访问:

[DEFAULT]
# ...
transport_url=rabbit://openstack:[email protected]

注:替换RABBIT_PASS为您为该openstack 帐户选择的密码RabbitMQ。

在[api]和[keystone_authtoken]部分中,配置身份服务访问:

[api]
# ...
auth_strategy=keystone
 
[keystone_authtoken]
# ...
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=nova
password=NOVA_PASS

注:替换NOVA_PASS为您nova在身份识别服务中为用户选择的密码。

在该[DEFAULT]部分中,配置my_ip选项:

[DEFAULT]
# ...
my_ip=MANAGEMENT_INTERFACE_IP_ADDRESS

注:替换MANAGEMENT_INTERFACE_IP_ADDRESS为计算节点上管理网络接口的IP地址,典型值为10.0.0.31,用于示例体系结构中的第一个节点。

在本[DEFAULT]节中,启用对网络服务的支持:

[DEFAULT]
# ...
use_neutron=True
firewall_driver=nova.virt.firewall.NoopFirewallDriver

在本[vnc]节中,启用并配置远程控制台访问:

[vnc]
# ...
enabled=True
vncserver_listen=0.0.0.0
vncserver_proxyclient_address=$my_ip
novncproxy_base_url=http://controller:6080/vnc_auto.html

注:服务器组件侦听所有IP地址,并且代理组件只侦听计算节点的管理接口IP地址。基本URL指示您可以使用Web浏览器访问此计算节点上实例的远程控制台的位置。

注:如果用于访问远程控制台的Web浏览器驻留在无法解析controller主机名的主机上,则必须controller使用控制器节点的管理接口IP地址进行替换。

 在该[glance]部分中,配置Image Service API的位置:

[glance]
# ...
api_servers=http://controller:9292

在该[oslo_concurrency]部分中,配置锁定路径:

[oslo_concurrency]
# ...
lock_path=/var/lib/nova/tmp

在该[placement]部分中,配置Placement API:

[placement]
# ...
os_region_name=RegionOne
project_domain_name=Default
project_name=service
auth_type=password
user_domain_name=Default
auth_url=http://controller:35357/v3
username=placement
password=PLACEMENT_PASS

注:替换PLACEMENT_PASS为您placement在身份识别服务中为用户选择的密码 。注释本[placement]节中的任何其他选项。

5.2 完成安装

确定您的计算节点是否支持虚拟机的硬件加速:

$ egrep -c '(vmx|svm)' /proc/cpuinfo

注:如果此命令返回值,则您的计算节点支持通常不需要额外配置的硬件加速。one or greater如果此命令返回值zero,则您的计算节点不支持硬件加速,您必须配置libvirt为使用QEMU而不是KVM。

按如下方式编辑文件中的[libvirt]部分/etc/nova/nova.conf:

[libvirt]
# ...
virt_type=qemu

启动Compute服务(包括其依赖项)并将其配置为在系统引导时自动启动:

# systemctl enable libvirtd.service openstack-nova-compute.service
# systemctl start libvirtd.service openstack-nova-compute.service

注:如果nova-compute服务无法启动,请检查 /var/log/nova/nova-compute.log。错误消息可能表示控制器节点上的防火墙阻止访问端口5672.配置防火墙以打开控制器节点上的端口5672,并 在计算节点上重新启动服务。AMQP server on controller:5672 is unreachablenova-compute。

5.3 将计算节点添加到单元数据库

在控制器节点上运行以下命令。

输入管理员凭据以启用仅限管理员的CLI命令,然后确认数据库中有计算主机:

$ . admin-openrc
 
$ openstack compute service list --service nova-compute
+----+-------+--------------+------+-------+---------+----------------------------+
| ID | Host  | Binary       | Zone | State | Status  | Updated At                 |
+----+-------+--------------+------+-------+---------+----------------------------+
| 1  | node1 | nova-compute | nova | up    | enabled | 2017-04-14T15:30:44.000000 |
+----+-------+--------------+------+-------+---------+----------------------------+

发现计算主机:

# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
 
Found 2 cell mappings.
Skipping cell0 since it does not contain hosts.
Getting compute nodes from cell 'cell1': ad5a5985-a719-4567-98d8-8d148aaae4bc
Found 1 computes in cell: ad5a5985-a719-4567-98d8-8d148aaae4bc
Checking host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3
Creating host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3

 

注:当您添加新的计算节点时,您必须在控制器节点上运行以注册这些新的计算节点。或者,您可以在以下位置设置适当的间隔:nova-manage cell_v2 discover_hosts/etc/nova/nova.conf

[scheduler]
discover_hosts_in_cells_interval=300

5.6 验证操作

验证Compute服务的操作。在控制器节点上执行这些命令。

来源admin凭据来访问仅管理员CLI命令:

. admin-openrc

列出服务组件以验证每个进程的成功启动和注册:

$ openstack compute service list
 
+----+--------------------+------------+----------+---------+-------+----------------------------+
| Id | Binary             | Host       | Zone     | Status  | State | Updated At                 |
+----+--------------------+------------+----------+---------+-------+----------------------------+
1 | nova-consoleauth   | controller | internal | enabled | up    | 2016-02-09T23:11:15.000000 |
2 | nova-scheduler     | controller | internal | enabled | up    | 2016-02-09T23:11:15.000000 |
3 | nova-conductor     | controller | internal | enabled | up    | 2016-02-09T23:11:16.000000 |
4 | nova-compute       | compute1   | nova     | enabled | up    | 2016-02-09T23:11:20.000000 |
+----+--------------------+------------+----------+---------+-------+----------------------------+

 

注:此输出应指示在控制器节点上启用三个服务组件,并在计算节点上启用一个服务组件。

列出身份服务中的API端点以验证与身份服务的连接:

$ openstack catalog list
 
+-----------+-----------+-----------------------------------------+
| Name      | Type      | Endpoints                               |
+-----------+-----------+-----------------------------------------+
| keystone  | identity  | RegionOne                               |
|           |           |   public: http://controller:5000/v3/    |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:5000/v3/  |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:35357/v3/    |
|           |           |                                         |
| glance    | image     | RegionOne                               |
|           |           |   admin: http://controller:9292         |
|           |           | RegionOne                               |
|           |           |   public: http://controller:9292        |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:9292      |
|           |           |                                         |
| nova      | compute   | RegionOne                               |
|           |           |   admin: http://controller:8774/v2.1    |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:8774/v2.1 |
|           |           | RegionOne                               |
|           |           |   public: http://controller:8774/v2.1   |
|           |           |                                         |
| placement | placement | RegionOne                               |
|           |           |   public: http://controller:8778        |
|           |           | RegionOne                               |
|           |           |   admin: http://controller:8778         |
|           |           | RegionOne                               |
|           |           |   internal: http://controller:8778      |
|           |           |                                         |
+-----------+-----------+-----------------------------------------+

 

注:根据OpenStack组件的安装情况,端点列表可能会有所不同。忽略此输出中的任何警告。

列出Image服务中的图像以验证与Image服务的连接性:

$ openstack image list
 
+--------------------------------------+-------------+-------------+
| ID                                   | Name        | Status      |
+--------------------------------------+-------------+-------------+
| 9a76d9f9-9620-4f2e-8c69-6c5691fae163 | cirros      | active      |
+--------------------------------------+-------------+-------------+

检查单元格和展示位置API是否成功运行:

# nova-status upgrade check
 
+---------------------------+
| Upgrade Check Results     |
+---------------------------+
| Check: Cells v2           |
| Result: Success           |
| Details: None             |
+---------------------------+
| Check: Placement API      |
| Result: Success           |
| Details: None             |
+---------------------------+
| Check: Resource Providers |
| Result: Success           |
| Details: None             |
+---------------------------+

 

 

 

六、网络服务(Networking service – neutron installation for Pike)

6.1  主机联网概述

在选择部署的体系结构的每个节点上安装操作系统后,必须配置网络接口。我们建议您禁用任何自动网络管理工具,并手动编辑适用于您的发行版的相应配置文件。有关如何在发行版上配置网络的更多信息,请参阅文档。

为了管理目的,所有节点都需要Internet访问,例如软件包安装,安全更新,域名系统(DNS)和网络时间协议(NTP)。在大多数情况下,节点应通过管理网络接口获得Internet访问权限。为了强调网络分离的重要性,示例体系结构使用管理网络的专用地址空间,并假设物理网络基础结构通过网络地址转换(NAT)或其他方法提供Internet访问。示例体系结构为提供商(外部)网络使用可路由的IP地址空间,并假定物理网络基础设施提供直接Internet访问。

在提供商网络体系结构中,所有实例都直接连接到提供商网络。在自助(私人)网络体系结构中,实例可以附加到自助服务或提供商网络。自助服务网络可以完全驻留在OpenStack内,或通过提供商网络使用网络地址转换(NAT)提供某种级别的外部网络访问。

示例体系结构假设使用以下网络:

使用网关10.0.0.1管理10.0.0.0/24

此网络需要网关为所有节点提供Internet访问权限,以便管理用途,如软件包安装,安全更新,域名系统(DNS)和网络时间协议(NTP)。

提供程序203.0.113.0/24,网关203.0.113.1

该网络需要一个网关来提供对OpenStack环境中的实例的Internet访问。

您可以修改这些范围和网关以与您的特定网络基础架构配合使用。

网络接口名称因分布而异。传统上,接口使用eth后跟一个序列号。为了涵盖所有变化,本指南将第一个接口称为具有最小号码的接口,将第二个接口称为具有最大号码的接口。

除非您打算使用此示例架构中提供的确切配置,否则您必须修改此过程中的网络以符合您的环境。除IP地址外,每个节点还必须按名称解析其他节点。例如,controller名称必须解析为10.0.0.11控制器节点上管理接口的IP地址。

控制节点:

6.2  配置网络接口

编辑/etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME文件以包含以下内容:(重新启动系统以激活更改。)

示例:

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

6.3  配置域名解析

将节点的主机名设置为controller。

编辑/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

警告:某些发行版在/etc/hosts 文件中添加了一个无用的条目,可将实际主机名解析为另一个环回IP地址,例如127.0.1.1。您必须注释掉或删除此条目以防止出现名称解析问题。不要删除127.0.0.1条目。

计算节点通控制节点配置相同,只是把域名解释里的controller修改成compute即可。

6.4  验证连接

在控制节点上或其他节点上执行一下命令来测试连通性:

ping  -c   4   域名 

七、网络服务先决条件

7.1  安装和配置控制器节点

在配置OpenStack Networking(neutron)服务之前,您必须创建数据库,服务凭据和API端点。

要创建数据库,请完成以下步骤:

使用数据库访问客户端以root用户身份连接到数据库服务器:

$ mysql -u root -p

创建neutron数据库:

MariaDB [(none)] CREATE DATABASE neutron;

授予对neutron数据库的正确访问权限,并替换 NEUTRON_DBPASS为合适的密码:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
  IDENTIFIED BY 'NEUTRON_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
  IDENTIFIED BY 'NEUTRON_DBPASS';

来源admin凭据来访问仅管理员CLI命令:

$ . admin-openrc

要创建服务凭据,请完成以下步骤:

创建neutron用户:

$ openstack user create --domain default --password-prompt neutron
 
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | fdb0f541e28141719b6a43c8944bf1fb |
| name                | neutron                          |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

将admin角色添加到neutron用户:

openstack role add --project service --user neutron admin

创建neutron服务实体:

$ openstack service create --name neutron \
  --description "OpenStack Networking" network
 
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | OpenStack Networking             |
| enabled     | True                             |
| id          | f71529314dab4a4d8eca427e701d209e |
| name        | neutron                          |
| type        | network                          |
+-------------+----------------------------------+

创建网络服务API端点:

$ openstack endpoint create --region RegionOne \
  network public http://controller:9696
 
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 85d80a6d02fc4b7683f611d7fc1493a3 |
| interface    | public                           |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | f71529314dab4a4d8eca427e701d209e |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+
 
$ openstack endpoint create --region RegionOne \
  network internal http://controller:9696
 
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 09753b537ac74422a68d2d791cf3714f |
| interface    | internal                         |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | f71529314dab4a4d8eca427e701d209e |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+
 
$ openstack endpoint create --region RegionOne \
  network admin http://controller:9696
 
+--------------+----------------------------------+
| Field        | Value                            |
+--------------+----------------------------------+
| enabled      | True                             |
| id           | 1ee14289c9374dffb5db92a5c112fc4e |
| interface    | admin                            |
| region       | RegionOne                        |
| region_id    | RegionOne                        |
| service_id   | f71529314dab4a4d8eca427e701d209e |
| service_name | neutron                          |
| service_type | network                          |
| url          | http://controller:9696           |
+--------------+----------------------------------+

 

7.2  配置网络选项

注:改配置有两个选项配置

您可以使用选项1和2所代表的两种体系结构之一来部署网络服务。

选项1部署了仅支持将实例附加到提供者(外部)网络的最简单的可能架构。没有自助服务(专用)网络,路由器或浮动IP地址。只有admin或其他特权用户才能管理提供商网络。

选项2增加了选项1,其中支持将实例附加到自助服务网络的第3层服务。该demo或其他非特权用户可以管理自助服务网络,包括提供自助服务和提供商网络之间连接的路由器。此外,浮动IP地址可提供与使用来自外部网络(如Internet)的自助服务网络的实例的连接。

自助服务网络通常使用覆盖网络。覆盖网络协议(如VXLAN)包含额外的标头,这些标头会增加开销并减少有效负载或用户数据的可用空间。在不了解虚拟网络基础架构的情况下,实例尝试使用1500字节的默认以太网最大传输单元(MTU)发送数据包。网络服务通过DHCP自动为实例提供正确的MTU值。但是,某些云图像不使用DHCP或忽略DHCP MTU选项并需要使用元数据或脚本进行配置。

选择以下网络选项之一来配置特定的服务。之后,返回此处并继续配置元数据代理。

一、      提供商网络

二、      自助服务网络

7.3  提供商网络配置:

在控制节点上安装并配置组件:

# yum install openstack-neutron openstack-neutron-ml2 \
  openstack-neutron-linuxbridge ebtables

编辑/etc/neutron/neutron.conf文件并完成以下操作在该[database]部分中,配置数据库访问:

[database]
# ...
connection=mysql+pymysql://neutron:[email protected]/neutron

注:替换NEUTRON_DBPASS为您为数据库选择的密码。

在本[DEFAULT]节中,启用Modular Layer 2(ML2)插件并禁用其他插件:

[DEFAULT]
# ...
core_plugin=ml2
service_plugins=

在该[DEFAULT]部分中,配置RabbitMQ 消息队列访问:

[DEFAULT]
# ...
transport_url=rabbit://openstack:[email protected]

注:替换RABBIT_PASS为您openstack在RabbitMQ中为帐户选择的密码 。

在[DEFAULT]和[keystone_authtoken]部分中,配置身份服务访问:

[DEFAULT]
# ...
auth_strategy=keystone
 
[keystone_authtoken]
# ...
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=neutron
password=NEUTRON_PASS

注:替换NEUTRON_PASS为您neutron 在身份识别服务中为用户选择的密码。

在[DEFAULT]和[nova]部分中,配置网络以通知计算网络拓扑更改:

[DEFAULT]
# ...
notify_nova_on_port_status_changes=true
notify_nova_on_port_data_changes=true
 
[nova]
# ...
auth_url=http://controller:35357
auth_type=password
project_domain_name=default
user_domain_name=default
region_name=RegionOne
project_name=service
username=nova
password=NOVA_PASS

注:替换NOVA_PASS为您nova 在身份识别服务中为用户选择的密码。

在该[oslo_concurrency]部分中,配置锁定路径:

[oslo_concurrency]
# ...
lock_path=/var/lib/neutron/tmp

 

配置Modular Layer 2(ML2)插件

ML2插件使用Linux桥接机制为实例构建第2层(桥接和交换)虚拟网络基础结构。

编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件并完成以下操作:

在本[ml2]节中,启用平面和VLAN网络

[ml2]
# ...
type_drivers=flat,vlan

在本[ml2]节中,禁用自助服务网络:

[ml2]
# ...
tenant_network_types=

在本[ml2]节中,启用Linux桥接机制:

[ml2]
# ...
mechanism_drivers=linuxbridge

警告:配置ML2插件后,删除type_drivers选项中的值 可能会导致数据库不一致。

在该[ml2]部分中,启用端口安全扩展驱动程序:

[ml2]
# ...
extension_drivers=port_security

在本[ml2_type_flat]节中,将提供者虚拟网络配置为扁平网络:

[ml2_type_flat]
# ...
flat_networks=provider

在本[securitygroup]节中,使用ipset来提高安全组规则的效率:

[securitygroup]
# ...
enable_ipset=true

配置linux网桥代理

Linux网桥代理为实例构建第2层(桥接和交换)虚拟网络基础架构并处理安全组。

编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:

在本[linux_bridge]节中,将提供者虚拟网络映射到提供者物理网络接口:

[linux_bridge]
physical_interface_mappings=provider:PROVIDER_INTERFACE_NAME

替换PROVIDER_INTERFACE_NAME为底层提供商物理网络接口的名称。

在该[vxlan]部分中,禁用VXLAN覆盖网络:

[vxlan]
enable_vxlan=false

在本[securitygroup]节中,启用安全组并配置Linux网桥iptables防火墙驱动程序:

[securitygroup]
# ...
enable_security_group=true
firewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

配置DHCP代理

DHCP代理为虚拟网络提供DHCP服务。

编辑/etc/neutron/dhcp_agent.ini文件并完成以下操作:

在本[DEFAULT]节中,配置Linux网桥接口驱动程序,Dnsmasq DHCP驱动程序,并启用隔离的元数据,以便提供商网络上的实例可以通过网络访问元数据:

[DEFAULT]
# ...
interface_driver=linuxbridge
dhcp_driver=neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata=true

返回到网络控制器节点配置。

7.4  自助服务网络

在控制器节点上安装并配置网络组件。

# yum install openstack-neutron openstack-neutron-ml2 \
  openstack-neutron-linuxbridge ebtables

编辑/etc/neutron/neutron.conf文件并完成以下操作在该[database]部分中,配置数据库访问:

[database]
# ...
connection=mysql+pymysql://neutron:[email protected]/neutron

注:替换NEUTRON_DBPASS为您为数据库选择的密码。

在本[DEFAULT]节中,启用Modular Layer 2(ML2)插件,路由器服务和重叠的IP地址:

[DEFAULT]
# ...
core_plugin=ml2
service_plugins=router
allow_overlapping_ips=true

在该[DEFAULT]部分中,配置RabbitMQ 消息队列访问:

[DEFAULT]
# ...
transport_url=rabbit://openstack:[email protected]

注:替换RABBIT_PASS为您openstack在RabbitMQ中为帐户选择的密码 。

在[DEFAULT]和[keystone_authtoken]部分中,配置身份服务访问:

[DEFAULT]
# ...
auth_strategy=keystone
 
[keystone_authtoken]
# ...
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=neutron
password=NEUTRON_PASS

注:替换NEUTRON_PASS为您neutron 在身份识别服务中为用户选择的密码。

在[DEFAULT]和[nova]部分中,配置网络以通知计算网络拓扑更改:

[DEFAULT]
# ...
notify_nova_on_port_status_changes=true
notify_nova_on_port_data_changes=true
 
[nova]
# ...
auth_url=http://controller:35357
auth_type=password
project_domain_name=default
user_domain_name=default
region_name=RegionOne
project_name=service
username=nova
password=NOVA_PASS

注:替换NOVA_PASS为您nova 在身份识别服务中为用户选择的密码。

在该[oslo_concurrency]部分中,配置锁定路径:

[oslo_concurrency]
# ...
lock_path=/var/lib/neutron/tmp

配置Modular Layer 2(ML2)插件

ML2插件使用Linux桥接机制为实例构建第2层(桥接和交换)虚拟网络基础结构。

编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件并完成以下操作在该[ml2]部分中,启用平面,VLAN和VXLAN网络:

[ml2]
# ...
type_drivers=flat,vlan,vxlan

在本[ml2]节中,启用VXLAN自助服务网络:

[ml2]
# ...
tenant_network_types=vxlan

在本[ml2]节中,启用Linux桥接和第2层人口机制:

[ml2]
# ...
mechanism_drivers=linuxbridge,l2populati

警告:配置ML2插件后,删除type_drivers选项中的值 可能会导致数据库不一致。

注:Linux网桥代理仅支持VXLAN覆盖网络。

在该[ml2]部分中,启用端口安全扩展驱动程序:

[ml2]
# ...
extension_drivers=port_security

在本[ml2_type_flat]节中,将提供者虚拟网络配置为扁平网络:

[ml2_type_flat]
# ...
flat_networks=provider

在本[ml2_type_vxlan]节中,为自助服务网络配置VXLAN网络标识符范围:

[ml2_type_vxlan]
# ...
vni_ranges=1:1000

在本[securitygroup]节中,使用ipset来提高安全组规则的效率:

[securitygroup]
# ...
enable_ipset=true

配置Linux网桥代理

Linux网桥代理为实例构建第2层(桥接和交换)虚拟网络基础架构并处理安全组。

编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作在本[linux_bridge]节中,将提供者虚拟网络映射到提供者物理网络接口:

[linux_bridge]
physical_interface_mappings=provider:PROVIDER_INTERFACE_NAME

 

注:替换PROVIDER_INTERFACE_NAME为底层提供商物理网络接口的名称。

在该[vxlan]部分中,启用VXLAN覆盖网络,配置处理覆盖网络的物理网络接口的IP地址,并启用第2层群体:

[vxlan]
enable_vxlan=true
local_ip=OVERLAY_INTERFACE_IP_ADDRESS
l2_population=true

注:替换OVERLAY_INTERFACE_IP_ADDRESS为处理覆盖网络的底层物理网络接口的IP地址。示例体系结构使用管理接口将流量发送到其他节点。

在本[securitygroup]节中,启用安全组并配置Linux网桥iptables防火墙驱动程序:

[securitygroup]
# ...
enable_security_group=true
firewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

配置第3层代理

第三层(L3)代理为自助服务虚拟网络提供路由和NAT服务。

编辑/etc/neutron/l3_agent.ini文件并完成以下操作在该[DEFAULT]部分中,配置Linux网桥接口驱动程序和外部网络桥接器:

[DEFAULT]
# ...
interface_driver=linuxbridge

配置DHCP代理

DHCP代理为虚拟网络提供DHCP服务。

编辑/etc/neutron/dhcp_agent.ini文件并完成以下操作:

在本[DEFAULT]节中,配置Linux网桥接口驱动程序,Dnsmasq DHCP驱动程并启用隔离的元数据,以便提供商网络上的实例可以通过网络访问元数据:

[DEFAULT]
# ...
interface_driver=linuxbridge
dhcp_driver=neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata=true

返回到网络控制器节点配置。

7.5  配置元数据代理

元数据代理为实例提供配置信息,例如凭据。

编辑/etc/neutron/metadata_agent.ini文件并完成以下操作在该[DEFAULT]部分中,配置元数据主机和共享密钥:

[DEFAULT]
# ...
nova_metadata_host=controller
metadata_proxy_shared_secret=METADATA_SECRET

注:用METADATA_SECRET元数据代理的适当密码替换。

配置Compute服务以使用网络服务

编辑/etc/nova/nova.conf文件并执行以下操作在该[neutron]部分中,配置访问参数,启用元数据代理并配置秘密:

[neutron]
# ...
url=http://controller:9696
auth_url=http://controller:35357
auth_type=password
project_domain_name=default
user_domain_name=default
region_name=RegionOne
project_name=service
username=neutron
password=NEUTRON_PASS
service_metadata_proxy=true
metadata_proxy_shared_secret=METADATA_SECRET

注:替换NEUTRON_PASS为您neutron 在身份识别服务中为用户选择的密码。

替换METADATA_SECRET为您为元数据代理选择的秘密。

完成安装

网络服务初始化脚本需要/etc/neutron/plugin.ini指向ML2插件配置文件的符号链接/etc/neutron/plugins/ml2/ml2_conf.ini。如果此符号链接不存在,请使用以下命令创建它:

# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

填充数据库:

# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
  --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron

注:因为脚本需要完整的服务器和插件配置文件,所以稍后会出现数据库填充。

重新启动Compute API服务:

# systemctl restart openstack-nova-api.service

启动网络服务并将其配置为在系统引导时启动。对于这两种网络选项:

# systemctl enable neutron-server.service \
  neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
  neutron-metadata-agent.service
# systemctl start neutron-server.service \
  neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
  neutron-metadata-agent.service

注:如果在此处启动neutron.service出现错误,查看日志出现以下错误,解决办法:

通过查看日志文件报出此错误可能是以下两种错误/etc/neutron/neutron.conf配置文件中core_plugin =xxx名字写错或者没写。

1、

2

还有可能是没有l2populati配置文件,这里咱们去/etc/neutron/plugins/ml2/ml2_conf.ini文件里把他删除就可以成功启动了。

对于网络选项2,还启用并启动第3层服务:

# systemctl enable neutron-l3-agent.service
# systemctl start neutron-l3-agent.service

7.6  安装和配置计算节点

安装组件:

网络通用组件配置包括认证机制,消息队列和插件。

# yum install openstack-neutron-linuxbridge ebtables ipset

编辑/etc/neutron/neutron.conf文件并完成以下操作在该[database]部分中,注释掉任何connection选项,因为计算节点不直接访问数据库,在该[DEFAULT]部分中,配置RabbitMQ 消息队列访问:

[DEFAULT]
# ...
transport_url=rabbit://openstack:[email protected]

注:替换RABBIT_PASS为您openstack 在RabbitMQ中为帐户选择的密码。

在[DEFAULT]和[keystone_authtoken]部分中,配置身份服务访问:

[DEFAULT]
# ...
auth_strategy=keystone
 
[keystone_authtoken]
# ...
auth_uri=http://controller:5000
auth_url=http://controller:35357
memcached_servers=controller:11211
auth_type=password
project_domain_name=default
user_domain_name=default
project_name=service
username=neutron
password=NEUTRON_PASS

注:替换NEUTRON_PASS为您neutron 在身份识别服务中为用户选择的密码

在该[oslo_concurrency]部分中,配置锁定路径:

[oslo_concurrency]
# ...
lock_path=/var/lib/neutron/tmp

7.7  计算节点——提供商网络

在计算节点上网络配置选项也分两种:

一、      提供商网络

二、      自助服务网络

下面先做提供商网络:

在计算节点上配置网络组件。

配置Linux网桥代理Linux网桥代理为实例构建第2层(桥接和交换)虚拟网络基础架构并处理安全组。编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作:在本[linux_bridge]节中,将提供者虚拟网络映射到提供者物理网络接口:

[linux_bridge]
physical_interface_mappings=provider:PROVIDER_INTERFACE_NAME

注:替换PROVIDER_INTERFACE_NAME为底层提供商物理网络接口的名称。

在该[vxlan]部分中,禁用VXLAN覆盖网络:

[vxlan]
enable_vxlan=false

在本[securitygroup]节中,启用安全组并配置Linux网桥iptables防火墙驱动程序:

[securitygroup]
# ...
enable_security_group=true
firewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

返回到网络计算节点配置。

7.8  计算节点——自助网络服务

在计算节点上配置网络组件。

配置Linux网桥代理

Linux网桥代理为实例构建第2层(桥接和交换)虚拟网络基础架构并处理安全组。编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini文件并完成以下操作在本[linux_bridge]节中,将提供者虚拟网络映射到提供者物理网络接口:

[linux_bridge]
physical_interface_mappings=provider:PROVIDER_INTERFACE_NAME

注:替换PROVIDER_INTERFACE_NAME为底层提供商物理网络接口的名称。

在该[vxlan]部分中,启用VXLAN覆盖网络,配置处理覆盖网络的物理网络接口的IP地址,并启用第2层群体:

[vxlan] 
enable_vxlan  =  true 
local_ip  =  OVERLAY_INTERFACE_IP_ADDRESS 
l2_population  =  true

注:替换OVERLAY_INTERFACE_IP_ADDRESS为处理覆盖网络的底层物理网络接口的IP地址。示例体系结构使用管理接口将流量发送到其他节点。因此,请替换OVERLAY_INTERFACE_IP_ADDRESS计算节点的管理IP地址。

在本[securitygroup]节中,启用安全组并配置Linux网桥iptables防火墙驱动程序:

[securitygroup] 
... 
enable_security_group  =  true 
firewall_driver  =  neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

返回到网络计算节点配置。

7.9  配置Compute网络服务

编辑/etc/nova/nova.conf文件并完成以下操作在该[neutron]部分中,配置访问参数:

[neutron]
# ...
url=http://controller:9696
auth_url=http://controller:35357
auth_type=password
project_domain_name=default
user_domain_name=default
region_name=RegionOne
project_name=service
username=neutron
password=NEUTRON_PASS

注:替换NEUTRON_PASS为您neutron 在身份识别服务中为用户选择的密码。

重新启动计算服务:

# systemctl restart openstack-nova-compute.service

启动Linux桥代理并将其配置为在系统引导时启动:

# systemctl enable neutron-linuxbridge-agent.service
# systemctl start neutron-linuxbridge-agent.service

7.10 验证操作

在控制节点上做一下操作。。。

提供商网络的验证操作:

列出代理以验证中子代理的成功发射:

$ openstack network agent list
 
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host       | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| 0400c2f6-4d3b-44bc-89fa-99093432f3bf | Metadata agent     | controller | None              | True  | UP    | neutron-metadata-agent    |
| 83cf853d-a2f2-450a-99d7-e9c6fc08f4c3 | DHCP agent         | controller | nova              | True  | UP    | neutron-dhcp-agent        |
| ec302e51-6101-43cf-9f19-88a78613cbee | Linux bridge agent | compute    | None              | True  | UP    | neutron-linuxbridge-agent |
| fcb9bc6e-22b1-43bc-9054-272dd517d025 | Linux bridge agent | controller | None              | True  | UP    | neutron-linuxbridge-agent |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+

输出应该指示控制器节点上的三个代理和每个计算节点上的一个代理。

自助网络服务的验证操作:

列出代理以验证中子代理的成功发射:

openstack network agent list
 
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| ID                                   | Agent Type         | Host       | Availability Zone | Alive | State | Binary                    |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+
| 0400c2f6-4d3b-44bc-89fa-99093432f3bf | Metadata agent     | controller | None              | True  | UP    | neutron-metadata-agent    |
| 83cf853d-a2f2-450a-99d7-e9c6fc08f4c3 | DHCP agent         | controller | nova              | True  | UP    | neutron-dhcp-agent        |
| ec302e51-6101-43cf-9f19-88a78613cbee | Linux bridge agent | compute    | None              | True  | UP    | neutron-linuxbridge-agent |
| fcb9bc6e-22b1-43bc-9054-272dd517d025 | Linux bridge agent | controller | None              | True  | UP    | neutron-linuxbridge-agent |
+--------------------------------------+--------------------+------------+-------------------+-------+-------+---------------------------+

输出应该指示控制器节点上的三个代理和每个计算节点上的一个代理。

八、创建实例

注:本节服务可以不用先做,可以等做完openstack  dashboard 服务以后使用B/S架构的web界面去创建实例,web界面更直观方便。

本节创建必要的虚拟网络以支持启动实例。网络选项1包括一个提供商(外部)网络,其中一个实例使用它。网络选项2包括一个提供商网络,其中一个使用它的实例和一个自助服务(专用)网络以及一个使用它的实例。本节中的说明使用控制器节点上的命令行界面(CLI)工具。但是,您可以按照安装工具的任何主机上的说明进行操作。有关CLI工具的更多信息,请参阅 Pike 的OpenStackClient文档或Queens的 OpenStackClient文档。要使用仪表板,请参阅 Pike 或 Dashboard的仪表板用户文档Queens的仪表板用户文档。

注:本节选用提供商网络。如需配置其他网络请参考:https://docs.openstack.org/install-guide/launch-instance.html#launch-instance-networks来做详细配置。

8.1创建提供者网络

在控制器节点上,输入admin凭据以访问仅限管理员的CLI命令:

$ . admin-openrc

创建网络:

$ openstack network create  --share --external \
  --provider-physical-network provider \
  --provider-network-type flat provider
 
Created a new network:
 
+---------------------------+--------------------------------------+
| Field                     | Value                                |
+---------------------------+--------------------------------------+
| admin_state_up            | UP                                   |
| availability_zone_hints   |                                      |
| availability_zones        |                                      |
| created_at                | 2017-03-14T14:37:39Z                 |
| description               |                                      |
| dns_domain                | None                                 |
| id                        | 54adb94a-4dce-437f-a33b-e7e2e7648173 |
| ipv4_address_scope        | None                                 |
| ipv6_address_scope        | None                                 |
| is_default                | None                                 |
| mtu                       | 1500                                 |
| name                      | provider                             |
| port_security_enabled     | True                                 |
| project_id                | 4c7f48f1da5b494faaa66713686a7707     |
| provider:network_type     | flat                                 |
| provider:physical_network | provider                             |
| provider:segmentation_id  | None                                 |
| qos_policy_id             | None                                 |
| revision_number           | 3                                    |
| router:external           | External                             |
| segments                  | None                                 |
| shared                    | True                                 |
| status                    | ACTIVE                               |
| subnets                   |                                      |
| updated_at                | 2017-03-14T14:37:39Z                 |
+---------------------------+--------------------------------------+

该--share选项允许所有项目使用虚拟网络。

该--external选项将虚拟网络定义为外部。如果你想创建一个内部网络,你可以使用--internal。默认值是internal。

在和 选项平坦虚拟网络连接到平的(天然的/未标记的)的物理上的网络使用从以下文件的信息在主机上的接口:--provider-physical-network provider--provider-network-type flateth1

ml2_conf.ini:

[ml2_type_flat]
flat_networks=provider

linuxbridge_agent.ini:

[linux_bridge]
physical_interface_mappings=provider:eth1

在网络上创建一个子网:

 注意:这里的命令一定要注意缩进,缩进打不准命令会报错。

$ openstack subnet create --network provider \
  --allocation-pool start=173.168.6.20,end=173.168.6.250 \
  --dns-nameserver 114.114.114.114 --gateway 173.168.6.254 \
  --subnet-range 173.168.6.0/24 provider

PROVIDER_NETWORK_CIDR以CIDR表示法替换为提供商物理网络上的子网。更换START_IP_ADDRESS和END_IP_ADDRESS与要分配的情况下,子网内的范围内的第一个和最后一个IP地址。该范围不得包含任何现有的活动IP地址。

替换DNS_RESOLVER为DNS解析器的IP地址。在大多数情况下,您可以使用/etc/resolv.conf主机上文件中的一个。

替换PROVIDER_NETWORK_GATEWAY为提供商网络上的网关IP地址,通常为“.1”IP地址。

例:提供商网络在173.168.6.0/24上使用173.168.6.254/24和网关。DHCP服务器为每个实例分配一个从173.168.6.15到173.168.6.250的IP地址。所有实例都使用114.114.114.114作为DNS解析器。

创建子网:

openstack subnet create --network provider \
  --allocation-pool start=173.168.6.20,end=173.168.6.250\
  --dns-nameserver 114.114.114.114 --gateway 173.168.6.254\
  --subnet-range 173.168.6.0/24 provider
 
Created a new subnet:
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| allocation_pools  | 173.168.6.15-173.168.6.250        |
| cidr              | 173.168.6.0/24                       |
| created_at        | 2017-03-29T05:48:29Z                 |
| description       |                                      |
| dns_nameservers   | 114.114.114.114                    |
| enable_dhcp       | True                                 |
| gateway_ip        | 173.168.6.254                          |
| host_routes       |                                      |
| id                | e84b4972-c7fc-4ce9-9742-fdc845196ac5 |
| ip_version        | 4                                    |
| ipv6_address_mode | None                                 |
| ipv6_ra_mode      | None                                 |
| name              | provider                             |
| network_id        | 1f816a46-7c3f-4ccf-8bf3-fe0807ddff8d |
| project_id        | 496efd248b0c46d3b80de60a309177b5     |
| revision_number   | 2                                    |
| segment_id        | None                                 |
| service_types     |                                      |
| subnetpool_id     | None                                 |
| updated_at        | 2017-03-29T05:48:29Z                 |
+-------------------+--------------------------------------+

 

8.2创建m1.nano虚拟网络

最小的默认风格消耗每个实例512 MB的内存。对于计算节点内存小于4 GB的环境,我们建议创建m1.nano每个实例仅需要64 MB 的风格。为了测试目的,请仅将CirrOS图像的这种味道使用。

来源demo项目凭证:

$ openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
 
+----------------------------+---------+
| Field                      | Value   |
+----------------------------+---------+
| OS-FLV-DISABLED:disabled   | False   |
| OS-FLV-EXT-DATA:ephemeral  | 0       |
| disk                       | 1       |
| id                         | 0       |
| name                       | m1.nano |
| os-flavor-access:is_public | True    |
| properties                 |         |
| ram                        | 64      |
| rxtx_factor                | 1.0     |
| swap                       |         |
| vcpus                      | 1       |
+----------------------------+---------+

生成密钥对并添加公钥:

$ . demo-openrc

 

$ ssh-keygen -q -N ""
$ openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
 
+-------------+-------------------------------------------------+
| Field       | Value                                           |
+-------------+-------------------------------------------------+
| fingerprint | ee:3d:2e:97:d4:e2:6a:54:6d:0d:ce:43:39:2c:ba:4d |
| name        | mykey                                           |
| user_id     | 58126687cbcc4888bfa9ab73a2256f27                |
+-------------+-------------------------------------------------+

注意:或者,您可以跳过该ssh-keygen命令并使用现有的公钥,使用现有的公钥默认回车。

验证密钥对的添加:

$ openstack keypair list
 
+-------+-------------------------------------------------+
| Name  | Fingerprint                                     |
+-------+-------------------------------------------------+
| mykey | ee:3d:2e:97:d4:e2:6a:54:6d:0d:ce:43:39:2c:ba:4d |
+-------+-------------------------------------------------+

8.2 添加安全组规则

默认情况下,default安全组适用于所有实例,并包含拒绝远程访问实例的防火墙规则。对于像CirrOS这样的Linux映像,我们建议至少允许ICMP(ping)和安全shell(SSH)。

向default安全组添加规则:

允许ICMP(ping):

$ openstack security group rule create --proto icmp default
 
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| created_at        | 2017-03-30T00:46:43Z                 |
| description       |                                      |
| direction         | ingress                              |
| ether_type        | IPv4                                 |
| id                | 1946be19-54ab-4056-90fb-4ba606f19e66 |
| name              | None                                 |
| port_range_max    | None                                 |
| port_range_min    | None                                 |
| project_id        | 3f714c72aed7442681cbfa895f4a68d3     |
| protocol          | icmp                                 |
| remote_group_id   | None                                 |
| remote_ip_prefix  | 0.0.0.0/0                            |
| revision_number   | 1                                    |
| security_group_id | 89ff5c84-e3d1-46bb-b149-e621689f0696 |
| updated_at        | 2017-03-30T00:46:43Z                 |
+-------------------+--------------------------------------+

允许安全shell(SSH)访问:

$ openstack security group rule create --proto tcp --dst-port 22 default
 
+-------------------+--------------------------------------+
| Field             | Value                                |
+-------------------+--------------------------------------+
| created_at        | 2017-03-30T00:43:35Z                 |
| description       |                                      |
| direction         | ingress                              |
| ether_type        | IPv4                                 |
| id                | 42bc2388-ae1a-4208-919b-10cf0f92bc1c |
| name              | None                                 |
| port_range_max    | 22                                   |
| port_range_min    | 22                                   |
| project_id        | 3f714c72aed7442681cbfa895f4a68d3     |
| protocol          | tcp                                  |
| remote_group_id   | None                                 |
| remote_ip_prefix  | 0.0.0.0/0                            |
| revision_number   | 1                                    |
| security_group_id | 89ff5c84-e3d1-46bb-b149-e621689f0696 |
| updated_at        | 2017-03-30T00:43:35Z                 |
+-------------------+--------------------------------------+

8.3 启动一个实例前的检查

在提供商网络上。

在控制器节点上,demo获取凭据以访问仅限用户的CLI命令:

. demo-openrc

风味指定包括处理器,存储器和存储的虚拟资源分配概况。列出可用的风味:

$ openstack flavor list
 
+----+---------+-----+------+-----------+-------+-----------+
| ID | Name    | RAM | Disk | Ephemeral | VCPUs | Is Public |
+----+---------+-----+------+-----------+-------+-----------+
| 0  | m1.nano |  64 |    1 |         0 |     1 | True      |
+----+---------+-----+------+-----------+-------+-----------+

注:您也可以通过ID引用风味

列出可用图像:

$ openstack image list
 
+--------------------------------------+--------+--------+
| ID                                   | Name   | Status |
+--------------------------------------+--------+--------+
| 390eb5f7-8d49-41ec-95b7-68c0d5d54b34 | cirros | active |
+--------------------------------------+--------+--------+

 

这个实例使用cirros图像。

列出可用网络:

$ openstack network list
 
+--------------------------------------+--------------+--------------------------------------+
| ID                                   | Name         | Subnets                              |
+--------------------------------------+--------------+--------------------------------------+
| 4716ddfe-6e60-40e7-b2a8-42e57bf3c31c | selfservice  | 2112d5eb-f9d6-45fd-906e-7cabd38b7c7c |
| b5b6993c-ddf9-40e7-91d0-86806a42edb8 | provider     | 310911f6-acf0-4a47-824e-3032916582ff |
+--------------------------------------+--------------+--------------------------------------+

这个实例使用provider提供者网络。但是,您必须使用ID而不是名称来引用此网络。

注:如果您选择了选项2,则输出还应包含 selfservice自助服务网络。

列出可用的安全组:

$ openstack security group list
 
+--------------------------------------+---------+------------------------+----------------------------------+
| ID                                   | Name    | Description            | Project                          |
+--------------------------------------+---------+------------------------+----------------------------------+
| dd2b614c-3dad-48ed-958b-b155a3b38515 | default | Default security group | a516b957032844328896baa01e0f906c |
+--------------------------------------+---------+------------------------+----------------------------------+

此实例使用default安全组。

8.4 启动一个实例

启动实例:替换PROVIDER_NET_ID为provider提供商网络的ID 。

 注意:如果您选择了选项1,并且您的环境仅包含一个网络,则可以省略该--nic选项,因为OpenStack会自动选择唯一可用的网络。

检查您的实例的状态:

$ openstack server create --flavor m1.nano --image cirros \
  --nic net-id=PROVIDER_NET_ID --security-group default \
  --key-name mykey provider-instance
 
+-----------------------------+-----------------------------------------------+
| Field                       | Value                                         |
+-----------------------------+-----------------------------------------------+
| OS-DCF:diskConfig           | MANUAL                                        |
| OS-EXT-AZ:availability_zone |                                               |
| OS-EXT-STS:power_state      | NOSTATE                                       |
| OS-EXT-STS:task_state       | scheduling                                    |
| OS-EXT-STS:vm_state         | building                                      |
| OS-SRV-USG:launched_at      | None                                          |
| OS-SRV-USG:terminated_at    | None                                          |
| accessIPv4                  |                                               |
| accessIPv6                  |                                               |
| addresses                   |                                               |
| adminPass                   | PwkfyQ42K72h                                  |
| config_drive                |                                               |
| created                     | 2017-03-30T00:59:44Z                          |
| flavor                      | m1.nano (0)                                   |
| hostId                      |                                               |
| id                          | 36f3130e-cf1b-42f8-a80b-ebd63968940e          |
| image                       | cirros (97e06b44-e9ed-4db4-ba67-6e9fc5d0a203) |
| key_name                    | mykey                                         |
| name                        | provider-instance                             |
| progress                    | 0                                             |
| project_id                  | 3f714c72aed7442681cbfa895f4a68d3              |
| properties                  |                                               |
| security_groups             | name='default'                                |
| status                      | BUILD                                         |
| updated                     | 2017-03-30T00:59:44Z                          |
| user_id                     | 1a421c69342348248c7696e3fd6d4366              |
| volumes_attached            |                                               |
+-----------------------------+-----------------------------------------------+

检查您的实例状态:

$ openstack server list
 
+--------------------------------------+-------------------+--------+------------------------+------------+
| ID                                   | Name              | Status | Networks               | Image Name |
+--------------------------------------+-------------------+--------+------------------------+------------+
| 181c52ba-aebc-4c32-a97d-2e8e82e4eaaf | provider-instance | ACTIVE | provider=203.0.113.103 | cirros     |
+--------------------------------------+-------------------+--------+------------------------+------------+

状态从改变BUILD到ACTIVE时构建过程成功完成。

九、用户界面(Dashboard – horizon installation for Pike)

本节介绍如何在控制器节点上安装和配置仪表板。仪表板所需的唯一核心服务是身份服务。您可以将仪表板与其他服务结合使用,例如图像服务,计算和网络。您还可以在具有独立服务(如对象存储)的环境中使用仪表板。

必须正确安装Apache HTTP服务器和Memcached服务后,才能配置和操作Identity Service。

这里咱们从软件包安装仪表盘。

9.1 安装和配置部件

安装软件包:

# yum install openstack-dashboard

编辑/etc/openstack-dashboard/local_settings 文件并完成以下操作:配置仪表板以在controller节点上使用OpenStack服务 :

注意:在配置文件中配置以下参数时要注意注释掉文件中以前的参数,如果不注释将会产生冲突,使httpd服务启动失败。在做这一步的时候本人比较小心翼翼打一条命令重启一下报不报错,这是一个很好的办法,能有效的检测出是哪里出的错误。

OPENSTACK_HOST="controller"

允许您的主机访问仪表板:

ALLOWED_HOSTS=['one.example.com','two.example.com']

注意:ALLOWED_HOSTS也可以['*']接受所有主机。这对开发工作可能有用,但可能不安全,不应用于生产。有关 更多信息,请参见:https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts。

配置memcached会话存储服务:

SESSION_ENGINE='django.contrib.sessions.backends.cache'
 
CACHES={
    'default':{
         'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION':'controller:11211',
    }
}

注意:注释掉任何其他会话存储配置。

启用Identity API版本3:

OPENSTACK_KEYSTONE_URL="http://%s:5000/v3"%OPENSTACK_HOST

启用对域的支持:

OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT=True

配置API版本:

OPENSTACK_API_VERSIONS={
    "identity":3,
    "image":2,
    "volume":2,
}

配置Default为您通过仪表板创建的用户的默认域:

OPENSTACK_KEYSTONE_DEFAULT_DOMAIN="Default"

配置user为您通过仪表板创建的用户的默认角色:

OPENSTACK_KEYSTONE_DEFAULT_ROLE="user"

如果您选择了网络选项1,请禁用对三层网络服务的支持:

OPENSTACK_NEUTRON_NETWORK={
    ...
    'enable_router':False,
    'enable_quotas':False,
    'enable_distributed_router':False,
    'enable_ha_router':False,
    'enable_lb':False,
    'enable_firewall':False,
    'enable_v*n':False,
    'enable_fip_topology_check':False,
}

(可选)配置时区:

TIME_ZONE="TIME_ZONE"

注:替换TIME_ZONE为适当的时区标识符。有关更多信息,请参阅时区列表。

9.2 完成安装

重新启动Web服务器和会话存储服务:

# systemctl restart httpd.service memcached.service

注:如果当前没有运行,该命令会启动每个服务。systemctlrestart

9.3 验证连接

验证仪表板的操作。使用浏览器访问仪表板 http://本机地址/dashboard。

使用admin或demo用户和default域凭据进行身份验证。

在验证的时候报错无法访问有点gg,经过小编的不断努力通过查看日志发现一条报错的有用信息:“Scirpt  timed  out before  returning  headers:django.wsgi” 百度这条关键信息终于找到问题的所在;原因是配置文件出了点问题。需要修改一下 /etc/openstack-dashboard/local_settings

在WSGISocketPrefixrun/wsgi下面加一行代码:

WSGIApplicationGroup  %{GLOBAL} 保存退出,重启httpd服务。

听我朋友说他搭建的时候可以访问了但是老是登录失败,这里我没遇到这种情况,在这里我就参考他写作给大家分享一下,老是登录失败呢,查看日志,发现如下报错信息,“Unable  to  create a  new  session key.” “Unable to create   a  new session  key.  It is  likely  that the  cache  is unavailable”我朋友通过百度找到解决问题的所在,需要修改一下 /etc/openstack-dashboard/local_settings 文件中的SESSION_ENGINE=’django.contrib.sessions.backends.cache’将cache修改为file,重启httpd服务即可成功访问。

 

这里访问的默认域为“Default”,用户名admin,密码为1,也可以使用demo用户登录,demo用户密码也为“1”。

 

 

至此 openstack  dashboard 服务搭建完成,也就意味着openstack-pike 服务完整搭建成功。

 

总结:

   通过本次的OpenStack搭建使我收获了很多的知识,同时让我弄懂了OpenStack的架构原理,本次的搭建是一个不断学习党的过程,让我学会了搭建服务遇到问题要耐心,要学会通过查看日志排查错误。

特别注意:在执行与数据库相关联的服务时,如果报错就先同步一下数据在做操作,同步完数据库如果报错提示password失踪(Missing value auth-url requiredfor auth plugin password)就重新设置一下路径,这里用 .  admin-openrc。做完以上操作基本上就会没有多少问题。