Contents

OpenStack 安装

Contents

前置知识

OpenStack 架构简介

OpenStack 是一个开源的云计算管理平台,由多个核心服务组件构成,每个组件负责特定功能:

组件 功能说明
Keystone 身份认证与授权服务,所有组件的访问入口
Glance 镜像服务,管理虚拟机镜像
Placement 资源分配追踪,管理资源池
Nova 计算服务,调度和管理虚拟机实例
Neutron 网络服务,提供虚拟网络功能
Horizon Web 管理界面,提供图形化操作

各组件之间通过消息队列(RabbitMQ)、数据库(MariaDB)和缓存(Memcached)进行通信协作。


参考资料


第一章:环境准备

1.1 基础环境配置

设置 root 密码并禁用防火墙:

1
2
sudo passwd root
sudo ufw disable

1.2 软件源配置

将系统软件源更换为腾讯云镜像,加速后续安装:

1
sudo vi /etc/apt/sources.list
1
2
3
4
5
6
7
# 替换为以下内容
deb http://mirrors.tencentyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.tencentyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.tencentyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.tencentyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.tencentyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.tencentyun.com/ubuntu/ focal-updates main restricted universe multiverse

更新软件包列表并升级:

1
2
sudo apt update
sudo apt upgrade

1.3 网络配置

开启 IP 转发

编辑 sysctl 配置文件:

1
sudo vi /etc/sysctl.conf

取消注释或添加以下内容(开启路由转发功能):

1
net.ipv4.ip_forward = 1

使配置生效:

1
sudo sysctl -p

配置静态 IP

1
sudo vi /etc/network/interfaces
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
auto lo
iface lo inet loopback

# 主网络接口
auto eth0
iface eth0 inet static
address 10.0.24.13
network 10.0.24.0
netmask 255.255.255.0
broadcast 10.0.24.255
gateway 10.0.24.1

配置完成后,验证网络连通性:

1
ping baidu.com

1.4 主机名与 hosts 文件配置

注意:使用内网 IP 进行主机名映射

修改主机名

将主机名设置为 controller,表明该节点作为控制节点:

1
sudo vi /etc/hostname

内容修改为:

1
controller

配置 hosts 文件

1
sudo vi /etc/hosts
  1. 注释掉 127.0.1.1 那一行
  2. 127.0.0.1 localhost 后添加 controller
  3. 新增一行:10.0.24.13 controller

配置完成后重启系统:

1
reboot

1.5 时间同步服务

OpenStack 集群内各节点的时间必须保持一致,否则会导致认证失败等问题。

安装并配置 Chrony

1
2
sudo apt install chrony
sudo vi /etc/chrony/chrony.conf

修改配置文件,注释掉原有的 pool 配置,添加以下内容:

1
2
3
4
5
6
# 时间服务器配置
server controller iburst
allow 0.0.0.0/0

# 允许本机作为时间源供其他节点使用
local stratum 10

重启服务使配置生效:

1
sudo service chrony restart

验证配置

1
2
3
4
5
6
7
# 方式一:查看时间源状态
chronyc sources
# 若显示 ^*,表示已同步成功;显示 ? 表示连接异常

# 方式二:查看时间同步状态
timedatectl
# System clock synchronized 应显示 yes

设置系统时区

1
2
3
sudo dpkg-reconfigure tzdata   # 选择亚洲 / 上海
sudo apt-get install ntpdate
sudo ntpdate cn.pool.ntp.org

1.6 OpenStack 依赖服务安装

添加 OpenStack 仓库

1
2
sudo add-apt-repository cloud-archive:yoga
sudo apt install python3-openstackclient python3-pip

1.6.1 数据库服务(MariaDB)

OpenStack 各服务使用数据库存储配置和运行时数据。

1
2
sudo apt install python3-pymysql
sudo apt install mariadb-server

创建数据库配置文件:

1
sudo vi /etc/mysql/mariadb.conf.d/99-openstack.cnf
1
2
3
4
5
6
7
[mysqld]
bind-address = 10.0.24.13
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

启动并安全配置数据库:

1
2
sudo service mysql restart
sudo mysql_secure_installation

1.6.2 消息队列服务(RabbitMQ)

OpenStack 组件之间通过消息队列进行异步通信。

1
sudo apt install rabbitmq-server

创建 OpenStack 用户并授权:

1
2
3
4
5
# 创建用户:用户名为 openstack,密码为 admin
sudo rabbitmqctl add_user openstack admin

