Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service,...

77
Openstack 部署 FortiGate VM Openstack 部署 FortiGate VM 版本 V1.0 时间 2016 6 版本 作者 王祥 状态 反馈 [email protected]

Transcript of Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service,...

Page 1: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

Openstack 部署 FortiGate VM

版本 V1.0

时间 2016 年 6 月

版本

作者 王祥

状态

反馈 [email protected]

Page 2: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

目录

1 OpenStack 简介 ....................................................................................................................... 5

2 版本说明 ................................................................................................................................. 6

3 部署架构 ................................................................................................................................. 7

4 部署 OpenStack ....................................................................................................................... 8

4.1 基本环境 .......................................................................................................................... 8

4.1.1 密码设定 .................................................................................................................. 8

4.1.2 防火墙 ...................................................................................................................... 9

4.1.3 主机名和 hosts 文件................................................................................................ 9

4.1.4 网络时间协议(NTP) .......................................................................................... 10

4.1.5 Openstack 包 .......................................................................................................... 11

4.1.6 SQL 数据库 ............................................................................................................. 11

4.1.7 消息队列 ................................................................................................................ 12

4.1.8 Memcached ............................................................................................................ 12

4.2 身份认证服务 ................................................................................................................ 13

4.2.1 Keystone V3 基本概念 ........................................................................................... 13

4.2.2 安装前准备 ............................................................................................................ 14

4.2.3 安装和配置 Keystone ............................................................................................ 15

4.2.4 创建服务实体和 API 端点 ..................................................................................... 16

4.2.5 创建域、项目、用户和角色 ................................................................................ 17

4.2.6 验证操作 ................................................................................................................ 18

4.2.7 创建 OpenStack 客户端环境脚本 ....................................................................... 18

4.3 镜像服务 ........................................................................................................................ 20

4.3.1 Glance 基本概念 .................................................................................................... 20

4.3.2 安装和配置 Controller 节点 .................................................................................. 21

4.3.3 验证操作 ................................................................................................................ 23

4.4 Compute 服务 ................................................................................................................ 24

4.4.1 安装和配置 Controller 节点 .................................................................................. 24

Page 3: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4.4.2 安装和配置 Compute 节点 ................................................................................... 26

4.4.3 验证操作 ................................................................................................................ 28

4.5 网络服务 ........................................................................................................................ 29

4.5.1 安装和配置 Controller 节点 .................................................................................. 29

4.5.2 安装和配置 Network 节点 .................................................................................... 32

4.5.3 安装和配置 Compute 节点 ................................................................................... 36

4.5.4 操作验证 ................................................................................................................ 38

4.6 Horizon 服务 .................................................................................................................. 39

4.6.1 安装和配置 Horizon............................................................................................... 39

4.6.2 操作验证 ................................................................................................................ 40

4.7 块存储服务 .................................................................................................................... 41

4.7.1 安装和配置 Controller 节点 .................................................................................. 41

4.7.2 安装和配置存储节点 ............................................................................................ 43

4.7.3 操作验证 ................................................................................................................ 46

4.8 Orchestration 服务 ....................................................................................................... 47

4.8.1 Heat 基本概念 ....................................................................................................... 47

4.8.2 安装前准备 ............................................................................................................ 47

4.8.3 安装和配置 Orchestration ..................................................................................... 49

4.8.4 操作验证 ................................................................................................................ 51

5 启动 OpenStack 实例 ............................................................................................................ 52

5.1 登录 dashboard ............................................................................................................. 52

5.2 创建项目和用户 ............................................................................................................ 53

5.3 上传镜像 ........................................................................................................................ 55

5.4 创建云主机类型 ............................................................................................................ 56

5.5 创建公网网络 ................................................................................................................ 57

5.6 创建租户网络 ................................................................................................................ 59

5.7 权限和安全配置 ............................................................................................................ 60

5.8 创建一个 centos 7 实例 ................................................................................................ 62

Page 4: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

5.9 创建用户数据文件 ........................................................................................................ 62

5.10 创建 FortiGate KVM 实例 .......................................................................................... 64

5.10.1 手动创建 FortiGate KVM 实例 .......................................................................... 64

5.10.2 Cloud-init 创建 FortiGate KVM 实例 ..................................................................... 66

5.10.3 Heat 模板创建 FortiGate KVM 实例...................................................................... 67

5.11 登录 centos 7 实例 .................................................................................................... 70

5.11.1 密钥对方式 ........................................................................................................ 70

5.11.2 Cloud-init 方式 ....................................................................................................... 72

6 Cloud-init ............................................................................................................................... 73

6.1 基本概念 ........................................................................................................................ 73

6.2 Metadata 获取 ............................................................................................................... 73

7 实例数据流 ........................................................................................................................... 75

Page 5: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

1 OpenStack 简介

OpenStack 是一个由 NASA(美国国家航空航天局)和 Rackspace 合作研发并发

起的,以 Apache许可证授权的自由软件和开放源代码项目。

OpenStack 是一个开源的云计算管理平台项目,通过各种互补的服务提供了基础

设施即服务(IaaS)的解决方案,每个服务提供 API 以进行集成,包括 Compute

service, Identity service, Networking service, Image service, Block Storage

service, Object Storage service, Telemetry service, Orchestration service

等。

OpenStack services

服务 项目名称 描述

Dashboard Horizon 提供了一个基于 web 的自服务门户,与 OpenStack 底层服务交互,诸如启

动一个实例,分配 IP 地址以及配置访问控制。

Compute Nova 在 OpenStack 环境中计算实例的生命周期管理。按需响应包括生成、调度、

回收虚拟机等操作。

Networking Neutron 确保为其它 OpenStack 服务提供网络连接即服务,比如 OpenStack 计算。

为用户提供 API 定义网络和使用。基于插件的架构其支持众多的网络提供

商和技术。

存储

Object Storage Swift 通过一个 RESTful,基于 HTTP的应用程序接口存储和任意检索的非结构化

数据对象。它拥有高容错机制,基于数据复制和可扩展架构。它的实现并

像是一个文件服务器需要挂载目录。在此种方式下,它写入对象和文件到

多个硬盘中,以确保数据是在集群内跨服务器的多份复制。

Block Storage Cinder 为运行实例而提供的持久性块存储。它的可插拔驱动架构的功能有助于创

建和管理块存储设备。

共享服务

Identity service Keystone 为其他 OpenStack 服务提供认证和授权服务,为所有的 OpenStack 服务提

Page 6: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

供一个端点目录。

Image service Glance 存储和检索虚拟机磁盘镜像,OpenStack 计算会在实例部署时使用此服务。

Telemetry Ceilometer 为 OpenStack 云的计费、基准、扩展性以及统计等目的提供监测和计量。

高层次服务

Orchestration Heat 既可以使用本地 :term:`HOT <Heat Orchestration Template (HOT)>`模

板格式,亦可使用 AWS CloudFormation 模板格式,来编排多个综合的云

应用,通过 OpenStack 本地 REST API 或者是 CloudFormation 相兼容的队

列 API。

2 版本说明

系统版本:CentOS 7.0

OpenStack 的每个主版本系列以字母表顺序(A~Z)命名,以年份及当年内的排

序做版本号,从第一版的 Austin 到目前最新的 Mitaka,共经历了 13 个主版本。

FortiGate KVM 的版本格式如下:

xxx.out:用于升级已有的 FortiGate-VM 软件版本

xxx.out.kvm.zip:其解压后得到 QCOW2 文件用于 KVM 创建新 FortiGate_VM

xxx.deb.kvm.zip:其解压后得到 QCOW2 文件是 FortiGate_VM 的 debug 版本

本次部署的版本如下:

系统版本:CentOS 7.0

OpenStack 版本:Mitaka

FortiGate KVM 版本:FGT_VM64_KVM-v5-build1064-FORTINET.out.kvm

Page 7: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

3 部署架构

该架构基于 OpenStack Neutron 网络虚拟化部署模式,部署以下 4 个节点:

Controller Node:主要是 OpenStack 控制者,运行身份认证服务,镜像服务,

仪表盘,管理部分计算和网络服务,通过 Message Queue 系统与其他节点进行沟通,

同时还是提供 SQL 数据库和 NTP 这样的支撑服务。

Network Node:主要是提供 OpenStack 网络虚拟化服务,包括 L2,L3 及 DHCP

Agent服务等。还可以提供一些七层的网络服务,如 FWaas,LBaas等。

Compute Node:主要是提供 OpenStack运算虚拟化服务 Hypervisor,可以提供

KVM,XEN,QEMU等虚拟化技术。

Block Storage Node:主要提供块存储给虚拟机使用。

Page 8: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4 部署 OpenStack

官网 mitaka 版本部署指南:

http://docs.openstack.org/mitaka/install-guide-rdo/

4.1 基本环境

Openstack Mitaka 版本部署指南:http://docs.openstack.org/mitaka/install-guide-rdo/

4.1.1 密码设定

OpenStack 服 务 使 用 SERVICE_PASS 表 示 服 务 帐 号 密 码 , 使 用

SERVICE_DBPASS 表示数据库密码。

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

密码

密码 描述

数据库密码(no variable used) 数据库 root 密码

ADMIN_PASS admin 用户密码

CEILOMETER_DBPASS Telemetry 服务的数据库密码

CEILOMETER_PASS Telemetry 服务的 ceilometer 用户密码

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

CINDER_PASS 块设备存储服务的 cinder 密码

DASH_DBPASS Database password for the dashboard

DEMO_PASS demo 用户的密码

GLANCE_DBPASS 镜像服务的数据库密码

GLANCE_PASS 镜像服务的 glance 用户密码

HEAT_DBPASS Orchestration 服务的数据库密码

Page 9: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

密码

密码 描述

HEAT_DOMAIN_PASS Orchestration 域的密码

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

KEYSTONE_DBPASS 认证服务的数据库密码

NEUTRON_DBPASS 网络服务的数据库密码

NEUTRON_PASS 网络服务的 neutron 用户密码

NOVA_DBPASS 计算服务的数据库密码

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

RABBIT_PASS RabbitMQ 的 guest 用户密码

SWIFT_PASS 块设备存储服务用户``swift``的密码

4.1.2 防火墙

CentOS 7.0 默认使用的是 firewall 作为防火墙,为了方便,实验环境使用 iptables

–F 命令清空防火墙策略。

OpenStack Mitaka 版本服务需开放的端口请参考官网连接:

http://docs.openstack.org/mitaka/config-reference/firewalls-default-ports.html

4.1.3 主机名和 hosts 文件

①编辑/etc/hosts 文件并添加如下内容,这里有两个 compute 节点

