文章目录
- 1、openstack介绍
- 2、部署环境
- 2.1 配置时间同步(ntp)
- 2.1.1 控制节点服务器
- 2.1.2 其它节点服务器
- 2.1.3 验证操作
- 2.2 安装客户端(OpenStack包)
- 2.3 消息队列
- 2.3.1 安全并配置组件
- 2.4 Memcached
- 3、 认证服务
- 3.1 先决条件
- 3.2 安全并配置组件
- 3.3 配置 Apache HTTP 服务器
- 3.4 创建服务实体和API端点
- 3.4.1 先决条件
- 3.4.2 创建服务实体和API端点
- 3.4.3 创建域、项目、用户和角色
- 3.5 验证操作
- 3.6 创建 OpenStack 客户端环境脚本
- 3.7 使用脚本
- 4、镜像服务
- 4.1 先决条件
- 4.2 安全并配置组件
- 4.3 验证操作
- 5、计算服务
- 5.1 控制节点配置
- 5.2 计算节点配置
- 5.3 测试
- 6、网络服务
- 6.1 控制节点配置
- 6.1.1 先决条件
- 6.1.2 配置网络选项(选择公共网络)
- 6.3.3 配置元数据代理
- 6.3.4 为计算节点配置网络服务
- 6.3.5 完成安装
- 6.3.6 验证操作
- 6.2 安装和配置计算节点
- 6.2.1 安装组件
- 6.2.2 配置通用组件
- 6.2.3 配置网络选项(公有网络)
- 6.2.4 为计算节点配置网络服务
- 6.2.5 完成安装
- 6.3 验证操作(在控制节点操作命令)
1、openstack介绍
2、部署环境
参考部署链接 这个部分解释如何按示例架构配置控制节点和一个计算节点
尽管大多数环境中包含认证,镜像,计算,至少一个网络服务,还有仪表盘,但是对象存储服务也可以单独操作。如果你的使用情况与涉及到对象存储,你可以在配置完适当的节点后跳到:ref:swift。然而仪表盘要求至少要有镜像服务,计算服务和网络服务。
你必须用有管理员权限的帐号来配置每个节点。可以用 root 用户或 sudo 工具来执行这些命令。
为获得最好的性能,我们推荐在你的环境中符合或超过在 :ref:figure-hwreqs
中的硬件要求。
以下最小需求支持概念验证环境,使用核心服务和几个:term:CirrOS
实例:
- 控制节点: 1 处理器, 4 GB 内存, 及5 GB 存储
- 计算节点: 1 处理器, 2 GB 内存, 及10 GB 存储
由于Openstack服务数量以及虚拟机数量的正常,为了获得最好的性能,我们推荐你的环境满足或者超过基本的硬件需求。如果在增加了更多的服务或者虚拟机后性能下降,请考虑为你的环境增加硬件资源。
为了避免混乱和为OpenStack提供更多资源,我们推荐你最小化安装你的Linux发行版。同时,你必须在每个节点安装你的发行版的64位版本。
每个节点配置一个磁盘分区满足大多数的基本安装。但是,对于有额外服务如块存储服务的,你应该考虑采用 :term:Logical Volume Manager (LVM)
进行安装。
对于第一次安装和测试目的,很多用户选择使用 :term:virtual machine (VM)
作为主机。使用虚拟机的主要好处有一下几点:
一台物理服务器可以支持多个节点,每个节点几乎可以使用任意数目的网络接口。
在安装过程中定期进行“快照”并且在遇到问题时可以“回滚”到上一个可工作配置的能力。
但是,虚拟机会降低您实例的性能,特别是如果您的 hypervisor 和/或 进程缺少硬件加速的嵌套虚拟机支持时。
2.1 配置时间同步(ntp)
2.1.1 控制节点服务器
安全并配置组件
1.安装软件包:
# yum install chrony
2.编辑 /etc/chrony.conf 文件,按照你环境的要求,对下面的键进行添加,修改或者删除:
server NTP_SERVER iburst
使用NTP服务器的主机名或者IP地址替换 NTP_SERVER 。配置支持设置多个 server 值。
3.为了允许其他节点可以连接到控制节点的 chrony 后台进程,在/etc/chrony.conf
文件添加下面的键:
allow 10.0.0.0/24
如有必要,将 10.0.0.0/24 替换成你子网的相应描述。
4.启动 NTP 服务并将其配置为随系统启动:
# systemctl enable chronyd.service
# systemctl start chronyd.service
2.1.2 其它节点服务器
安全并配置组件
1.安装软件包:
# yum install chrony
2.编辑/etc/chrony.conf
文件并注释除server
值外的所有内容。修改它引用控制节点:
server controller iburst
3.启动 NTP 服务并将其配置为随系统启动:
# systemctl enable chronyd.service
# systemctl start chronyd.service
2.1.3 验证操作
1.在控制节点上执行这个命令:
# chronyc sources
210 Number of sources = 2
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- 192.0.2.11 2 7 12 137 -2814us[-3000us] +/- 43ms
^* 192.0.2.12 2 6 177 46 +17us[ -23us] +/- 68ms
在 Name/IP address 列的内容应显示NTP服务器的主机名或者IP地址。在 S 列的内容应该在NTP服务目前同步的上游服务器前显示 *。
2.在所有其他节点执行相同命令:
# chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* controller 3 9 377 421 +15us[ -87us] +/- 15ms
2.2 安装客户端(OpenStack包)
1.配置yum源
[root@controller ~]# cat /etc/yum.repos.d/openstack.repo
[openstack]
name=mitaka
baseurl=http://172.25.200.250/mitaka
gpgcheck=0
2.升级安装包
[root@controller ~]# yum upgrade
3.安装客户端
[root@controller ~]# yum install python-openstackclient -y
4.安装配置mysql数据库
[root@controller ~]# yum install mariadb mariadb-server python2-PyMySQL -y
5.创建并编辑 /etc/my.cnf.d/openstack.cnf,然后完成如下动作
## 在 [mysqld] 部分,设置 ``bind-address``值为控制节点的管理网络IP地址以使得其它节点可以通过管理网络访问数据库
[root@controller ~]# vim /etc/my.cnf.d/openstack.cnf
[root@controller ~]# cat /etc/my.cnf.d/openstack.cnf
[mysqld]
bind-address = 172.25.200.1
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
6.启动/开机自起服务
[root@controller ~]# systemctl enable --now mariadb.service
7.为了保证数据库服务的安全性,运行“mysql_secure_installation“脚本。特别需要说明的是,为数据库的root用户设置一个适当的密码。
[root@controller ~]# mysql_secure_installation
2.3 消息队列
2.3.1 安全并配置组件
1.安装包:
yum install rabbitmq-server -y
2.启动消息队列服务并将其配置为随系统启动
systemctl enable --now rabbitmq-server.service
3.添加 openstack 用户
rabbitmqctl add_user openstack westos
4.给"openstack"用户配置写和读权限
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
5.启用插件
[root@controller ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to rabbit@controller... started 6 plugins.
2.4 Memcached
认证服务认证缓存使用Memcached缓存令牌。缓存服务memecached运行在控制节点。在生产部署中,我们推荐联合启用防火墙、认证和加密保证它的安全。
1.安装软件包:
[root@controller ~]# yum install memcached python-memcached
2.启动Memcached服务,并且配置它随机启动。
[root@controller ~]# systemctl enable --now memcached.service
3.查看端口
[root@controller ~]# netstat -antlp | grep :11211
tcp 0 0 127.0.0.1:11211 0.0.0.0:* LISTEN 15689/memcached
tcp6 0 0 ::1:11211 :::* LISTEN 15689/memcached
[root@controller ~]# vim /etc/sysconfig/memcached
[root@controller ~]# cat /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
#OPTIONS="-l 127.0.0.1,::1"
[root@controller ~]# systemctl restart memcached.service
3、 认证服务
3.1 先决条件
1.用数据库连接客户端以 root 用户连接到数据库服务器:
$ mysql -u root -p
2.创建 keystone 数据库:
CREATE DATABASE keystone;
3.对"keystone"数据库授予恰当的权限:
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
用合适的密码替换 KEYSTONE_DBPASS 。
3.2 安全并配置组件
1.运行以下命令来安装包
[root@controller ~]# yum install openstack-keystone httpd mod_wsgi
2.生成一个随机值在初始的配置中作为管理员的令牌。
[root@controller ~]# openssl rand -hex 10
8e475069b9f20c421ce7
3.编辑文件 /etc/keystone/keystone.conf 并完成如下动作
在""[DEFAULT]""部分,定义初始管理令牌的值:
[DEFAULT]
...
admin_token = ADMIN_TOKEN
使用前面步骤生成的随机数替换"ADMIN_TOKEN" 值。
在 [database] 部分,配置数据库访问:
[database]
...
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
#将"KEYSTONE_DBPASS"替换为你为数据库选择的密码。
在"[token]"部分,配置Fernet UUID令牌的提供者。
[token]
...
provider = fernet
4.初始化身份认证服务的数据库:
[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
5.初始化Fernet keys:
[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
3.3 配置 Apache HTTP 服务器
1.编辑"/etc/httpd/conf/httpd.conf" 文件,配置"ServerName" 选项为控制节点:
ServerName controller
2.用下面的内容创建文件 /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>
[root@controller ~]# systemctl enable --now httpd.service
3.4 创建服务实体和API端点
3.4.1 先决条件
默认情况下,身份认证服务数据库不包含支持传统认证和目录服务的信息。你必须使用:doc:keystone-install 章节中为身份认证服务创建的临时身份验证令牌用来初始化的服务实体和API端点。
你必须使用–os-token
参数将认证令牌的值传递给:command:openstack 命令。类似的,你必须使用–os-url
参数将身份认证服务的 URL传递给 openstack 命令或者设置OS_URL环境变量。本指南使用环境变量以缩短命令行的长度。
1 配置认证令牌:
$ export OS_TOKEN=ADMIN_TOKEN
将"ADMIN_TOKEN"替换为你在 :doc:`keystone-install`章节中生成的认证令牌。例如:
$ export OS_TOKEN=294a4c8a8a475f9b9836
2 配置端点URL:
$ export OS_URL=http://controller:35357/v3
3 配置认证 API 版本:
$ export OS_IDENTITY_API_VERSION=3
3.4.2 创建服务实体和API端点
在你的Openstack环境中,认证服务管理服务目录。服务使用这个目录来决定您的环境中可用的服务。
1 创建服务实体和身份认证服务:
$ openstack service create \
--name keystone --description "OpenStack Identity" identity
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | OpenStack Identity |
| enabled | True |
| id | 4ddaae90388b4ebc9d252ec2252d8d10 |
| name | keystone |
| type | identity |
+-------------+----------------------------------+
2 身份认证服务管理了一个与您环境相关的 API 端点的目录。服务使用这个目录来决定如何与您环境中的其他服务进行通信。
OpenStack使用三个API端点变种代表每种服务:admin,internal和public。默认情况下,管理API端点允许修改用户和租户而公共和内部APIs不允许这些操作。在生产环境中,处于安全原因,变种为了服务不同类型的用户可能驻留在单独的网络上。对实例而言,公共API网络为了让顾客管理他们自己的云在互联网上是可见的。管理API网络在管理云基础设施的组织中操作也是有所限制的。内部API网络可能会被限制在包含OpenStack服务的主机上。此外,OpenStack支持可伸缩性的多区域。为了简单起见,本指南为所有端点变种和默认"RegionOne"区域都使用管理网络。
创建认证服务的 API 端点:
$ openstack endpoint create --region RegionOne \
identity public http://controller:5000/v3
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 30fff543e7dc4b7d9a0fb13791b78bf4 |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 8c8c0927262a45ad9066cfe70d46892c |
| service_name | keystone |
| service_type | identity |
| url | http://controller:5000/v3 |
+--------------+----------------------------------+
$ openstack endpoint create --region RegionOne \
identity internal http://controller:5000/v3
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 57cfa543e7dc4b712c0ab137911bc4fe |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 6f8de927262ac12f6066cfe70d99ac51 |
| service_name | keystone |
| service_type | identity |
| url | http://controller:5000/v3 |
+--------------+----------------------------------+
$ openstack endpoint create --region RegionOne \
identity admin http://controller:35357/v3
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 78c3dfa3e7dc44c98ab1b1379122ecb1 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 34ab3d27262ac449cba6cfe704dbc11f |
| service_name | keystone |
| service_type | identity |
| url | http://controller:35357/v3 |
+--------------+----------------------------------+
3.4.3 创建域、项目、用户和角色
身份认证服务为每个OpenStack服务提供认证服务。认证服务使用 T domains, projects (tenants), :term:users<user>
和 :term:roles<role>
的组合。
1 创建域"default":
$ openstack domain create --description "Default Domain" default
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Default Domain |
| enabled | True |
| id | e0353a670a9e496da891347c589539e9 |
| name | default |
+-------------+----------------------------------+
2 在你的环境中,为进行管理操作,创建管理的项目、用户和角色:
创建 admin 项目:
$ openstack project create --domain default \
--description "Admin Project" admin
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Admin Project |
| domain_id | e0353a670a9e496da891347c589539e9 |
| enabled | True |
| id | 343d245e850143a096806dfaefa9afdc |
| is_domain | False |
| name | admin |
| parent_id | None |
+-------------+----------------------------------+
创建 admin 用户:
$ openstack user create --domain default \
--password-prompt admin
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | e0353a670a9e496da891347c589539e9 |
| enabled | True |
| id | ac3377633149401296f6c0d92d79dc16 |
| name | admin |
+-----------+----------------------------------+
创建 admin 角色:
$ openstack role create admin
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | cd2cb9a39e874ea69e5d4b896eb16128 |
| name | admin |
+-----------+----------------------------------+
添加"admin" 角色到 admin 项目和用户上:
$ openstack role add --project admin --user admin admin
3 本指南使用一个你添加到你的环境中每个服务包含独有用户的service 项目。创建"service"项目:
$ openstack project create --domain default \
--description "Service Project" service
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Service Project |
| domain_id | e0353a670a9e496da891347c589539e9 |
| enabled | True |
| id | 894cdfa366d34e9d835d3de01e752262 |
| is_domain | False |
| name | service |
| parent_id | None |
+-------------+----------------------------------+
4 常规(非管理)任务应该使用无特权的项目和用户。作为例子,本指南创建 demo 项目和用户。
创建"demo" 项目:
$ openstack project create --domain default \
--description "Demo Project" demo
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| description | Demo Project |
| domain_id | e0353a670a9e496da891347c589539e9 |
| enabled | True |
| id | ed0b60bf607743088218b0a533d5943f |
| is_domain | False |
| name | demo |
| parent_id | None |
+-------------+----------------------------------+
创建"demo" 用户:
$ openstack user create --domain default \
--password-prompt demo
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | e0353a670a9e496da891347c589539e9 |
| enabled | True |
| id | 58126687cbcc4888bfa9ab73a2256f27 |
| name | demo |
+-----------+----------------------------------+
创建 user 角色:
$ openstack role create user
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | None |
| id | 997ce8d05fc143ac97d83fdfb5998552 |
| name | user |
+-----------+----------------------------------+
添加 user 角色到 demo 项目和用户:
$ openstack role add --project demo --user demo user
3.5 验证操作
因为安全性的原因,关闭临时认证令牌机制:
编辑 /etc/keystone/keystone-paste.ini 文件,从"[pipeline:public_api]","[pipeline:admin_api]"和"[pipeline:api_v3]"部分删除"admin_token_auth "。
重置"OS_TOKEN"和"OS_URL" 环境变量:
$ unset OS_TOKEN OS_URL
作为 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 |
+------------+-----------------------------------------------------------------+
3.6 创建 OpenStack 客户端环境脚本
[root@controller ~]# vim admin-openrc
[root@controller ~]# vim demo-openrc
创建 admin 和 "demo`"项目和用户创建客户端环境变量脚本。本指南的接下来的部分会引用这些脚本,为客户端操作加载合适的的凭证。
1 编辑文件 admin-openrc 并添加如下内容:
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
将 ADMIN_PASS 替换为你在认证服务中为 admin 用户选择的密码。
2 编辑文件 demo-openrc 并添加如下内容:
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
将 DEMO_PASS 替换为你在认证服务中为 demo 用户选择的密码。
3.7 使用脚本
[root@controller ~]# source admin-openrc
[root@controller ~]# source demo-openrc
[root@controller ~]# openstack user list
+----------------------------------+-------+
| ID | Name |
+----------------------------------+-------+
| 8b3d76ba379043e5984ba3eba6aeceea | demo |
| d8e8ffe3256f48a391f40a2d7290745e | admin |
+----------------------------------+-------+
4、镜像服务
4.1 先决条件
安装和配置镜像服务之前,你必须创建创建一个数据库、服务凭证和API端点。完成下面的步骤以创建数据库:
1 用数据库连接客户端以 root 用户连接到数据库服务器:
$ mysql -u root -p
- 创建 glance 数据库:
CREATE DATABASE glance;
- 对
glance
数据库授予恰当的权限:
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
IDENTIFIED BY 'GLANCE_DBPASS';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
IDENTIFIED BY 'GLANCE_DBPASS';
用一个合适的密码替换 GLANCE_DBPASS。
退出数据库客户端。
2 获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
$ . admin-openrc
3 要创建服务证书,完成这些步骤:
- 创建 glance 用户:
$ openstack user create --domain default --password-prompt glance
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | e0353a670a9e496da891347c589539e9 |
| enabled | True |
| id | e38230eeff474607805b596c91fa15d9 |
| name | glance |
+-----------+----------------------------------+
- 添加 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 |
+-------------+----------------------------------+
4 创建镜像服务的 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 |
+--------------+----------------------------------+
4.2 安全并配置组件
1 安装软件包:
# yum install openstack-glance
2 编辑文件 /etc/glance/glance-api.conf 并完成如下动作:
在 [database] 部分,配置数据库访问:
[database]
...
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/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 用户选择的密码。
在 [glance_store] 部分,配置本地文件系统存储和镜像文件位置:
[glance_store]
...
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
3 编辑文件 /etc/glance/glance-registry.conf
并完成如下动作:
在 [database] 部分,配置数据库访问:
[database]
...
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/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 用户选择的密码。
4 写入镜像服务数据库:
# su -s /bin/sh -c "glance-manage db_sync" glance
5 完成安装
启动镜像服务、配置他们随机启动:
# systemctl enable openstack-glance-api.service \
openstack-glance-registry.service
# systemctl start openstack-glance-api.service \
openstack-glance-registry.service
4.3 验证操作
1 获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
$ . admin-openrc
2 下载源镜像:
$ wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
3 使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访问它:
5、计算服务
5.1 控制节点配置
5.2 计算节点配置
5.3 测试
6、网络服务
6.1 控制节点配置
6.1.1 先决条件
1.完成下面的步骤以创建数据库:
- 用数据库连接客户端以 root 用户连接到数据库服务器:
$ mysql -u root -p
- 创建
neutron
数据库:
CREATE DATABASE neutron;
- 对
neutron
数据库授予合适的访问权限,使用合适的密码替换NEUTRON_DBPASS
:
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
IDENTIFIED BY 'NEUTRON_DBPASS';
- 退出数据库客户端。
2.获得 admin 凭证来获取只有管理员能执行的命令的访问权限:
$ . admin-openrc
或者
$ source admin-openrc
3.要创建服务证书,完成这些步骤:
- 创建
neutron
用户:
$ openstack user create --domain default --password-prompt neutron
User Password:
Repeat User Password:
+-----------+----------------------------------+
| Field | Value |
+-----------+----------------------------------+
| domain_id | e0353a670a9e496da891347c589539e9 |
| enabled | True |
| id | b20a6692f77b4258926881bf831eb683 |
| name | neutron |
+-----------+----------------------------------+
- 添加
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 |
+-------------+----------------------------------+
4.创建网络服务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 |
+--------------+----------------------------------+
6.1.2 配置网络选项(选择公共网络)
在controller节点上安装并配置网络组件
安装组件
# yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-linuxbridge ebtables
配置服务组件
Networking 服务器组件的配置包括数据库、认证机制、消息队列、拓扑变化通知和插件。
配置 Modular Layer 2 (ML2) 插件
配置Linuxbridge代理
配置DHCP代理
6.3.3 配置元数据代理
6.3.4 为计算节点配置网络服务
6.3.5 完成安装
1.网络服务初始化脚本需要一个超链接 /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
2.同步数据库:
# 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
3.重启计算API 服务:
# systemctl restart openstack-nova-api.service
4.当系统启动时,启动 Networking 服务并配置它启动。
# 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
6.3.6 验证操作
[root@controller ~]# neutron agent-list
+--------------+--------------+------------+-------------------+-------+----------------+----------------+
| id | agent_type | host | availability_zone | alive | admin_state_up | binary |
+--------------+--------------+------------+-------------------+-------+----------------+----------------+
| 3a373d8b-733 | DHCP agent | controller | nova | :-) | True | neutron-dhcp- |
| 4-4fc2-9eea- | | | | | | agent |
| cdded41e48e5 | | | | | | |
| 81f0ed16-cf7 | Linux bridge | controller | | :-) | True | neutron- |
| 2-4f0d-97a9- | agent | | | | | linuxbridge- |
| 05bacf8c3850 | | | | | | agent |
| b1c7334c-d6f | Metadata | controller | | :-) | True | neutron- |
| 7-482a-a989- | agent | | | | | metadata-agent |
| 953bd77e4ed4 | | | | | | |
+--------------+--------------+------------+-------------------+-------+----------------+----------------+
6.2 安装和配置计算节点
6.2.1 安装组件
# yum install openstack-neutron-linuxbridge ebtables ipset
6.2.2 配置通用组件
Networking 通用组件的配置包括认证机制、消息队列和插件。
- 编辑
/etc/neutron/neutron.conf
文件并完成如下操作:
- 在
[database]
部分,注释所有connection
项,因为计算节点不直接访问数据库。 - 在 “[DEFAULT]” 和 “[oslo_messaging_rabbit]”部分,配置 “RabbitMQ” 消息队列的连接:
[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
用你在RabbitMQ中为"openstack"选择的密码替换 “RABBIT_PASS”。
- 在 “[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
6.2.3 配置网络选项(公有网络)
配置Linuxbridge代理
- Linuxbridge代理为实例建立layer-2虚拟网络并且处理安全组规则。
- 编辑
/etc/neutron/plugins/ml2/linuxbridge_agent.ini
文件并且完成以下操作:
- 在
[linux_bridge]
部分,将公共虚拟网络和公共物理网络接口对应起来:
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
将“PROVIDER_INTERFACE_NAME“ 替换为底层的物理公共网络接口。默认eth1
可以使用ifconfig查看
- 在
[vxlan]
部分,禁止VXLAN覆盖网络:
[vxlan]
enable_vxlan = False
- 在
[securitygroup]
部分,启用安全组并配置 Linuxbridge iptables firewall driver:
[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
6.2.4 为计算节点配置网络服务
- 编辑
/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 用户选择的密码。
6.2.5 完成安装
1.重启计算服务:
# systemctl restart openstack-nova-compute.service
2.启动Linuxbridge代理并配置它开机自启动:
# systemctl enable neutron-linuxbridge-agent.service
# systemctl start neutron-linuxbridge-agent.service
6.3 验证操作(在控制节点操作命令)
[root@controller ~]# . admin-openrc
[root@controller ~]# neutron ext-list
+---------------------------+-----------------------------------------------+
| alias | name |
+---------------------------+-----------------------------------------------+
| default-subnetpools | Default Subnetpools |
| availability_zone | Availability Zone |
| network_availability_zone | Network Availability Zone |
| auto-allocated-topology | Auto Allocated Topology Services |
| binding | Port Binding |
| agent | agent |
| subnet_allocation | Subnet Allocation |
| dhcp_agent_scheduler | DHCP Agent Scheduler |
| tag | Tag support |
| external-net | Neutron external network |
| net-mtu | Network MTU |
| network-ip-availability | Network IP Availability |
| quotas | Quota management support |
| provider | Provider Network |
| multi-provider | Multi Provider Network |
| address-scope | Address scope |
| timestamp_core | Time Stamp Fields addition for core resources |
| extra_dhcp_opt | Neutron Extra DHCP opts |
| security-group | security-group |
| rbac-policies | RBAC Policies |
| standard-attr-description | standard-attr-description |
| port-security | Port Security |
| allowed-address-pairs | Allowed Address Pairs |
+---------------------------+-----------------------------------------------+