# 授予全部权限
sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*"

RabbitMQ 配置文件目录:/usr/lib/rabbitmq/lib/rabbitmq_server-3.8.2/sbin

1.6.3 缓存服务(Memcached)

用于缓存令牌和会话数据,提升认证性能。

1
sudo apt install memcached python3-memcache -y

修改配置文件,将监听地址改为 controller 的 IP:

1
2
3
4
sudo vi /etc/memcached.conf
# 将 127.0.0.1 替换为 controller 对应的 IP 地址

sudo service memcached restart

1.6.4 分布式存储服务(etcd)

用于存储 OpenStack 服务的配置信息和发现服务。

1
2
sudo apt install etcd -y
sudo vi /etc/default/etcd
1
2
3
4
5
6
7
8
9
ETCD_NAME="controller"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER="controller=http://10.0.24.13:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.24.13:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.24.13:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.24.13:2379"

启用并启动服务:

1
2
systemctl enable etcd
systemctl restart etcd

第二章:OpenStack 核心组件安装

2.1 Keystone(身份认证服务)

Keystone 是 OpenStack 的核心组件,负责用户认证、授权和服务发现。

创建数据库和用户

1
mysql -uroot -p
1
2
3
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'admin';

注意:IDENTIFIED BY 'admin' 用于设置 MySQL 中 keystone 用户的密码为 admin

安装并配置 Keystone

1
sudo apt install keystone

安装 crudini 工具,便于修改配置文件:

1
2
3
sudo apt install git
sudo git clone https://github.com/pixelb/crudini
cd crudini && sudo python3 setup.py install

配置 Keystone:

1
2
3
4
5
# 使用 crudini 设置数据库连接
crudini --set /etc/keystone/keystone.conf database connection "mysql+pymysql://keystone:admin@controller/keystone"

# 设置令牌提供者为 fernet(轻量级令牌加密)
crudini --set /etc/keystone/keystone.conf token provider fernet

初始化数据库

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

初始化密钥仓库

1
2
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

创建管理员用户

1
2
3
4
5
keystone-manage bootstrap --bootstrap-password admin \
  --bootstrap-admin-url http://controller:5000/v3/ \
  --bootstrap-internal-url http://controller:5000/v3/ \
  --bootstrap-public-url http://controller:5000/v3/ \
  --bootstrap-region-id RegionOne

配置 Apache HTTP Server

Keystone 通过 Apache 提供 Web 服务:

1
2
3
4
5
sudo vi /etc/apache2/apache2.conf
# 添加以下内容
ServerName controller

sudo service apache2 restart

创建环境变量文件

为方便后续操作,创建包含认证信息的环境变量文件:

1
vi adminrc_keystone
1
2
3
4
5
6
7
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3

加载环境变量:

1
source adminrc_keystone

创建项目和服务

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 创建服务项目(用于运行系统级服务)
openstack project create --domain default --description "Service Project" service

# 创建演示项目(用于普通用户测试)
openstack project create --domain default --description "Demo Project" demo

# 创建演示用户
openstack user create --domain default --password demo demo

# 创建角色并分配
openstack role create role_demo
openstack role add --project demo --user demo role_demo

验证 Keystone

1
2
openstack token issue
# 若返回令牌信息,表示配置成功

2.2 Glance(镜像服务)

Glance 负责管理虚拟机镜像,支持多种镜像格式(qcow2、raw、vhd 等)。

创建数据库和用户

1
2
3
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'admin';

创建 OpenStack 用户和服务

1
2
3
4
5
6
7
8
openstack user create --domain default --password admin glance
openstack role add --project service --user glance admin
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

安装并配置 Glance

1
2
apt install glance -y
sudo vi /etc/glance/glance-api.conf

主要配置项说明:

配置区块 参数 说明
database connection 数据库连接字符串
glance_store stores 支持的存储后端(file/http)
glance_store default_store 默认存储后端
glance_store filesystem_store_datadir 镜像存储路径
keystone_authtoken - Keystone 认证配置
paste_deploy flavor 使用 keystone 认证

完整配置示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# 数据库配置(第 1746 行附近)
crudini --set /etc/glance/glance-api.conf database connection "mysql+pymysql://glance:admin@controller/glance"

# 存储配置(第 3141 行附近)
crudini --set /etc/glance/glance-api.conf glance_store stores "file,http"
crudini --set /etc/glance/glance-api.conf glance_store default_store "file"
crudini --set /etc/glance/glance-api.conf glance_store filesystem_store_datadir "/var/lib/glance/images/"