192.168.90.32 controller

192.168.90.33 network

192.168.90.34 compute0

192.168.90.35 compute1

192.168.90.36 cinder

②编辑/etc/hostname 文件并根据 hosts 文件设置对应的主机名,如控制节点主机名设

置为 controller,其他节点同理

Page 10: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4.1.4 网络时间协议(NTP)

Controller 节点设置

由于各个节点需要时间同步,我们将 NTP 服务器安装在 Controller 节点上,其

它节点向 Controller 同步。在 CentOS 7. NTP Server 使用 chrony。

①安装软件包

yum install chrony

②编辑 /etc/chrony.conf 文件并完成下面的操作

指定上级 NTP 服务器

server NTP_SERVER iburst

允许其他节点向 Controller 节点进行同步

allow 192.168.90.0/24

③启动 chronyd 服务并将其设置为随系统启动

systemctl enable chronyd.service

systemctl start chronyd.service

其他节点设置

①安装软件包

yum install chrony

②编辑 /etc/chrony.conf 文件并完成下面的操作

修改上级 NTP 服务器为 Controller 节点,并注释其他 NTP 服务器

server controller iburst

③启动 chronyd 服务并将其设置为随系统启动

systemctl enable chronyd.service

systemctl start chronyd.service

操作验证

在控制节点执行 chronyc sources,在 Name/IP address 列的内容应显示 NTP 服

务器的主机名或者 IP 地址。在 S 列的内容应该在 NTP 服务目前同步的上游服务器

前显示 *。

Page 11: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

在其它节点执行 chronyc sources,在 Name/IP address 列的内容应显示控制节点

的主机名,在对应的 S 列显示 *。

4.1.5 Openstack 包

在 CentOS 中, extras 仓库提供用于启用 OpenStack 仓库的 RPM 包。 CentOS

默认启用 extras 仓库,因此你可以直接安装用于启用 OpenStack 仓库的包。在所有

节点执行以下操作。

①安装软件包

yum install centos-release-openstack-mitaka

升级包

yum upgrade

安装 OpenStack 客户端

yum install python-openstackclient

CentOS 默认启用 SELinux。安装 openstack-selinux 包实现对 OpenStack服务的安全策略进行自动管理。

yum install openstack-selinux

4.1.6 SQL 数据库

典型地,数据库运行在 Controller 节点上。我们使用 MariaDB 或 MySQL 来存

储信息。

①安装软件包

yum install mariadb mariadb-server python2-PyMySQL

②创建并编辑/etc/my.cnf.d/openstack.cnf 文件并完成下面的操作

在[mysqld]增加如下配置,bind-addres 是 Controller 节点的管理 IP

[mysqld]

bind-address = 192.168.90.32

default-storage-engine = innodb

innodb_file_per_table

character-set-server = utf8

③启动数据库服务并将其设置为随系统启动

systemctl enable mariadb.service

Page 12: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

systemctl start mariadb.service

④执行 mysql_secure_installation 脚本来对数据库进行安全加固

4.1.7 消息队列

OpenStack 使用 message queue 协调操作和各服务的状态信息。消息队列服务

运行在Controller节点上。OpenStack支持好几种消息队列服务包括 RabbitMQ, Qpid,

和 ZeroMQ。不过,大多数发行版本的 OpenStack 包支持特定的消息队列服务。我

们安装 RabbitMQ 消息队列服务,因为大部分发行版本都支持它。

①安装软件包

yum install rabbitmq-server

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

systemctl enable rabbitmq-server.service

systemctl start rabbitmq-server.service

③添加 openstack 用户,用合适的密码替换 RABBIT_DBPASS

rabbitmqctl add_user openstack RABBIT_PASS

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

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

4.1.8 Memcached

Keystone 服务使用 Memcached 服务缓存令牌,Memcached 服务运行在 Controller

节点上。

①安装软件包

yum install memcached python-memcached

②启动 memcached 服务并将其设置为随系统启动

systemctl enable memcached.service

systemctl start memcached.service

Page 13: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4.2 身份认证服务

4.2.1 Keystone V3 基本概念

User 用户:使用云资源的个体,只要是使用了 Openstack 服务的对象都可以

称为用户,Users通过认证信息(credentials,如密码、API Keys等)进行验证。

Group 组:一组 Users 的容器,可以向 Group 中添加用户,并直接给 Group 分配

角色,那么在这个 Group 中的所有用户就都拥有了 Group 所拥有的角色权限。

Credential 用户证据:用来证明用户身份的证据,可以是用户名和密码、用户

名和 API key,或者一个 Keystone 分配的身份 token。

Authentication 身份认证:验证用户身份的过程。Keystone 服务通过检查用

户的 Credential 来确定用户的身份。最开始,使用用户名/密码或者用户名/API

key作为 credential。当用户的 credential被验证后,Kestone 会给用户分配一个

authentication token 供该用户后续的请求使用。

Token 令牌:指的是一串比特值或者字符串,用来作为访问资源的记号。Token

中含有可访问资源的范围和有效时间。

Project 项目:即 Tenant,可以理解为一个人、项目或者组织拥有的资源的合

集。在一个租户中可以拥有很多个用户,这些用户可以根据权限的划分使用租户中

的资源。

Domain 域:实现真正的多租户(multi-tenancy)架构,Domain 担任 Project 的高

层容器。云服务的客户是 Domain 的所有者,他们可以在自己的 Domain 中创建多个

Projects、Users、Groups 和 Roles。

Service 服务:一个 OpenStack 服务,比如 Nova、Swift 或者 Glance 等。每

个服务提供一个或者多个 endpoint 供用户访问资源以及进行操作。

Endpoint 端点:一个网络可访问的服务地址,通过它你可以访问一个服务,通

常是个 URL 地址。不同 region 有不同的 service endpoint。endpoint 告诉

OpenStack service 去哪里访问特定的 servcie。比如,当 Nova 需要访问 Glance

服务去获取 image 时,Nova 通过访问 Keystone 拿到 Glance 的 endpoint,然后

Page 14: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

通过访问该 endpoint 去获取 Glance服务。我们可以通过 Endpoint的 region 属

性去定义多个 region。

Regions 地域:一个地理上的概念,每个 region 有自己独立的 endpoint,

regions之间完全隔离。

Role 角色:一个 role 可看着一个 ACL 的集合。Keystone 中,分配给用户的

token 包含了 role 列表。被访问的服务会判断访问它的用户的角色,以及每个

role访问资源或者操作的权限。系统默认使用 admin 和 _member_ role。User 验

证的时候必须带有制定的 tenant,roles 会被分配到指定的 tenant。

Policy 策略:OpenStack 对用户的验证除了 OpenStack 的身份验证以外,还

需要鉴别用户对某个服务是否有访问权限。Policy 机制就是用来控制某一个 User

在某个 Project 中某个操作的权限。这个 User 能执行什么操作,不能执行什么操

作,就是通过 policy 机制来实现的。对于 Keystone 服务来说,policy 就是一个

json 文件,默认是 /etc/keystone/policy.json。通过配置这个文件,Keystone

Service 实现了对 User 的基于用户角色的权限管理。

4.2.2 安装前准备

在 Controller 节点上配置 OpenStack 身份认证服务前,必须创建一个数据库和

管理员令牌。

①创建 keystone 数据库

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

mysql -u root –p

创建 keystone 数据库

CREATE DATABASE keystone;

对``keystone``数据库授予恰当的权限,用合适的密码替换 KEYSTONE_DBPASS

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'KEYSTONE_DBPASS';

GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'KEYSTONE_DBPASS';

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

openssl rand -hex 10

Page 15: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4.2.3 安装和配置 Keystone

OpenStack 身份认证服务 Identity 为认证管理,授权管理和服务目录服务管理提

供单点整合。其它 OpenStack 服务将身份认证服务当做通用统一 API 来使用。此外,

提供用户信息但是不在 OpenStack 项目中的服务(如 LDAP 服务)可被整合进先前

存在的基础设施中。

①安装软件包

yum install openstack-keystone httpd mod_wsgi

②编辑/etc/keystone/keystone.conf 并完成下面的操作

在[DEFAULT]部分,定义管理员 token 初始值,也就是之前 openssl rand -hex 10 生成的随机数

[DEFAULT]

admin_token = 802de1895b35e601f632

在 [database] 部分,配置数据库访问,将 KEYSTONE_DBPASS 替换为你为数据库选择的密码

[database]

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

在[token]部分,配置 fernet 类型的 token

[token]

provider = fernet

初始化身份认证服务的数据库,忽略产生的告警信息

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

初始化 Fernet keys

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

配置 Apache HTTP 服务器

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

ServerName controller

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

Listen 5000

Listen 35357

<VirtualHost *:5000>

WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone

display-name=%{GROUP}

WSGIProcessGroup keystone-public

WSGIScriptAlias / /usr/bin/keystone-wsgi-public

WSGIApplicationGroup %{GLOBAL}

WSGIPassAuthorization On

Page 16: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

ErrorLogFormat "%{cu}t %M"

ErrorLog /var/log/httpd/keystone-error.log

CustomLog /var/log/httpd/keystone-access.log combined

<Directory /usr/bin>

Require all granted

</Directory>

</VirtualHost>

<VirtualHost *:35357>

WSGIDaemonProcess keystone-admin processes=5 threads=1 user=keystone group=keystone

display-name=%{GROUP}

WSGIProcessGroup keystone-admin

WSGIScriptAlias / /usr/bin/keystone-wsgi-admin

WSGIApplicationGroup %{GLOBAL}

WSGIPassAuthorization On

ErrorLogFormat "%{cu}t %M"

ErrorLog /var/log/httpd/keystone-error.log

CustomLog /var/log/httpd/keystone-access.log combined

<Directory /usr/bin>

Require all granted

</Directory>

</VirtualHost>

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

systemctl enable httpd.service

systemctl start httpd.service

4.2.4 创建服务实体和 API 端点

身份认证服务提供服务的目录和他们的位置。每个添加到 OpenStack 环境中的

服务在目录中需要一个 service 实体和一些 API endpoints 。

默认情况下,身份认证服务数据库不包含支持传统认证和目录服务的信息。必

须为身份认证服务创建的临时身份验证令牌用来初始化的服务实体和 API 端点。

你必须使用--os-token 参数将认证令牌的值传递给 openstack 命令。类似的,你必须

使用--os-url 参数将身份认证服务的 URL 传递给 openstack 命令或者设置 OS_URL

环境变量。这里使用环境变量。

Page 17: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

注意:因为安全的原因,除非做必须的认证服务初始化,不要长时间使用临时认证令牌。

①配置认证令牌