# 认证配置(第 4970 行附近)
crudini --set /etc/glance/glance-api.conf keystone_authtoken www_authenticate_uri "http://controller:5000"
crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_url "http://controller:5000"
crudini --set /etc/glance/glance-api.conf keystone_authtoken memcached_servers "controller:11211"
crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_type "password"
crudini --set /etc/glance/glance-api.conf keystone_authtoken project_domain_name "Default"
crudini --set /etc/glance/glance-api.conf keystone_authtoken user_domain_name "Default"
crudini --set /etc/glance/glance-api.conf keystone_authtoken project_name "service"
crudini --set /etc/glance/glance-api.conf keystone_authtoken username "glance"
crudini --set /etc/glance/glance-api.conf keystone_authtoken password "admin"

# 部署配置(第 5685 行附近)
crudini --set /etc/glance/glance-api.conf paste_deploy flavor "keystone"

初始化数据库并授权

1
2
3
4
5
6
7
8
# 授予 glance 用户系统读取权限
openstack role add --user glance --user-domain Default --system all reader

# 同步数据库
su -s /bin/sh -c "glance-manage db_sync" glance

# 重启服务
service glance-api restart

上传测试镜像

1
2
3
4
5
6
7
8
9
# 下载 CirrOS 测试镜像(轻量级 Linux 发行版,适合测试)
wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img

# 上传镜像到 Glance
glance image-create --name "cirros" \
  --file cirros-0.4.0-x86_64-disk.img \
  --disk-format qcow2 \
  --container-format bare \
  --visibility=public

验证 Glance

1
2
3
openstack image list
# 或
glance image-list

2.3 Placement(资源追踪服务)

Placement 负责跟踪资源提供者的库存和使用情况,是 Nova 与其他组件交互的桥梁。

创建数据库和用户

1
2
3
CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'admin';

创建 OpenStack 用户和服务

1
2
3
4
5
6
7
openstack user create --domain default --password admin placement
openstack role add --project service --user placement admin
openstack service create --name placement --description "Placement API" placement

openstack endpoint create --region RegionOne placement public http://controller:8778
openstack endpoint create --region RegionOne placement internal http://controller:8778
openstack endpoint create --region RegionOne placement admin http://controller:8778

安装并配置 Placement

1
apt install placement-api
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# 数据库配置
crudini --set /etc/placement/placement.conf placement_database connection "mysql+pymysql://placement:admin@controller/placement"

# API 认证策略
crudini --set /etc/placement/placement.conf api auth_strategy "keystone"

# Keystone 认证配置
crudini --set /etc/placement/placement.conf keystone_authtoken auth_url "http://controller:5000/v3"
crudini --set /etc/placement/placement.conf keystone_authtoken memcached_servers "controller:11211"
crudini --set /etc/placement/placement.conf keystone_authtoken auth_type "password"
crudini --set /etc/placement/placement.conf keystone_authtoken project_domain_name "Default"
crudini --set /etc/placement/placement.conf keystone_authtoken user_domain_name "Default"
crudini --set /etc/placement/placement.conf keystone_authtoken project_name "service"
crudini --set /etc/placement/placement.conf keystone_authtoken username "placement"
crudini --set /etc/placement/placement.conf keystone_authtoken password "admin"

初始化数据库

1
2
su -s /bin/sh -c "placement-manage db sync" placement
service apache2 restart

验证配置

1
2
placement-status upgrade check
pip3 install osc-placement

2.4 Nova(计算服务)

Nova 是 OpenStack 的核心组件,负责创建、管理和销毁虚拟机实例。

由于采用 all-in-one 模式,控制节点和计算节点的配置会分别说明。

创建数据库和用户

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'admin';

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

GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'admin';

创建 OpenStack 用户和服务

1
2
3
4
5
6
7
openstack user create --domain default --password admin nova
openstack role add --project service --user nova admin
openstack service create --name nova --description "OpenStack Compute" compute

openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1
openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1

控制节点配置

安装 Nova 控制组件
1
apt install nova-api nova-conductor nova-novncproxy nova-scheduler
配置 nova.conf

主要配置区块说明:

配置区块 参数 说明
api_database connection Nova API 数据库连接
database connection Nova 主数据库连接
DEFAULT transport_url 消息队列连接
DEFAULT my_ip 本机管理 IP
vnc enabled 启用 VNC 远程访问
vnc server_listen VNC 监听地址
vnc server_proxyclient_address 代理客户端地址
glance api_servers Glance 服务地址
oslo_concurrency lock_path 锁文件路径
placement - Placement 服务配置

配置示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 数据库配置
crudini --set /etc/nova/nova.conf api_database connection "mysql+pymysql://nova:admin@controller/nova_api"
crudini --set /etc/nova/nova.conf database connection "mysql+pymysql://nova:admin@controller/nova"

# 消息队列配置
crudini --set /etc/nova/nova.conf DEFAULT transport_url "rabbit://openstack:admin@controller:5672/"

# API 认证配置
crudini --set /etc/nova/nova.conf api auth_strategy "keystone"

# Keystone 认证配置
crudini --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri "http://controller:5000/"
crudini --set /etc/nova/nova.conf keystone_authtoken auth_url "http://controller:5000/"
crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers "controller:11211"
crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password
crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken project_name service
crudini --set /etc/nova/nova.conf keystone_authtoken username nova
crudini --set /etc/nova/nova.conf keystone_authtoken password admin

# 本机 IP 配置
crudini --set /etc/nova/nova.conf DEFAULT my_ip 10.0.24.13

# VNC 配置
crudini --set /etc/nova/nova.conf vnc enabled true
crudini --set /etc/nova/nova.conf vnc my_ip 10.0.24.13

# Glance 配置
crudini --set /etc/nova/nova.conf glance api_servers "http://controller:9292"

# 锁路径配置
crudini --set /etc/nova/nova.conf oslo_concurrency lock_path "/var/lib/nova/tmp"

# Placement 配置
crudini --set /etc/nova/nova.conf placement region_name RegionOne
crudini --set /etc/nova/nova.conf placement project_domain_name Default
crudini --set /etc/nova/nova.conf placement project_name service
crudini --set /etc/nova/nova.conf placement auth_type password
crudini --set /etc/nova/nova.conf placement user_domain_name Default
crudini --set /etc/nova/nova.conf placement auth_url "http://controller:5000/v3"
crudini --set /etc/nova/nova.conf placement username placement
crudini --set /etc/nova/nova.conf placement password admin
初始化数据库
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 同步 API 数据库
su -s /bin/sh -c "nova-manage api_db sync" nova

# 注册 cell0 数据库(记录 cell1 之外的计算节点)
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova

# 创建 cell1(本地 cell)
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova

# 同步主数据库
su -s /bin/sh -c "nova-manage db sync" nova

# 验证 cell 注册
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
启动控制节点服务
1
2
3
4
service nova-api restart
service nova-scheduler restart
service nova-conductor restart
service nova-novncproxy restart

计算节点配置

安装 Nova 计算组件
1
apt install nova-compute
配置 nova.conf

计算节点与控制节点配置的主要区别在于 VNC 设置(需要监听所有地址)和 novncproxy 地址:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 消息队列和认证配置
crudini --set /etc/nova/nova.conf DEFAULT transport_url "rabbit://openstack:admin@controller"
crudini --set /etc/nova/nova.conf api auth_strategy keystone

# Keystone 认证配置
crudini --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri "http://controller:5000/"
crudini --set /etc/nova/nova.conf keystone_authtoken auth_url "http://controller:5000/"
crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers "controller:11211"
crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password
crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken project_name service
crudini --set /etc/nova/nova.conf keystone_authtoken username nova
crudini --set /etc/nova/nova.conf keystone_authtoken password admin

# 本机 IP 和 VNC 配置
crudini --set /etc/nova/nova.conf DEFAULT my_ip 10.0.24.13
crudini --set /etc/nova/nova.conf vnc enabled true
crudini --set /etc/nova/nova.conf vnc server_listen "0.0.0.0"
crudini --set /etc/nova/nova.conf vnc server_proxyclient_address 10.0.24.13
crudini --set /etc/nova/nova.conf vnc novncproxy_base_url "http://controller:6080/vnc_auto.html"

# Glance 和锁路径配置
crudini --set /etc/nova/nova.conf glance api_servers "http://controller:9292"
crudini --set /etc/nova/nova.conf oslo_concurrency lock_path "/var/lib/nova/tmp"