export OS_TOKEN=802de1895b35e601f632

②配置端点 URL

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

③配置认证 API 版本

export OS_IDENTITY_API_VERSION=3

④为身份认证服务创建服务实体

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

OpenStack 为每个服务提供了三个 API 端点的值:admin、internal 和 public。

admin API 端点默认允许修改用户和租户,而 public 和 internal API 不允许。在生

产环境中,出于安全考虑,这些变量可能设置在服务于不同类型用户的隔离网络中。

例如,public API 网络也许可以从外部云被管理工具访问到,admin API 网络会被

保护,而 internal API 网络是连接到每台主机上的。而且,OpenStack 为了可扩展

性,支持多个区域。这里为所有端点变种和默认``RegionOne``区域都使用管理网络。

⑤创建认证服务的 API 端点

openstack endpoint create --region RegionOne identity public http://controller:5000/v3

openstack endpoint create --region RegionOne identity internal http://controller:5000/v3

openstack endpoint create --region RegionOne identity admin http://controller:35357/v3

4.2.5 创建域、项目、用户和角色

为进行管理操作,创建管理的项目、用户和角色。

①创建 default 域

openstack domain create --description "Default Domain" default

②创建 admin 项目

openstack project create --domain default --description "Admin Project" admin

③创建 admin 用户,会提示你输入 admin 的密码

openstack user create --domain default --password-prompt admin

④创建 admin 角色

openstack role create admin

⑤添加``admin`` 角色到 admin 项目和用户上

Page 18: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

openstack role add --project admin --user admin admin

注意:你创建的任何角色必须映射到每个 OpenStack 服务配置文件目录下的 policy.json 文件中。默认策

略是给大部分服务授予管理访问 admin 角色。

⑥创建 service 项目,为添加到环境中每个服务包含独有用户的 service 项目

openstack project create --domain default --description "Service Project" service

⑦创建 user 角色,作为非特权用户的默认角色

openstack role create user

4.2.6 验证操作

①因为安全性的原因,关闭临时认证令牌机制

编辑/usr/share/keystone/keystone-dist-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

4.2.7 创建 OpenStack 客户端环境脚本

为了提升客户端操作的效率,OpenStack 支持简单的客户端环境变量脚本即

OpenRC 文件。

①编辑文件 admin-openrc.sh 并添加如下内容,将 ADMIN_PASS 替换为你在认

证服务中为 admin 用户选择的密码

export OS_PROJECT_DOMAIN_ID=default

export OS_USER_DOMAIN_ID=default

export OS_PROJECT_NAME=admin

export OS_TENANT_NAME=admin

Page 19: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

export OS_USERNAME=admin

export OS_PASSWORD= ADMIN_PASS

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

export OS_IDENTITY_API_VERSION=3

②加载 admin-openrc.sh 文件来身份认证服务的环境变量位置和 admin 项目和用

户证书

. admin-openrc

③请求认证令牌

openstack token issue

Page 20: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4.3 镜像服务

4.3.1 Glance 基本概念

磁盘格式:虚拟机的磁盘格式指的是底层的磁盘镜像格式,虚拟设备厂商有不

同的格式来放置虚拟机磁盘镜像包含的信息。

raw:无结构的磁盘镜像格式;如果你有一个无扩展名的磁盘文件,那么这个磁

盘文件可能是裸格式

vhd:VHD 磁盘格式,一种被 VMware, Xen, Microsoft, VirtualBox, 以及其他虚

拟机管理程序通用的磁盘格式

vmdk.:能被多钟虚拟机管理程序支持的通用格式

vdi.:能被 VirtualBox 虚机管理程序和 QEMU 模拟器支持的格式

iso:光盘数据内容的归档格式,例如 CD-ROM

qcow2:由 QEMU 模拟器支持,能动态扩展以及支持写时复制特性

aki:Amazon 内核镜像

ari.:Amazon ramdisk 镜像

ami:Amazon 虚机镜像

容器格式:镜像容器格式表示包含虚拟机镜像的文件是否也包含虚拟机的

metadata 数据。

bare.:镜像没有容器或者没有封装 metadata 数据

ovf.:OVF 容器格式

aki.:Amazon 内核镜像

ari.:Amazon ramdisk 镜像

ami.:Amazon 虚机镜像

注意:镜像服务以及 OpenStack 的其他项目都不支持解析容器格式,如果你不确定你虚拟机镜像容器格式,

你可以安全的指定 bare 作为容器格式

Page 21: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

镜像元数据:镜像元数据使最终用户能获取镜像的原生特性,并且用于关联

OpenStack 的各组件以及驱动镜像服务接口。

4.3.2 安装和配置 Controller 节点

4.3.2.1 安装前准备

安装和配置镜像服务之前,必须创建创建一个数据库、服务凭证和 API 端点。

①创建 glance 数据库

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

mysql -u root –p

创建 glance 数据库

CREATE DATABASE glance;

对 glance 数据库授予恰当的权限,用一个合适的密码替换 GLANCE_DBPASS

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';

②获得 admin 凭证来获取只有管理员能执行命令的访问权限

. admin-openrc

③创建证书服务

创建 glance 用户,会提示输入 glance 用户的密码

openstack user create --domain default --password-prompt glance

添加 admin 角色到 glance 用户和 service 项目上

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

创建 glance 服务实体

openstack service create --name glance --description "OpenStack Image" image

创建镜像服务的 API 端点

openstack endpoint create --region RegionOne image public http://controller:9292

openstack endpoint create --region RegionOne image internal http://controller:9292

openstack endpoint create --region RegionOne image admin http://controller:9292

4.3.2.2 部署组件

OpenStack 的镜像服务 (glance) 允许用户发现、注册和恢复虚拟机镜像。它提

供了一个 REST API,允许您查询虚拟机镜像的 metadata 并恢复一个实际的镜像。

①安装软件包

yum install openstack-glance

Page 22: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

②编辑文件 /etc/glance/glance-api.conf 文件并完成下面的操作

在 [database] 部分,配置数据库访问,将 GLANCE_DBPASS 替换为你为镜像服务选择的密码

[database]

connection = mysql+pymysql://glance:fortinet@controller/glance

在 [keystone_authtoken] 和 [paste_deploy] 部分,配置认证服务访问,将 GLANCE_PASS 替换为你为认

证服务中你为 glance 用户选择的密码

[keystone_authtoken]

auth_uri = http://controller:5000

auth_url = http://controller:35357

auth_plugin = password

project_domain_id = default

user_domain_id = default

project_name = service

username = glance

password = GLANCE_PASS

[paste_deploy]

flavor = keystone

注意:在 [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] 部分,配置数据库访问,将 GLANCE_DBPASS 替换为你为镜像服务选择的密码

[database]

connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

在[keystone_authtoken]和[paste_deploy]部分,配置认证服务访问,将 GLANCE_PASS 替换为你为认证服

务中你为 glance 用户选择的密码