# Placement 配置
crudini --set /etc/nova/nova.conf placement region_name RegionOne
crudini --set /etc/nova/nova.conf placement project_domain_name Default
crudini --set /etc/nova/nova.conf placement project_name service
crudini --set /etc/nova/nova.conf placement auth_type password
crudini --set /etc/nova/nova.conf placement user_domain_name Default
crudini --set /etc/nova/nova.conf placement auth_url "http://controller:5000/v3"
crudini --set /etc/nova/nova.conf placement username placement
crudini --set /etc/nova/nova.conf placement password admin

# 虚拟化类型配置(all-in-one 模式使用 qemu)
crudini --set /etc/nova/nova-compute.conf libirt virt_type qemu

# 启动服务
service nova-compute restart

2.5 Neutron(网络服务)

Neutron 为 OpenStack 提供虚拟网络功能,支持多种网络类型和插件。

创建数据库和用户

1
2
3
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'admin';

创建 OpenStack 用户和服务

1
2
3
4
5
6
7
openstack user create --domain default --password admin neutron
openstack role add --project service --user neutron admin
openstack service create --name neutron --description "OpenStack Networking" network

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

控制节点配置

安装 Neutron 组件

本配置采用自服务网络模式(Provider Network),使用 Linux Bridge 作为 ML2 驱动:

1
apt install neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent
配置 neutron.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 数据库配置
crudini --set /etc/neutron/neutron.conf database connection "mysql+pymysql://neutron:admin@controller/neutron"

# 核心插件和服务插件配置
crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2
crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins router
crudini --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips true

# 消息队列配置
crudini --set /etc/neutron/neutron.conf DEFAULT transport_url "rabbit://openstack:admin@controller"

# 认证策略
crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone

# Nova 通知配置(端口状态变化通知)
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes true
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes true

# Keystone 认证配置
crudini --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri "http://controller:5000"
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url "http://controller:5000"
crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers "controller:11211"
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name Default
crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name Default
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name service
crudini --set /etc/neutron/neutron.conf keystone_authtoken username neutron
crudini --set /etc/neutron/neutron.conf keystone_authtoken password admin

# Nova 配置
crudini --set /etc/neutron/neutron.conf nova auth_url "http://controller:5000"
crudini --set /etc/neutron/neutron.conf nova auth_type password
crudini --set /etc/neutron/neutron.conf nova project_domain_name Default
crudini --set /etc/neutron/neutron.conf nova user_domain_name Default
crudini --set /etc/neutron/neutron.conf nova region_name RegionOne
crudini --set /etc/neutron/neutron.conf nova project_name service
crudini --set /etc/neutron/neutron.conf nova username nova
crudini --set /etc/neutron/neutron.conf nova password admin

# 锁路径配置
crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path "/var/lib/neutron/tmp"
配置 ML2 插件(ml2_conf.ini)

ML2(Modular Layer 2)是 Neutron 的核心插件,支持多种网络类型:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# ML2 核心配置
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers "flat,vlan,vxlan"
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types vxlan
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers "linuxbridge,l2population"
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security

# 扁平网络配置
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_flat flat_networks provider

# VXLAN 配置(定义 VNI 范围 1-1000)
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_vxlan vni_ranges "1:1000"

# 安全组配置
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset true
配置 Linux Bridge Agent(linuxbridge_agent.ini)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 物理网络接口映射(provider 网络使用 eth0)
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings "provider:eth0"

# VXLAN 配置
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan true
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan local_ip 10.0.24.13
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan l2_population true

# 安全组配置
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group true
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver "neutron.agent.linux.iptables_firewall.IptablesFirewallDriver"

注意:physical_interface_mappings 中的接口名(eth0)需要根据实际情况修改,可使用 ifconfig 命令查看。

配置 L3 Agent(l3_agent.ini)
1
crudini --set /etc/neutron/l3_agent.ini DEFAULT interface_driver linuxbridge
配置 DHCP Agent(dhcp_agent.ini)
1
2
3
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver linuxbridge
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT dhcp_driver "neutron.agent.linux.dhcp.Dnsmasq"
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata true
配置 Metadata Agent(metadata_agent.ini)
1
2
crudini --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_host controller
crudini --set /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret 123456
配置 Nova 使用 Neutron
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
crudini --set /etc/nova/nova.conf neutron auth_url "http://controller:5000"
crudini --set /etc/nova/nova.conf neutron auth_type password
crudini --set /etc/nova/nova.conf neutron project_domain_name Default
crudini --set /etc/nova/nova.conf neutron user_domain_name Default
crudini --set /etc/nova/nova.conf neutron region_name RegionOne
crudini --set /etc/nova/nova.conf neutron project_name service
crudini --set /etc/nova/nova.conf neutron username neutron
crudini --set /etc/nova/nova.conf neutron password admin
crudini --set /etc/nova/nova.conf neutron service_metadata_proxy true
crudini --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret 123456
初始化数据库并启动服务
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 同步数据库(需要指定插件配置文件)
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

# 重启 Nova API 服务
service nova-api restart

# 启动 Neutron 相关服务
service neutron-server restart
service neutron-linuxbridge-agent restart
service neutron-dhcp-agent restart
service neutron-metadata-agent restart
service neutron-l3-agent restart

计算节点配置

安装 Neutron 计算组件
1
apt install neutron-linuxbridge-agent
配置 neutron.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 消息队列和认证配置
crudini --set /etc/neutron/neutron.conf DEFAULT transport_url "rabbit://openstack:admin@controller"
crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone

# Keystone 认证配置
crudini --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri "http://controller:5000"
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url "http://controller:5000"
crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers "controller:11211"
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name Default
crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name Default
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name service
crudini --set /etc/neutron/neutron.conf keystone_authtoken username neutron
crudini --set /etc/neutron/neutron.conf keystone_authtoken password admin

# 锁路径配置
crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path "/var/lib/neutron/tmp"
配置 Linux Bridge Agent
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 物理网络接口映射(根据实际情况修改接口名)
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings "provider:eth0"

# VXLAN 配置
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan true
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan local_ip 10.0.24.13
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan l2_population true

# 安全组配置
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group true
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver "neutron.agent.linux.iptables_firewall.IptablesFirewallDriver"
配置 Nova 使用 Neutron
1
2
3
4
5
6
7
8
crudini --set /etc/nova/nova.conf neutron auth_url "http://controller:5000"
crudini --set /etc/nova/nova.conf neutron auth_type password
crudini --set /etc/nova/nova.conf neutron project_domain_name Default
crudini --set /etc/nova/nova.conf neutron user_domain_name Default
crudini --set /etc/nova/nova.conf neutron region_name RegionOne
crudini --set /etc/nova/nova.conf neutron project_name service
crudini --set /etc/nova/nova.conf neutron username neutron
crudini --set /etc/nova/nova.conf neutron password admin
启动服务
1
2
service nova-compute restart
service neutron-linuxbridge-agent restart

验证 Neutron

1
2
openstack extension list --network
openstack network agent list

2.6 Horizon(Web 管理界面)

Horizon 提供基于 Django 的图形化 Web 界面,用于管理 OpenStack 资源。

安装 Horizon

1
2
apt install openstack-dashboard
sudo vi /etc/openstack-dashboard/local_settings.py

关键配置说明

配置项 说明
OPENSTACK_HOST controller Keystone 服务地址
ALLOWED_HOSTS [’*'] 允许访问的主机(生产环境应限制)
SESSION_ENGINE django.contrib.sessions.backends.cache 会话存储后端
CACHES memcached 缓存配置
TIME_ZONE Asia/Shanghai 时区设置

配置示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# OpenStack 服务地址(第 126 行)
OPENSTACK_HOST = "controller"

# 允许访问的主机(第 399 行)
ALLOWED_HOSTS = ['*']

# 会话引擎配置(第 112 行)
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

# 缓存配置
CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
         'LOCATION': 'controller:11211',
    }
}

# Keystone URL
OPENSTACK_KEYSTONE_URL = "http://%s:5000" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True

# API 版本配置
OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 3,
}

# 域和角色默认配置
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "member"

# Neutron 网络配置(简化配置)
OPENSTACK_NEUTRON_NETWORK = {
    ...
    'enable_router': False,
    'enable_quotas': False,
    'enable_ipv6': False,
    'enable_distributed_router': False,
    'enable_ha_router': False,
    'enable_fip_topology_check': False,
}

# 时区配置
TIME_ZONE = "Asia/Shanghai"

验证安装

1
2
3
4
5
6
7
# 检查 Nova 升级状态
nova-status upgrade check

# 访问 Horizon
# 浏览器打开 http://<IP地址>/horizon
# 登录账号:admin
# 登录密码:admin(来自 adminrc_keystone 文件中的 OS_PASSWORD)