[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

Page 23: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

[paste_deploy]

flavor = keystone

注意:在 [keystone_authtoken] 中注释或者删除其他选项

初始化身份认证服务的数据库,忽略产生的告警信息

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

④启动 glance 服务并将其设置为随系统启动

systemctl enable openstack-glance-api.service openstack-glance-registry.service

systemctl start openstack-glance-api.service openstack-glance-registry.service

4.3.3 验证操作

①获得 admin 凭证来获取只有管理员能执行命令的访问权限

source admin-openrc.sh

②下载源镜像

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

③上传镜像

使用 QCOW2 磁盘格式, bare 容器格式上传镜像到镜像服务并设置公共可见,这样所有的项目都可以访

问它

openstack image create "cirros" --file cirros-0.3.4-x86_64-disk.img \

--disk-format qcow2 --container-format bare –public

④确认镜像的上传并验证属性

glance image-list

Page 24: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4.4 Compute 服务

4.4.1 安装和配置 Controller 节点

4.4.1.1 安装前准备

在安装和配置计算服务前,必须创建数据库,服务凭证和 API 端点。

①创建 nova-api 和 nova 数据库

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

mysql -u root –p

创建 nova 数据库

CREATE DATABASE nova_api;

CREATE DATABASE nova;

对 nova-api和 nova 数据库授予恰当的访问权限,使用合适的密码替换 NOVA_DBPASS

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';

GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';

②获得 admin 凭证来获取只有管理员能执行命令的访问权限

. admin-openrc

③创建服务证书

创建 nova 用户,会提示输入密码

openstack user create --domain default --password-prompt nova

添加 admin 角色到 nova 用户

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

创建 nova 服务实体

openstack service create --name nova --description "OpenStack Compute" compute

创建计算服务 API 端点

openstack endpoint create --region RegionOne \

compute public http://controller:8774/v2.1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

compute internal http://controller:8774/v2.1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

compute admin http://controller:8774/v2.1/%\(tenant_id\)s

4.4.1.2 部署组件

使用 OpenStack 计算服务来托管和管理云计算系统。OpenStack 计算服务是基础

设施即服务(IaaS)系统的主要部分,模块主要由 Python 实现。OpenStack 计算组件请

Page 25: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

求 OpenStack Identity 服务进行认证,请求 OpenStack Image 服务提供磁盘镜像,为

OpenStack dashboard 提供用户与管理员接口。

①安装软件包

yum install openstack-nova-api openstack-nova-conductor \

openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler

②编辑/etc/nova/nova.conf 文件并完成下面的操作

在[DEFAULT] 部分,启用 compute 和 metadata API

[DEFAULT]

enabled_apis = osapi_compute,metadata

在[database]部分,配置数据库访问,使用你为计算数据库选择的密码替换 NOVA_DBPASS

[api_database]

connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api

[database]

connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova

在[DEFAULT]和[oslo_messaging_rabbit]部分,配置 RabbitMQ 消息队列访问,用你在 “RabbitMQ” 中

为 openstack 用户选择的密码替换 RABBIT_PASS

[DEFAULT]

rpc_backend = rabbit

[oslo_messaging_rabbit]

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

在[DEFAULT]和[keystone_authtoken]部分,配置认证服务访问,使用你在身份认证服务中选择的 nova用

户密码替换 NOVA_PASS

[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 = nova

password = NOVA_PASS

注意:在 [keystone_authtoken] 中注释或者删除其他选项

在 [DEFAULT] 部分,配置 my_ip 为管理接口的 IP 地址

[DEFAULT]

Page 26: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

my_ip = 192.168.90.32

在[DEFAULT]部分,启用网络服务支持

use_neutron = True

firewall_driver = nova.virt.firewall.NoopFirewallDriver

在[vnc]部分,配置 VNC 代理使用控制节点的管理 IP 地址

[vnc]

vncserver_listen = $my_ip

vncserver_proxyclient_address = $my_ip

在[glance]部分,配置镜像服务的位置

[glance]

api_servers = http://controller:9292

在 [oslo_concurrency] 部分,配置锁路径

[oslo_concurrency]

lock_path = /var/lib/nova/tmp

初始化 Compute 数据库,忽略产生的告警

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

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

③启动 Compute 服务并将其设置为随系统启动

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

4.4.2 安装和配置 Compute 节点

计算服务支持几种不同的 hypervisors 来部署 instances。这里使用 KVM 作为

hypervisor,计算机节点必须支持虚拟机的硬件加速,这样才能支持 FortiGate KVM

虚拟机。

使用 egrep -c '(vmx|svm)' /proc/cpuinfo 命令检查计算节点是否支持虚拟机的硬件

加速,如果这个命令返回 1 或者更大的值,说明您的计算节点支持硬件加速,一般

不需要进行额外的配置。如果这个命令返回 0,你的计算节点不支持硬件加速。

①安装软件包

yum install openstack-nova-compute

Page 27: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

②编辑/etc/nova/nova.conf 文件并完成下面的操作

在[DEFAULT]和 [oslo_messaging_rabbit]部分,配置 RabbitMQ 消息队列,用你在 RabbitMQ 中为

openstack 用户选择的密码替换 RABBIT_PASS

[DEFAULT]

rpc_backend = rabbit

[oslo_messaging_rabbit]

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

在[DEFAULT]和[keystone_authtoken]部分,配置认证服务访问,使用你在身份认证服务中选择的 nova用

户密码替换 NOVA_PASS

[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 = nova

password = NOVA_PASS

注意:在 [keystone_authtoken] 中注释或者删除其他选项

在 [DEFAULT] 部分,配置 my_ip 为管理接口的地址

[DEFAULT]

my_ip = 192.168.90.32

在 [DEFAULT]部分,启用网络服务支持

use_neutron = True

firewall_driver = nova.virt.firewall.NoopFirewallDriver

在[vnc]部分,启用并配置远程控制台访问,服务器组件监听所有的 IP 地址,而代理组件仅仅监听计算

节点管理网络接口的 IP 地址。基本的 URL 指示您可以使用 web 浏览器访问位于该计算节点上实例的远程控

制台的位置。

enabled = True

vncserver_listen = 0.0.0.0

vncserver_proxyclient_address = $my_ip

novncproxy_base_url = http://controller:6080/vnc_auto.html

在[glance]部分,配置镜像服务的位置

[glance]

api_servers = http://controller:9292

在 [oslo_concurrency] 部分,配置锁路径

Page 28: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

[oslo_concurrency]

lock_path = /var/lib/nova/tmp

在[libvirt]部分,配置 hypervisor 的类型为 kvm

virt_type = kvm

③启动 Compute 服务并将其设置为随系统启动

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

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

4.4.3 验证操作

①获得 admin 凭证来获取只有管理员能执行命令的访问权限

. admin-openrc

②列出服务组件,以验证是否成功启动并注册了每个进程

nova service-list

Page 29: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4.5 网络服务

4.5.1 安装和配置 Controller 节点

4.5.1.1 安装前准备

在配置 OpenStack 网络(neutron)服务,必须创建一个数据库,服务凭证和 API

端点。

①创建 neutron 数据库

用数据库连接客户端以 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';

②获得 admin 凭证来获取只有管理员能执行命令的访问权限

. admin-openrc

③创建服务证书

创建 neutron 用户,会提示输入 neutron 的密码

openstack user create --domain default --password-prompt neutron

添加 admin 角色到 neutron 用户

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

创建 neutron 服务实体

openstack service create --name neutron --description "OpenStack Networking" network

创建网络服务 API 端点

openstack endpoint create --region RegionOne network public http://controller:9696

openstack endpoint create --region RegionOne network internal http://controller:9696

openstack endpoint create --region RegionOne network admin http://controller:9696

4.5.1.2 部署组件

OpenStack 网络(neutron)管理您 OpenStack 环境中虚拟网络基础设施(VNI)

所有网络方面和物理网络基础设施(PNI)的接入层方面。OpenStack 网络允许租户

Page 30: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

创建包括像 firewall,load balancer 和 virtual private network (VPN)等这样服务的高级

网络虚拟拓扑。

①安装软件包

yum install openstack-neutron openstack-neutron-ml2

②编辑/etc/neutron/neutron.conf 文件并完成如下操作

在[database]部分,配置数据库访问,使用你选择的数据库密码替换 NEUTRON_DBPASS

[database]

connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron

在[DEFAULT]部分,启用 Layer 2 (ML2)插件模块,路由服务和重叠的 IP 地址

[DEFAULT]

core_plugin = ml2

service_plugins = router

allow_overlapping_ips = True

在[DEFAULT]和[oslo_messaging_rabbit]部分,配置 RabbitMQ 消息队列访问用你在 RabbitMQ 中为

openstack 选择的密码替换 RABBIT_PASS

[DEFAULT]

rpc_backend = rabbit

[oslo_messaging_rabbit]

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

在[DEFAULT]和[keystone_authtoken]部分,配置认证服务访问,将 NEUTRON_PASS 替换为你在认证服务

中为 neutron 用户选择的密码

[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

注意:在 [keystone_authtoken] 中注释或者删除其他选项

在[DEFAULT]和[nova]部分,配置网络以能够反映计算网络拓扑变化,使用你在身份认证服务中选择的 nova

用户密码替换 NOVA_PASS

[DEFAULT]

Page 31: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

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

在[oslo_concurrency]部分,配置锁路径

lock_path = /var/lib/neutron/tmp

③配置 Modular Layer 2 (ML2) 插件,ML2 插件使用 Linux 桥接机制为实例创建

layer-2(桥接/交换)虚拟网络基础设施。编辑/etc/neutron/plugins/ml2/ml2_conf.ini

文件并完成下面的操作。

在[ml2]部分,启用 flat,VLAN 和 VXLAN 网络

[ml2]

type_drivers = flat,vlan,vxlan

警告:在你配置 ML2 插件后,修改和删除 type_drivers 的值可能导致数据库不一致,建议一开始就设定

多个。

在[ml2]部分,启用 VXLAN 项目(私有)网络

tenant_network_types = vxlan

在[ml2]部分,启用 Linux 桥接和 layer-2 population 机制

mechanism_drivers = linuxbridge,l2population

注意:Linux 桥接代理只支持 VXLAN 网络

在[ml2]部分,启用端口安全扩展驱动

extension_drivers = port_security

在[ml2_type_flat]部分,配置公共 flat 提供网络,external 是自己定义的网络名称

[ml2_type_flat]

flat_networks = external

在[ml2_type_vxlan]部分,配置 VXLAN 网络标识范围

[ml2_type_vxlan]

vni_ranges = 1:1000

在[securitygroup]部分,启用 ipset 增加安全组的方便性

enable_ipset = True

网 络 服 务 初 始 化 脚 本 需 要 一 个 超 链 接 /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

④配置计算节点使用网络,编辑/etc/nova/nova.conf 文件并完成下面操作。

Page 32: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

在[neutron]部分,配置访问参数,启用元数据代理和配置 secret,将 NEUTRON_PASS 替换为你在认证服

务中为 neutron 用户选择的密码,用你为元数据代理选择的密码替换 METADATA_SECRET,METADATA_SECRET 密码

在网络节点上设置

[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

初始化数据库

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

⑥重启计算 API 服务

systemctl restart openstack-nova-api.service

⑦启动网络服务并将其设置为随系统启动

systemctl enable neutron-server.service

systemctl start neutron-server.service

4.5.2 安装和配置 Network 节点

在 neutron 网络中有两种服务模式,这里使用 Self-service networks 网络服务。

Provider networks 网络服务:部署最简单的架构,只支持绑定实例到公共网络。

没有自服务网络,路由器和浮动 IP 地址。只有 admin 或者其它特权用户可以管理提

供者网络。

Self-service networks 网络服务,提供 3 层服务,支持绑定实例到自服务(私有)

网络。非特权用户可以管理自服务网络,包括路由器。路由器提供自服务网络和提

供者网络之间的互通。同时,浮动 IP 地址提供从外部网络访问实例的能力,比如因

特网。

Page 33: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

①在安装前,设置网络节点内核的网络参数,编辑/etc/sysctl.conf 文件并添加如

下内容。

net.ipv4.ip_forward=1

net.ipv4.conf.all.rp_filter=0

net.ipv4.conf.default.rp_filter=0

net.bridge.bridge-nf-call-arptables=1

net.bridge.bridge-nf-call-iptables=1

net.bridge.bridge-nf-call-ip6tables=1

将参数载入

sysctl –p

②安装软件包

yum install openstack-neutron openstack-neutron-ml2 \

openstack-neutron-linuxbridge ebtables

③编辑/etc/neutron/neutron.conf 文件并完成如下操作

在[database]部分,注释所有 connection 项,因为网络节点不直接访问数据库[database]

在[DEFAULT]部分,启用 Layer 2 (ML2)插件模块,路由服务和重叠的 IP 地址

[DEFAULT]

core_plugin = ml2

service_plugins = router

allow_overlapping_ips = True

在[DEFAULT]和[oslo_messaging_rabbit]部分,配置 RabbitMQ 消息队列访问用你在 RabbitMQ 中为

openstack 选择的密码替换 RABBIT_PASS

[DEFAULT]

rpc_backend = rabbit

[oslo_messaging_rabbit]

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

在[DEFAULT]和[keystone_authtoken]部分,配置认证服务访问,将 NEUTRON_PASS 替换为你在认证服务

中为 neutron 用户选择的密码

[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

Page 34: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

project_name = service

username = neutron

password = NEUTRON_PASS

注意:在 [keystone_authtoken] 中注释或者删除其他选项

在[oslo_concurrency]部分,配置锁路径

lock_path = /var/lib/neutron/tmp

④配置 Modular Layer 2 (ML2) 插件,ML2 插件使用 Linux 桥接机制为实例创

建 layer-2(桥接/交换)虚拟网络基础设施。编辑/etc/neutron/plugins/ml2/ml2_conf.ini

文件并完成下面的操作。

在[ml2]部分,启用 flat,VLAN 和 VXLAN 网络

[ml2]

type_drivers = flat,vlan,vxlan

警告:在你配置 ML2 插件后,修改和删除 type_drivers 的值可能导致数据库不一致,建议一开始就设定

多个。

在[ml2]部分,启用 VXLAN 项目(私有)网络

tenant_network_types = vxlan

在[ml2]部分,启用 Linux 桥接和 layer-2 population 机制

mechanism_drivers = linuxbridge,l2population

注意:Linux 桥接代理只支持 VXLAN 网络

在[ml2]部分,启用端口安全扩展驱动

extension_drivers = port_security

在[ml2_type_flat]部分,配置公共 flat 提供网络,external 是自己定义的网络名称

[ml2_type_flat]

flat_networks = external

在[ml2_type_vxlan]部分,配置 VXLAN 网络标识范围

[ml2_type_vxlan]

vni_ranges = 1:1000

在[securitygroup]部分,启用 ipset 增加安全组的方便性

enable_ipset = True

网 络 服 务 初 始 化 脚 本 需 要 一 个 超 链 接 /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

⑤配置 Linux 桥接代理,Linux 桥接代理为实例创建包括私有网络的 VXLAN

隧 道 和 处 理 安 全 组 的 layer-2 ( 桥 接 / 交 换 ) 虚 拟 网 络 设 施 。 编 辑

/etc/neutron/plugins/ml2/linuxbridge_agent.ini 文件并完成下面的操作。

在[linux_bridge]部分,映射公共虚拟网络到公共物理网络接口,external 是之前定义的网络名称,eth2

是连接 external 网络的网卡。(可查看部署架构)

[linux_bridge]

Page 35: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

physical_interface_mappings = external:eth2

在[vxlan]部分,启用 VXLAN 网络,配置处理 vxlan 网络和启用 layer-2 的物理网络接口的 IP 地址,

10.0.0.1 是连接 vxlan 网络的接口 IP,用于封装 VXLAN

[vxlan]

enable_vxlan = True

local_ip = 10.0.0.1

l2_population = True

在[securitygroup]部分,启用安全组并配置 Linux 桥接 iptables 防火墙驱动

[securitygroup]

enable_security_group = True

firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

⑥配置 layer-3 代理,编辑/etc/neutron/l3_agent.ini 文件并完成下面操作。

在[DEFAULT]部分,配置 Linux 桥接网络驱动和外部网络桥接,external_network_bridge 选项为空表示

可以在一个代理上启用多个外部网络

interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver

external_network_bridge =

⑦配置 DHCP 代理,编辑/etc/neutron/dhcp_agent.ini 文件并完成下面的操作。

在[DEFAULT]部分,配置 Linux桥接网卡驱动,Dnsmasq DHCP 驱动并启用隔离元数据,这样在公共网络上

的实例就可以通过网络访问元数据

[DEFAULT]

interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver

dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq

enable_isolated_metadata = True

注意:在 VXLAN 网络中,数据包增加了 VXLAN 头部,增加了网络开销,减少了有效内容或用户数据的可

用空间。通常设置接口 MTU 的大小为 1450,避免数据包分片影响网络使用

在 openstack 网络中通过 DHCP MTU 选项告知接口 mtu 的大小,在/etc/neutron/dhcp_agent.ini 增加如

下配置

[DEFAULT]

dnsmasq_config_file = /etc/neutron/dnsmasq-neutron.conf

创建并编辑/etc/neutron/dnsmasq-neutron.conf 文件启用 DHCP MTU 选项 (26) 并配置为 1450 bytes

dhcp-option-force=26,1450

注意:一些云镜像会忽略 DHCP MTU 选项,可以通过手动配置和 metadata 等方式修改

⑧配置元数据代理,编辑``/etc/neutron/metadata_agent.ini``文件并完成下面的操

作。

在[DEFAULT]部分,配置元数据主机和共享密码,用你为元数据代理选择的密码替换 METADATA_SECRET

[DEFAULT]

nova_metadata_ip = controller

metadata_proxy_shared_secret = METADATA_SECRET

⑨启动网络服务并将其设置为随系统启动

Page 36: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

systemctl enable neutron-linuxbridge-agent.service neutron-dhcp-agent.service \

neutron-metadata-agent.service neutron-l3-agent.service

systemctl start neutron-linuxbridge-agent.service neutron-dhcp-agent.service \

neutron-metadata-agent.service neutron-l3-agent.service

4.5.3 安装和配置 Compute 节点

①在安装前,设置网络节点内核的网络参数,编辑/etc/sysctl.conf 文件并添加如

下内容。

net.ipv4.ip_forward=1

net.ipv4.conf.all.rp_filter=0

net.ipv4.conf.default.rp_filter=0

net.bridge.bridge-nf-call-arptables=1

net.bridge.bridge-nf-call-iptables=1

net.bridge.bridge-nf-call-ip6tables=1

将参数载入

sysctl –p

②安装软件包。

yum install openstack-neutron-linuxbridge ebtables ipset

③编辑``/etc/neutron/neutron.conf`` 文件并完成如下操作

在[database]部分,注释所有 connection 项,因为计算节点不直接访问数据库

在[DEFAULT]和[oslo_messaging_rabbit]部分,配置 RabbitMQ 消息队列访问,用你在 RabbitMQ 中为

openstack 选择的密码替换 RABBIT_PASS

[DEFAULT]

rpc_backend = rabbit

[oslo_messaging_rabbit]

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

在[DEFAULT]和[keystone_authtoken]部分,配置认证服务访问,将 NEUTRON_PASS 替换为你在认证服务

中为 neutron 用户选择的密码

[DEFAULT]

auth_strategy = keystone

[keystone_authtoken]

auth_uri = http://controller:5000

auth_url = http://controller:35357

auth_plugin = password

project_domain_id = default

user_domain_id = default

Page 37: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

project_name = service

username = neutron

password = NEUTRON_PASS

注意:在 [keystone_authtoken] 中注释或者删除其他选项

在 [oslo_concurrency] 部分,配置锁路径

[oslo_concurrency]

lock_path = /var/lib/neutron/tmp

④配置 Linux 桥接代理,编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini 文件

并完成下面的操作。

在[linux_bridge]部分,映射公共虚拟网络到公共物理网络接口,external 是在 Controller 节点定义的

网络名称,eth2 是连接 external 网络的网卡。(可查看部署架构)

physical_interface_mappings = eth2

在[vxlan]部分,启用 VXLAN 网络,配置处理 vxlan 网络和启用 layer-2 的物理网络接口的 IP 地址,

10.0.0.2 是连接 vxlan 网络的接口 IP,用于封装 VXLAN

[vxlan]

enable_vxlan = True

local_ip = 10.0.0.2

l2_population = True

在[securitygroup]部分,启用安全组并配置 Linux 桥接 iptables 防火墙驱动

[securitygroup]

enable_security_group = True

firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

⑤配置计算使用网络,编辑``/etc/nova/nova.conf``文件并完成下面的操作。

在[neutron]部分,配置访问参数,将 NEUTRON_PASS 替换为你在认证服务中为 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

⑥重启计算服务

systemctl restart openstack-nova-compute.service

⑦启动网络服务并将其设置为随系统启动

systemctl enable neutron-linuxbridge-agent.service

systemctl start neutron-linuxbridge-agent.service

Page 38: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4.5.4 操作验证

①获得 admin 凭证来获取只有管理员能执行命令的访问权限

. admin-openrc

②验证 neutron-server 的进程是否启动正常

neutron ext-list

③验证 neutron 代理是否启动成功,这里部署了两个计算节点 compute0 和

compute1

Page 39: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4.6 Horizon 服务

4.6.1 安装和配置 Horizon

在 Controller 节点上部署 OpenStack Dashboard,它是一个基于 web 的、用于管

理OpenStack 服务的图形用户接口,使得云管理员和用户可以管理不同的OpenStack

资源和服务。

①安装软件包

yum install openstack-dashboard

②编辑文件/etc/openstack-dashboard/local_settings 并完成如下操作

在 controller 节点上配置仪表盘以使用 OpenStack 服务

OPENSTACK_HOST = "controller"

允许所有主机访问仪表板

ALLOWED_HOSTS = ['*', ]

配置 memcached 会话存储服务

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

CACHES = {

'default': {

'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',

'LOCATION': 'controller:11211',

}

}

注意:注释其他的会话存储服务配置

使用 Keystone v3 版本

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 角色

Page 40: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"

配置支持的网络参数

OPENSTACK_NEUTRON_NETWORK = {

'enable_router': True,

'enable_quotas': True,

'enable_distributed_router': True,

'enable_ha_router': False,

'enable_lb': False,

'enable_firewall': False,

'enable_vpn': False,

'enable_fip_topology_check': False,

配置时区

TIME_ZONE = "Asia/Shanghai"

③重启 web 服务器和会话存储服务

systemctl restart httpd.service memcached.service

4.6.2 操作验证

①在浏览器中输入 http://controller/dashboard 访问仪表盘

Page 41: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4.7 块存储服务

4.7.1 安装和配置 Controller 节点

4.7.1.1 安装前准备

安装和配置块存储服务之前,必须创建数据库、服务证书和 API 端点。

①创建 cinder 数据库

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

mysql -u root –p

创建 cinder 数据库

CREATE DATABASE cinder;

对 cinder 数据库授予恰当的权限,用合适的密码替换 CINDER_DBPASS

GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'CINDER_DBPASS';

GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'CINDER_DBPASS';

②获得 admin 凭证来获取只有管理员能执行命令的访问权限

. admin-openrc

③创建服务证书

创建一个 cinder 用户,会提示你输入密码

openstack user create --domain default --password-prompt cinder

添加 admin 角色到 cinder 用户上

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

创建 cinder 和 cinderv2 服务实体

openstack service create --name cinder --description "OpenStack Block Storage" volume

openstack service create --name cinderv2 --description "OpenStack Block Storage" volumev2

创建块设备存储服务的 API 入口点

openstack endpoint create --region RegionOne \

volume public http://controller:8776/v1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

volume internal http://controller:8776/v1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

volume admin http://controller:8776/v1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

volumev2 public http://controller:8776/v2/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

volumev2 internal http://controller:8776/v2/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

volumev2 admin http://controller:8776/v2/%\(tenant_id\)s

Page 42: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4.7.1.2 部署组件

OpenStack 块存储服务(cinder)为虚拟机添加持久的存储,块存储提供一个基础

设施为了管理卷,以及和 OpenStack 计算服务交互,为实例提供卷。此服务也会激

活管理卷的快照和卷类型的功能。

①安装软件包

yum install openstack-cinder

②编辑 /etc/cinder/cinder.conf 文件并完成如下操作

在 [database] 部分,配置数据库访问,用你为块设备存储数据库选择的密码替换 CINDER_DBPASS

[database]

connection = mysql://cinder:CINDER_DBPASS@controller/cinder

在[DEFAULT]和[oslo_messaging_rabbit]部分,配置 RabbitMQ 消息队列访问

[DEFAULT]

rpc_backend = rabbit

[oslo_messaging_rabbit]

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

在[DEFAULT]和[keystone_authtoken]部分,配置认证服务访问,将 CINDER_PASS 替换为你在认证服务中

为 cinder 用户选择的密码

[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 = cinder

password = CINDER_PASS

注意:在 [keystone_authtoken] 中注释或者删除其他选项

在[DEFAULT]部分,配置 my_ip来使用控制节点的管理接口的 IP 地址

[DEFAULT]

my_ip = 10.0.0.11

在 [oslo_concurrency] 部分,配置锁路径

[oslo_concurrency]

Page 43: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

lock_path = /var/lib/cinder/tmp

初始化块设备服务的数据库,忽略产生的告警

su -s /bin/sh -c "cinder-manage db sync" cinder

③配置计算节点使用块设备存储,编辑文件/etc/nova/nova.conf 并添加如下内容

[cinder]

os_region_name = RegionOne

④重启计算 API 服务

systemctl restart openstack-nova-api.service

⑤启动网络服务并将其设置为随系统启动

systemctl enable openstack-cinder-api.service openstack-cinder-scheduler.service

systemctl start openstack-cinder-api.service openstack-cinder-scheduler.service

4.7.2 安装和配置存储节点

在存储节点上使用 LVM 提供逻辑卷,通过 iSCSI 传输协议提供给实例使用。存储的分配和

消耗是由块存储驱动器或者多后端配置的驱动器决定的。还有很多驱动程序可用:NAS/SAN,

NFS,ISCSI,Ceph 等等。

①安装 LVM 包

yum install lvm2

②启动 LVM metadata 服务并将其设置为随系统启动

systemctl enable lvm2-lvmetad.service

systemctl start lvm2-lvmetad.service

③创建 LVM 物理卷/dev/sdb1 和/dev/sdc1,/dev/sdb 和/dev/sdc 是新增的两块用

于 LVM 的磁盘,系统盘是/dev/sda

Page 44: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

pvcreate /dev/sdb1 /dev/sdc1

④创建 LVM 卷组 cinder-volumes

vgcreate cinder-volumes /dev/sdb1 dev/sdc1

只有实例能够访问块存储卷。但是,底层的操作系统管理这些设备,关联到卷上。默认情况下,LVM 卷的

扫描工具会扫描包含卷的块存储设备的 /dev 目录。如果租户在卷上使用了 LVM,扫描工具会检查这些卷并尝

试缓存它们,这会在底层系统和租户卷上产生各种各样的问题。您必需重新配置 LVM,仅仅扫描包含了

cinder-volume 卷组的设备。修改配置文件 /etc/lvm/lvm.conf 并完成以下操作:

在 devices 部分,添加一个过滤器,接受 /dev/sdb 和/dev/sdc 设备,拒绝其他所有设备:以``a``开

头,即为 accept,或以 r 开头,即为 reject

devices {

filter = ["a/sdb/","a/sdc/","r/.*/"]

配置完成后,使用 pvdisplay 确认配置 Volume Group

Page 45: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

⑤安装软件包

yum install openstack-cinder targetcli

⑥编辑 /etc/cinder/cinder.conf,同时完成如下操作

在 [database] 部分,配置数据库访问,用你为块设备存储数据库选择的密码替换 CINDER_DBPASS

[database]

connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder

在[DEFAULT]和[oslo_messaging_rabbit]部分,配置 RabbitMQ 消息队列访问,用你在 RabbitMQ 中为

openstack 用户选择的密码替换 RABBIT_PASS

[DEFAULT]

rpc_backend = rabbit

[oslo_messaging_rabbit]

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

在[DEFAULT]和[keystone_authtoken]部分,配置认证服务访问,将 CINDER_PASS 替换为你在认证服务中

为 cinder 用户选择的密码

[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 = cinder

password = CINDER_PASS

注意:在 [keystone_authtoken] 中注释或者删除其他选项

在[DEFAULT]部分,配置 my_ip选项,192.168.90.36 是存储节点管理接口的地址

[DEFAULT]

my_ip = 192.168.90.36

在[lvm]部分,配置 LVM 后端以 LVM 驱动结束,卷组 cinder-volumes,iSCSI 协议和正确的 iSCSI 服务,

20.20.0.2 是存储节点存储网络接口的地址,如果不配置 iscsi_ip_address 选项,默认会使用 my_ip

[lvm]

volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver

volume_group = cinder-volumes

iscsi_protocol = iscsi

iscsi_helper = lioadm

iscsi_ip_address = 20.20.0.2

Page 46: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

在 [DEFAULT] 部分,启用 LVM 后端

[DEFAULT]

enabled_backends = lvm

注意:后端名字是任意的。这里使用驱动的名字 lvm 作为后端的名字

在 [DEFAULT] 部分,配置镜像服务的位置

glance_api_servers = http://controller:9292

在 [oslo_concurrency] 部分,配置锁路径

[oslo_concurrency]

lock_path = /var/lib/cinder/tmp

⑦启动块存储服务并将其设置为随系统启动

systemctl enable openstack-cinder-volume.service target.service

systemctl start openstack-cinder-volume.service target.service

注 意 : 如 果 启 动 块 存 储 服 务 失 败 , 提 示 ImportError: No module named

keystonemiddleware.auth_token.__init__,则在存储节点安装 python-keystone。Bug:

https://bugs.launchpad.net/openstack-manuals/+bug/1582133

4.7.3 操作验证

①获得 admin 凭证来获取只有管理员能执行命令的访问权限

. admin-openrc

②验证是否每个进程都成功启动

cinder service-list

Page 47: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4.8 Orchestration 服务

4.8.1 Heat 基本概念

Stack 栈: Stack 是多个由 Heat 创建的对象或者资源的集合。它包含实例(虚

拟机),网络,子网,路由,端口,路由端口,安全组(Security Group),安全组规

则,自动伸缩等。

Heat 模板:目前支持两种格式的模板,一种是基于 JSON 格式的 CFN 模板;

另外一种是基于 YAML 格式的 HOT 模板。CFN 模板主要是为了保持对 AWS 的

兼容性。HOT 模板是 Heat 自有的,资源类型更加丰富,更能体现出 Heat 特点的

模板。

一个典型的 HOT 模板由下列元素构成:

Heat_template_version 模板版本:必填字段,指定所对应的模板版本,Heat 会

根据版本进行检验。

Parameters 参数列表:选填,指输入参数列表。

Resources 资源列表:必填,指生成的 Stack 所包含的各种资源。可以定义资源

间的依赖关系,比如说生成 Port,然后再用 port 来生成 VM。

Output 输出列表:选填,指生成的 Stack 暴露出来的信息,可以用来给用户使

用,也可以用来作为输入提供给其它的 Stack。

4.8.2 安装前准备

在 Controller 节点安装和 Orchestration 配置服务之前,必须创建数据库,服务凭

证和 API 端点。同时需要在认证服务中添加额外信息。

①创建 heat 数据库

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

mysql -u root –p

创建 heat 数据库

CREATE DATABASE heat;

对 heat 数据库授予恰当的权限,使用合适的密码替换 HEAT_DBPASS

GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' IDENTIFIED BY 'HEAT_DBPASS';

Page 48: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' IDENTIFIED BY 'HEAT_DBPASS';

②获得 admin 凭证来获取只有管理员能执行命令的访问权限

. admin-openrc

③创建服务证书

创建 heat 用户,会提示你输入密码

openstack user create --domain default --password-prompt heat

添加 admin 角色到 heat 用户上

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

创建``heat`` 和 heat-cfn 服务实体

openstack service create --name heat --description "Orchestration" orchestration

openstack service create --name heat-cfn --description "Orchestration" cloudformation

创建 Orchestration 服务的 API 端点

openstack endpoint create --region RegionOne \

orchestration public http://controller:8004/v1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

orchestration internal http://controller:8004/v1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

orchestration admin http://controller:8004/v1/%\(tenant_id\)s

openstack endpoint create --region RegionOne \

cloudformation public http://controller:8000/v1

openstack endpoint create --region RegionOne \

cloudformation internal http://controller:8000/v1

openstack endpoint create --region RegionOne \

cloudformation admin http://controller:8000/v1

Page 49: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

为了管理栈,在认证服务中 Orchestration 需要更多信息。为栈创建 heat 包含项目和用户的域

openstack domain create --description "Stack projects and users" heat

在 heat 域中创建管理项目和用户的 heat_domain_admin 用户,会提示你输入密码

openstack user create --domain heat --password-prompt heat_domain_admin

添加 admin 角色到 heat 域中的 heat_domain_admin 用户,启用 heat_domain_admin 用户管理栈的管理权

openstack role add --domain heat --user-domain heat --user heat_domain_admin admin

4.8.3 安装和配置 Orchestration

编排(Orchestration)服务通过运行调用生成运行中云应用程序的 OpenStack API

为描述云应用程序提供基于模板的编排。该软件将其他 OpenStack 核心组件整合进

一个单文件模板系统。模板允许你创建很多种类的 OpenStack 资源,如实例,浮点

IP,云硬盘,安全组和用户。它也提供高级功能,如实例高可用,实例自动缩放,

和嵌套栈。

①安装软件包

yum install openstack-heat-api openstack-heat-api-cfn openstack-heat-engine

②编辑 /etc/heat/heat.conf 文件并完成如下操作

在 [database] 部分,配置数据库访问,将 HEAT_DBPASS 替换为你为 Orchestration 数据库选择的密码

[database]

connection = mysql+pymysql://heat:HEAT_DBPASS@controller/heat

在[DEFAULT]和[oslo_messaging_rabbit]部分,配置 RabbitMQ 消息队列访问,用你在 RabbitMQ 中为

openstack 用户选择的密码替换 RABBIT_PASS

[DEFAULT]

rpc_backend = rabbit

[oslo_messaging_rabbit]

rabbit_host = controller

rabbit_userid = openstack

rabbit_password = RABBIT_PASS

在[keystone_authtoken],[trustee],[clients_keystone]和 [ec2authtoken] 部分,配置认证服务访

问,将 HEAT_PASS 替换为你在认证服务中为 heat 用户选择的密码

[keystone_authtoken]

auth_uri = http://controller:5000

auth_url = http://controller:35357

memcached_servers = controller:11211

auth_type = password

project_domain_name = default

Page 50: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

user_domain_name = default

project_name = service

username = heat

password = HEAT_PASS

[trustee]

auth_plugin = password

auth_url = http://controller:35357

username = heat

password = HEAT_PASS

user_domain_name = default

[clients_keystone]

auth_uri = http://controller:35357

[ec2authtoken]

auth_uri = http://controller:5000

在[DEFAULT]部分,配置元数据和 等待条件 URLs

[DEFAULT]

heat_metadata_server_url = http://controller:8000

heat_waitcondition_server_url = http://controller:8000/v1/waitcondition

在 [DEFAULT]部分,配置栈域与管理凭据,将 HEAT_DOMAIN_PASS 替换为你在认证服务中为

heat_domain_admin 用户选择的密码

[DEFAULT]

stack_domain_admin = heat_domain_admin

stack_domain_admin_password = HEAT_DOMAIN_PASS

stack_user_domain_name = heat

初始化 Orchestration 数据库,忽略产生的告警

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

③启动 Orchestration服务并将其设置为随系统启动

systemctl enable openstack-heat-api.service \

openstack-heat-api-cfn.service openstack-heat-engine.service

systemctl start openstack-heat-api.service \

openstack-heat-api-cfn.service openstack-heat-engine.service

Page 51: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

4.8.4 操作验证

①获得 admin 凭证来获取只有管理员能执行命令的访问权限

. admin-openrc

②验证 Orchestration 服务是否成功启动并注册了每个进程

heat service-list

Page 52: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

5 启动 OpenStack 实例

5.1 登录 dashboard

Dashboard URL 的格式是:http://HOSTNAME/dashboard/,使用 admin 用户登录,

默认创建的是 default 域。

Page 53: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

5.2 创建项目和用户

作为云的管理员,您可以管理项目和用户。项目就是云中的机构单元,可以为

它分配用户,项目也被称为租户(tenant)或账户(account),可以分开管理项目

和用户,用户可以是一个或多个项目的成员。

选择“身份管理”“项目”,点击“创建项目”。

项目成员:从所有用户列表中选择用户作为项目的成员

配额标签:设定资源使用限制

选择“身份管理”“用户”,点击创建用户,在创建用户窗口中输入用户名,

密码,选择用户所属的项目和角色。同时在 Controller 节点创建 用于 demo 项目和

用户的客户端环境变量脚本,创建 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=fortinet

export OS_AUTH_URL=http://controller:5000/v3

export OS_IDENTITY_API_VERSION=3

export OS_IMAGE_API_VERSION=2

Page 54: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

Page 55: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

5.3 上传镜像

很多源都有为 OpenStack 已经编译好的各种镜像了,可以从 OpenStack 官网链接

获取:http://docs.openstack.org/image-guide/obtain-images.html

选择“系统”“镜像”,点击“创建镜像”,下图是上传的 FortiGate KVM

镜像,获取地址:https://support.fortinet.com/Download/FirmwareImages.aspx

架构:镜像架构。例如,使用 i686 作为 32 位架构或使用 x86_64 作为 64 位架构

最小磁盘:引导镜像所需的最小磁盘大小。如果没有指定,默认值是 0(没有最小磁盘大小的限制)

最低内存:引导镜像所需的最低内存大小。如果没有指定,默认值是 0(没有最低内存大小的限制)

公有:如果选择这个选项,这个镜像对所有可以访问这个项目的用户有效

受保护的:如果选择了这个选项,只有具有特定权限的用户可以删除这个镜像

Page 56: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

5.4 创建云主机类型

选择“系统”“云主机类型”,点击“创建云主机类型”,根据 ForitGate KVM

License 的要求创建对应的云主机类型。

Page 57: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

5.5 创建公网网络

选择“管理员”“网络”,点击“创建网络”,只能用 admin 用户创建公共

网络,而其他租户共享 admin 创建的公共网络。

供应商网络类型中的选项:

Local:通讯数据被限制在本地 Compute 主机上,它和外部网络完全隔离

Flat:通讯数据被限制在一个单独的网络中,并可以和其它主机共享,没有 VLANtagging 或其它网络分离的功

VLAN:使用代表了物理网络中的一个 VLAN 的 VLAN ID 来创建网络,这可以使实例和处于相同 2 层 VLAN 中的系

统进行交流

GRE:使用 GRE 网络为实例间提供租户网络通讯

VXLAN:使用 VXLAN 网络为实例间提供租户网络通讯

物理网络:在网络节点定义的网络名称 external,实现虚拟网络到物理网路的映射

共享的:可以与其他租户一起使用

外部网络:只有勾选后,才能分配浮动 IP 给实例,外部网络才能通访问此实例

Page 58: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

选择“项目”“网络”“网络”,在 external-net“编辑网络”旁的下拉选

项中,点击“增加子网”。

Page 59: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

5.6 创建租户网络

以 demo 用户登录,选择“项目”“网络”“网络”,点击“创建网络”,

为 demo 项目创建一个 internal-net 内部网络。

Page 60: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

5.7 权限和安全配置

在创建服务器实例之前,你需要在该实例上添加安全组规则,这样服务器实例

的用户才能 ping 这个主机或者通过 SSH 连接这个实例。安全组是 IP 过滤的规则组,

它决定了网络的连通性,适用于一个 Project 内的所有实例。配置安全组有两种方式:

要么是在默认的安全组中添加规则,要么新建一个安全组,然后把规则写在新的安

全组里,这里直接在默认安全组里添加。

选择“项目”“计算”“访问&安全”“安全组”,在 default 策略中点

击“管理规则”,添加允许 ICMP 和 SSH 访问两条策略。

Page 61: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

密钥对是 SSH 的证书,在实例启动时被注入进系统里。如果要使用密钥对注入,

镜像中的系统上必须安装了 cloud-init 包。一对密钥只属于一个独立的用户,而不属

于 Project。如果想让多个用户都用同一个密钥对的话,需要让每个用户都导入一次

才可以。

选择“访问&安全”“密钥对”,点击“创建密钥对”为实例创建密钥对。

在 OpenStack 中创建实例时,OpenStack 会在可用的 IP 段中分配一个固定 IP 给

这个实例。在这个实例的整个生命周期里,这个 IP 都和它相关联,只有删掉这个实

例后这个 IP 才被释放。固定 IP 相当于私网 IP,如果要外部网络能够访问实例,需

要给实例关联浮动 IP,浮动 IP 可以在无视实例状态的情况下随时被关联到一个不

同的实例上。

选择“访问&安全”“浮动 IP”,点击“分配 IP 给项目”,再打开的对话框

中选择“浮动 IP 地址池”,分配浮动 IP。

Page 62: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

5.8 创建一个 centos 7 实例

选择“项目”“计算”“云主机”,点击“创建云主机”

可用域:域(zone)就是可以放置您的实例的、包括云资源的逻辑组,如果您不能确定您的选择,使用默

认域

网络:已选择的网络需要最少指定一个网络。一般情况下,实例会被分配一个私有网络,可以获取一个固

定 IP,如果外网需要访问实例,再分配一个浮动 IP 地址用于外部连接

安全组:安全组包括了防火墙规则来对实例的网络流量进行过滤,不选择默认会关联 default 策略。可以

通过命令行将端口安全 port-security 关闭,在创建 FortiGate KVM 实例时介绍

密钥对:指定的密钥对会被植入到实例中,并在使用 SSH 远程访问实例时使用它们。通常情况下,每个

项目都会创建一个密钥对。如果实例可以使用密码登录可以不关联

自定义脚本:可以提供一组命令或一个脚本文件,当实例被引导后运行它们。例如,使用它们来设置实例

的主机名 ,或设置一个用户密码,可以在脚本数据项中直接输入命令或者指定脚本文件

磁盘分区:在默认情况下,实例只包括一个分区,并可以根据需要自动调整它的大小,也可以选择手工配

置分区

Configuration Drive:如果选择了这个选项,OpenStack 把元数据写到一个只读的配置驱动器中,在引

导时会被附加到实例中(而不是加入到 Compute 的元数据服务中)。在实例被引导后,可以挂载这个驱动器来

查看其中的内容

5.9 创建用户数据文件

创建 fgtinit.txt 文件并添加以下内容,可根据此文件来配置 FortiGate KVM 实例

或者用于 cloud-init,heat 配置时调用。

Page 63: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

config system interface

edit "port1"

set mode dhcp

set allowaccess ping https ssh snmp http

set mtu-override enable

set mtu 1450

next

edit "port2"

set ip 172.16.1.1 255.255.255.0

set allowaccess ping https ssh snmp http

set mtu-override enable

set mtu 1450

next

end

config firewall policy

edit 1

set name "allow_all"

set srcintf "port2"

set dstintf "port1"

set srcaddr "all"

set dstaddr "all"

set action accept

set schedule "always"

set service "ALL"

set nat enable

next

config system dns

set primary 202.106.0.20

set secondary 114.114.114.114

end

config system global

set hostname kvm_demo

end

Page 64: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

5.10 创建 FortiGate KVM 实例

下面以三种方式创建 ForitGate KVM 实例。与 centos 7 实例不同的是 ForitGate

KVM 实例是租户网络的网关 ,同时连接公共网络,相当于虚拟路由器,为边界网

络提供路由,NAT,安全功能等。

5.10.1 手动创建 FortiGate KVM 实例

FortiGate KVM 虚拟机连接 external-net 和 internal-net 两个网络, 是 internal-net

网络的网关,与之相连的接口 IP 固定为 172.16.1.1/24,在 web 界面启动实例不能固

定接口 IP 地址,因此在命令行下启动实例。

①获取 demo 用户的权限

. demo-openrc

②查看启动实例需要的参数

查看云主机类型

nova flavor-list

查看镜像名称

查看网络 ID

neutron net-list

③启动 FortiGate KVM 实例

nova boot forti-kvm --image kvm_5.4.1 --flavor fortigate_kvm \

--nic net-id=560786f7-14ca-4b9e-ae31-07911861d80d \

--nic net-id=df69141d-4d02-421f-8f60-9cd4fcbc8529,v4-fixed-ip=172.16.1.1

Page 65: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

④关闭防火墙接口的 port-security

查看 FortiGate KVM 使用的端口 ID

neutron port-list

删除接口的安全策略,默认自动添加 default 策略

neutron port-update --no-security-groups c0485428-e2d9-4901-b34d-2d60a37cdc45

关闭端口 port-security(此命令只有 admin 权限可以配置)

neutron port-update c0485428-e2d9-4901-b34d-2d60a37cdc45 --port-security-enabled=False

查看端口 port-security 属性,同理删除 FortiGate KVM 其他端口的 port-security

neutron port-show c0485428-e2d9-4901-b34d-2d60a37cdc45

⑤通过控制台配置 FortiGate KVM 实例

根据 fgtinit.txt 文件的内容配置 FortiGate KVM 实例,配置完成后,登录 FortiGate KVM 实例查看接口

IP

⑥将浮动 IP 在 FortiGate KVM 实例进行虚拟 IP 映射并添加策略

Page 66: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

5.10.2 Cloud-init 创建 FortiGate KVM 实例

FortiGate KVM 在 5.4.1 及后续的版本的支持 cloud-init,cloud-init 详细说明请参

考第 6 节 cloud-init 说明。

①启动 FortiGate KVM 实例,--user-data fgtinit.txt 是配置文件,

--file license=FGVM000000067276.lic 是 license 文件

nova boot forti-kvm --config-drive true --image kvm_5.4.1 --flavor fortigate_kvm \

--user-data fgtinit.txt --file license=FGVM000000067276.lic \

--nic net-id=70e9e7a3-5229-4343-aa4a-04206a3b453c \

--nic net-id=df69141d-4d02-421f-8f60-9cd4fcbc8529,v4-fixed-ip=172.16.1.1

②查看 FortiGate KVM 实例启动,已加载 License 和初始化配置

Page 67: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

③按照手动创建时的步骤关闭 FortiGate KVM 端口 port_security

5.10.3 Heat 模板创建 FortiGate KVM 实例

官网模板文档参考:

http://docs.openstack.org/developer/heat/template_guide/index.html

配置文件说明:

heat_template_version 定义 mitaka 模板的版本

parameters 定义的是一组 Key-Value 对,Key 值可自由声明(即 vmimage,

external_net_id),Value 的结构根据声明的 Key 实际类型来定义,type 表示类型,

vmimage 的默认值是镜像的名称,可通过 nova glance-image 查看;external_net_id

和 private_net_id 的默认值是外部网络和内部网络的网络 ID,可通过 neutron net-list

查看;private_port_subnet 默认值是指子网 ID,通过 neutron subnet-list 查看;

private_port_ip 是将 private_port_subnet 子网关联的 IP 固定为 172.16.1.1,可根据环

境更改。

resources 定义具体的资源,fgtvm,external_port,private_port 表示自定义的实

例名称, type: OS::Nova::Server 和 type: OS::Neutron::Port 表示由 OpenStack 提供的

资源类型定义,内部包含了具体的参数以及在parameters声明的Key值通过 resources

节点调用。flavor: fortigate_kvm 表示云主机类型,可通过 nova flavor 查看;get_file:

fgtinit.txt 表示自定义用户数据文件,即之前保存的配置文件;name: FGT_VM_KVM

Page 68: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

表示自定义实例的名称;get_file: FGVM000000067276.lic 表示 FortiGate KVM

License 文件名称,用户数据文件和 license 文件与 fgt-heat.yml 在同一目录下,所以

没有指定文件名路径。# port_security_enabled: False 表示注释项,关闭端口

port-security 只能 admin 用户操作,demo 用户没有权限,因此在启动完成后,用 admin

账户手动关闭。

①创建 fgt-heat.yml 模板文件并添加如下内容

heat_template_version: 2016-04-08

parameters:

vmimage:

type: string

description: Image use to boot a server

default: kvm_5.4.1

external_net_id:

type: string

description: Net ID of the Network connected to router

default: 70e9e7a3-5229-4343-aa4a-04206a3b453c

private_net_id:

type: string

description: Net ID of the private network

default: df69141d-4d02-421f-8f60-9cd4fcbc8529

private_port_subnet:

type: string

description: Subnet ID of the private network port

default: da509e9d-7e60-41bb-8387-fccbbdc63510

private_port_ip:

type: string

description: Fixed IP of the private network port

default: 172.16.1.1

resources:

fgtvm:

type: OS::Nova::Server

properties:

image: { get_param: vmimage }

flavor: fortigate_kvm

user_data:

get_file: fgtinit.txt

name: FGT_VM_KVM

Page 69: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

config_drive: True

user_data_format: RAW

personality: {"license": { get_file: FGVM000000067276.lic }}

networks:

- port: { get_resource: external_port }

- port: { get_resource: private_port }

external_port:

type: OS::Neutron::Port

properties:

network_id: { get_param: external_net_id }

# port_security_enabled: False

private_port:

type: OS::Neutron::Port

properties:

network_id: { get_param: private_net_id }

# port_security_enabled: False

fixed_ips:

- subnet_id: { get_param: private_port_subnet }

ip_address: { get_param: private_port_ip }

outputs:

fgtvm_external_ip:

description: IP address of the FGT in the external network

value: { get_attr: [ fgtvm, first_address ] }

②修改完成后,指定 heat stack-create 命令

heat stack-create demo -f fgt-heat.yml

③查看 FortiGate KVM 实例启动,已加载 License 和初始化配置

Page 70: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

④按照手动创建时的步骤关闭 FortiGate KVM 端口 port_security

5.11 登录 centos 7 实例

部署完成后,选择“项目”“网络”“网络拓扑”,查看当前部署的网

络拓扑。

centos 7 镜像默认是无法使用密码登陆,只能使用密钥登陆。所以在 console,

也无法登陆到虚拟机,默认的用户名是 centos。下面以两种方式登录实例。

5.11.1 密钥对方式

在启动实例时,注入密钥对

Page 71: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

使用 Xshell SSH 连接浮动 IP 200.0.1.13(此浮动 IP 已通过 FortiGate KVM 实例

的 VIP 策略映射到 centos 7 实例的固定 IP),导入下载的密钥对 my_key.pem 登陆

实例

登陆成功后使用 sudo passwd 修改 root 的密码

Page 72: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

5.11.2 Cloud-init 方式

在启动虚拟机的时候添加用户脚本,设置 centos 用户的密码,并允许 ssh 使用

密码登录

#!/bin/sh

passwd centos<<EOF

centos

centos

EOF

sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config

systemctl restart sshd

Page 73: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

6 Cloud-init

Cloud-init 官方文档:http://cloudinit.readthedocs.io/en/latest/topics/format.html

Openstack cloud-init:http://docs.openstack.org/user-guide/cli_config_drive.html

6.1 基本概念

Cloud-init:Cloud-Init 是一个用来自动配置虚拟机的初始设置(如主机名,网

卡和密钥)的工具。在使用这个工具前,cloud-init 软件包必须在虚拟机上被安装。

安装后,Cloud-init 服务会在系统启动时搜索如何配置系统的信息。

元数据:在创建虚拟机的时候,用户往往需要对虚拟机进行一些配置,比如:

开启一些服务、安装某些包、添加 SSH 秘钥、配置 hostname 等等。元数据分为

Userdata 和 Metadata,metadata 是 key/value 的方式,重点在提供,比如 IP,安全组

等;而 userdata 多是脚本的方式,重点在配置,比如提供 shell 脚本,设置 root 用

的密码等等。

Config drive:Config drive 机制是指 OpenStack 将 metadata 信息写入虚拟机的

一个特殊的配置设备中,然后在虚拟机启动时,自动挂载并读取 metadata 信息,

从而达到获取 metadata 的目的。在客户端操作系统中,存储 metadata 的设备需要

是 ISO9660 或者 VFAT 文件系统。

6.2 Metadata 获取

使用 Config drive 需要满足以下条件:

宿主机(OpenStack 的计算节点):支持 config drive 机制的 Hypervisors 有:

libvirt、hyper-v 和 VMware。当使用 libvirt 和 VMware 作为 Hypervisor 时(这

里使用的是 libvirt),需要确保宿主机上安装有 genisoimage 程序,并且设置

mkisofs_cmd 标志为 genisoimage 的位置。当使用 hyper-v 作为 Hypervisor 时,

Page 74: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

需要设置 mkisofs_cmd 标志为 mkisofs.exe 的全路径,此外还需要在 hyper-v 的配

置文件中设置 qume_img_cmd 为 qemu-img 命令的路径。

虚拟机镜像:虚拟机镜像需要确保安装了 cloud-init。

①创建虚拟机,--config-drive true 表示在创建虚拟机时使用 config drive 机制,

也可以在/etc/nova/nova.conf 中配置 force_config_drive=true 使得 OpenStack 计算服

务在创建虚拟机时默认使用 config drive 机制。

nova boot demo --config-drive true --image centos7_64 --flavor m1.tiny \

--user-data myscript.sh \

--file /etc/network/interfaces=/home/myuser/instance-interfaces \

--meta role=webservers --meta essential=false \

--nic net-id=df69141d-4d02-421f-8f60-9cd4fcbc8529

②用户可以在虚拟机中查看写入的 metadata 信息

blkid -t LABEL="config-2" –odevice

mkdir -p /mnt/config

mount /dev/vdb /mnt/config

Page 75: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

7 实例数据流

Openstack Mitaka 版本网络部署指南:

http://docs.openstack.org/mitaka/networking-guide/deploy.html

①brctl show 查看 Compute 节点网桥设备,TAP 设备、物理网卡等与网桥连接,

brq70e9e7a3-52 表示图中 brq1,brqdf69141d-4d 表示图中 brq2。TAP 是一个虚拟网

络内核驱动,该驱动实现 Ethernet 设备,并在 Ethernet 框架级别操作。TAP 驱动提

供了 Ethernet“tap”,访问 Ethernet 框架能够通过它进行通信。

②centos 7 实例访问物理网络(Physical Network),通过 arp 请求查看网关

FortiGate KVM 实例的 MAC 地址。首先将数据流交给 tap551872b1-5c,即图中 tap1

设备,通过 ifconfig 命令查看 centos 7 实例和 tap551872b1-5c 的 MAC 地址,可以

看出实例与 tap551872b1-5c 连接。

Page 76: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

③在 brq70e9e7a3-52 网桥上,通过 iptables 规则检查(即启动 OpenStack 实例中

配置的安全访问规则),检查通过后转发给 tap989dfc55-19,即图中 tap2 设备,通

过命令查看 tap989dfc55-19 和 FortiGate KVM 实例 port2 接口的 MAC 地址,可以看

出 FortiGate KVM 实例与 tap989dfc55-19 连接。

④FortiGate KVM 实例收到数据包,再根据 FortiGate KVM 实例的配置执行

NAT,安全防护策略等。再通过查询路由,数据流由 port1 接口转发出去。

Page 77: Openstack 部署 FortiGate VM · service, Identity service, Networking service, Image service, Block Storage service, Object Storage service, Telemetry service, Orchestration service

Openstack部署FortiGate VM

⑤同理查看 port1 与 tapfd9732f2-3b 连接,即图中 tap3 设备。tapfd9732f2-3b 与

eno83887104 即图中物理接口 eth2,都连接在网桥 brq70e9e7a3-52 上,最终交由物

理网卡转发给 External Network。