第三章:常见问题与解决方案

3.1 网络接口未激活

问题:执行 ifconfig 命令后看不到网络接口(如 ens33)。

原因:接口存在但处于 DOWN 状态。

解决

1
2
# 启用 DHCP 客户端获取 IP
sudo /sbin/dhclient

参考链接:CSDN - ifconfig 无网络接口

3.2 Placement 资源提供者创建失败

问题:日志中报错 Failed to create resource provider controller

排查步骤

1
2
3
SHOW databases;
USE nova-api;
SELECT * FROM resource_provider;

原因:数据库中 resource_provider 表为空,说明 Placement 服务未成功写入数据。

解决:检查 Placement 配置文件中的认证信息是否正确。

参考链接:CSDN - resource provider 问题

3.3 RabbitMQ 连接失败

问题:消息队列无法正常连接。

解决

  1. 检查 /etc/hosts 配置:

    • 127.0.0.1 行后需添加主机名
    • 注释掉 127.0.1.1
  2. 重启 RabbitMQ 服务:

1
2
sudo systemctl restart rabbitmq.server
sudo systemctl status rabbitmq.server

参考链接:

3.4 Dashboard 登录失败

问题:Horizon 显示 invalid credentials 认证失败。

解决:检查 /etc/openstack-dashboard/local_settings.py 中的端口号配置是否正确。

参考链接:CSDN - Dashboard 登录问题

3.5 创建 Flavor(实例规格)

Flavor 定义了虚拟机的资源规格(CPU、内存、磁盘等):

1
2
3
4
5
6
7
8
9
# 查看已有 flavor
nova flavor-list

# 创建 flavor
nova flavor-create --is-public true boshen_ram_1024_disk_1_vcpus_1 boshen_ram_1024_disk_1_vcpus_1 1024 1 1
# 参数说明:名称 ID 内存(MB) 磁盘(GB) vCPU数

# 删除 flavor
nova flavor-delete {name}

3.6 用户和服务管理

1
2
3
4
5
6
7
# 用户管理
openstack user list
openstack user delete <username>

# 服务管理
openstack service list
openstack service delete <service_id>

3.7 VNC 控制台灰屏

问题:通过 VNC 连接虚拟机时显示灰色屏幕。

解决:安装 GNOME 桌面环境并配置 VNC 服务器:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 切换到 root
sudo -i

# 安装桌面环境
sudo apt update
sudo apt install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal ubuntu-desktop
sudo apt-get install tightvncserver

# 启动 VNC 服务器
sudo vncserver

# 配置 xstartup
sudo vi ~/.vnc/xstartup

编辑 ~/.vnc/xstartup 文件:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#!/bin/bash
export $(dbus-launch)
export XKL_XMODMAP_DISABLE=1
unset SESSION_MANAGER

gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
gnome-session &

xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
gnome-session &

VNCSERVERS="2:root"
VNCSERVERARGS[1]="-GEOMETRY 800x600"

重启 VNC 会话:

1
2
3
4
5
# 关闭现有会话
sudo vncserver -kill :1

# 启动新会话
sudo vncserver -geometry 1920x1080 :1

客户端下载:RealVNC Viewer

参考链接:CSDN - VNC 灰屏问题


第四章:后续学习与进阶

拓展与后续学习建议

恭喜完成 OpenStack all-in-one 模式的基本安装。以下是进一步学习的方向:

1. 生产环境部署

  • 使用 Kolla-Ansible 进行容器化部署
  • 使用 OpenStack Charms(基于 Juju)进行大规模集群部署
  • 了解高可用(HA)架构设计

2. 高级网络功能

  • 深入学习 Neutron 的 VLAN、VXLAN、GRE 隧道技术
  • 理解 SDN(软件定义网络)与 OpenStack 的结合
  • 配置负载均衡即服务(Octavia)

3. 存储服务

  • 学习 Cinder(块存储服务)的配置
  • 了解 Swift(对象存储服务)的原理和部署
  • 探索 Ceph 与 OpenStack 的集成

4. 运维监控

  • 部署 OpenStack 的监控组件(如 Ceilometer、Monasca)
  • 集成 Prometheus 和 Grafana 进行可视化监控
  • 学习日志管理(如 ELK Stack)

5. 安全加固

  • 了解 OpenStack 安全最佳实践
  • 配置 TLS/SSL 加密通信
  • 学习基于角色的访问控制(RBAC)精细化配置

6. 官方文档