一、硬件服务器
- 名称:Sugon CB60-G10/15
- CPU :12个CPU × 2 GHz
- 内存:16G
- 存储器:280G
- 网卡数目:2
- 操作系统:VMware EXSi 5.0.0
二、OpenStack部署规划
硬件需求
这是官网给出的硬件需求。
这个需求是对于需要实际部署一些服务的场景而言的,尤其对于学生党来说,这个硬件需求很难达到,而且如果只是实验性的搭建一个小型OpenStack环境,硬件需求也不用达到这个标准。

图中实线框是不可缺少的核心,虚线框则是可选组件。本文只部署了实线框所示的Controller节点和Compute节点,对于对象存储节点(Object Storage Node)和块存储节点(Block Storage Node)可根据需要,按照本文搭建核心组件后,按照官网的步骤进行新节点部署。
网络模型
官网提供了两种网络模型架构:Provider Network & Self-Service Network
- Provider Network
- 这是OpenStack最为简单的网络架构,主要是提供二层服务(layer-2,以网桥和交换机连接不同网络)和VLAN划分。其本质是将虚拟网络桥接到物理网络,并依靠物理网络基础设施来提供三层服务(layer-3,routing)。
- DHCP服务将向实例提供IP地址信息。

- Self-Service Network
- 相当于Provider Network的增强版,在其基础上,增加了通过诸如VXLAN方式在自服务网络中提供三层路由服务。其本质是使用NAT的方式将虚拟网络路由到物理网络。
- 在这种网络模型下,还可以提供许多高级的服务,比如LBaaS(负载均衡即服务)和FWaaS(防火墙即服务)。

本文将采用Self-Service Network架构进行搭建
网络布局
- 官网的建议网络布局
官方为了突出网络隔离,对于管理网络使用了私有地址空间。每个节点应当可以访问网络,用于安装软件,DNS,NTP等,Provider网络应当可以通过NAT的方式向管理网络提供访问外网的功能。

- 本文使用的网络布局

ML2网桥选择
OpenStack在L版(Liberty)及之前,各个节点中官方搭建文档都默认使用的OVS(OpenvSwitch),从M版(Mitaka)开始,OpenStack默认使用的是Linux bridge来作为二层转发设备。
笔者因为涉及到后续工作需要基于OVS来实现,所以这里并未按照官方默认的使用Linux bridge,节点中的br-int和br-tun都是使用的OpenvSwitch。所以在后面Networking部分,插件及代理都是安装的openvswitch,ML2配置文件中的mechanism_drivers也设置为openvswitch,还有一些地方也做了相应修改。
如果你也刚好需要使用OVS作为二层转发设备,或者没有特别需求,可以直接按照本文进行安装配置。否则建议您直接按照官网的Installation Guide进行安装
网络配置
| Node | eth0 | eth1 | eth2 |
|---|---|---|---|
| Controller | 192.168.1.158 | 80.0.0.11 | 80.0.1.11 |
| Compute1 | 192.168.1.180 | 80.0.0.21 | 80.0.1.21 |
| Compute2 | 192.168.1.190 | 80.0.0.22 | 80.0.1.22 |
说明
- eth0:外部网络,本地局域网是192.168.1.0/24,可以根据自己情况进行修改。用于各个节点主机连通外网,安装软件。
- eth1:管理网络,网段可以自己定义。用于节点之间管理通信。
- eth2:数据网络(隧道网络),网段可以自己定义。用于虚拟机实例内网数据传输。
各项服务密码设置
密码可以根据自己情况设置,不一定按照本文要求的来。但是如果是萌新,建议直接按照本文设置的密码进行配置,防止后面服务使用出问题。新手搭环境很容易出现各种问题,切身体会。
- OpenStack管理员及租户账号密码
| OpenStackUser name | password |
|---|---|
| admin | admin |
| demo | demo |
- 各项服务的用户名及密码
| Service name | User name | password |
|---|---|---|
| Glance | glance | glance |
| Nova | nova | nova |
| Neutron | neutron | neutron |
| RabbitMQ | openstack | openstack |
- 数据库相关密码
| DB name | password |
|---|---|
| root | openstack |
| keystone | keystone |
| glance | glance |
| nova | nova |
| neutron | neutron |
总而言之,我一般将密码设置为与用户名相同,某些需自己设定账号密码的我都设置为openstack
三、物理主机基本配置
物理机基本配置
- 物理机安装EXSi 5.0系统
物理机资源划分
这里资源当然是多多益善啦,不过鉴于作者实际情况,只能先按此划分。
建议资源划分最小不小于以下情况- Controller节点:内存4G, CPU 4核,磁盘 50G, 网络适配器 3个
- Compute1节点: 2G, CPU 2核,磁盘 40G,网络适配器 3个
- ComputeN节点: 同上
四、OpenStack基本配置
网络环境准备
如果使用VMware,将provider网络(本文是eth0)所在网络设置为混杂模式。
配置网卡
本文Host使用的是Ubuntu16.04 LTS,网卡名字为ens32这种类似的,出于习惯,我们将其改为eth0,eth1这种命名。
Controller Node & Compute Node
修改文件
123# vim /etc/default/grub`GRUB_CMDLINE_LINUX=”net.ifnames=0 biosdevname=0”12# grub-mkconfig -o /boot/grub/grub.cfg# reboot重启后通过
ifconfig命令可以看到网卡名称已经变为eth0,eth1,eth2。配置网卡信息
对于外部网络可是使用dhcp获取ip,这里设置静态ip是为了防止每次重启后ip变化管理起来不方便。
管理网络和隧道网络,根据自己为controller node和compute node设定的值进行配置即可。123456789101112131415161718192021# vim /etc/network/interfacesauto loiface lo inet loopback#外部网络providerauto eth0iface eth0 inet staticaddress 192.168.1.158gateway 192.168.1.1netmask 255.255.255.0dns-nameservers 61.139.2.69#管理网络auto eth1iface eth1 inet staticaddress 80.0.0.11netmask 255.255.255.0#隧道网络auto eth2iface eth2 inet staticaddress 80.0.1.11netmask 255.255.255.0
修改hostname及hosts
为了便于维护及管理,这里需要设置hosts及对应的ip。
这里暂时只给出一个Controller node和一个Compute node,后续有其他节点直接添加即可。
修改hosts
12345# vim /etc/hosts127.0.0.1 localhost80.0.0.11 controller80.0.0.21 compute1修改hostname
Controller Node123# vim /etc/hostnamecontrollerCompute Node
后续的计算节点依次为compute2,compute3……
123# vim /etc/hostnamecompute1
配置NTP
NTP(Network Time Protocal),用于节点之间的时间同步,这里使用的是Chrony。
Controller Node
安装chrony
1# vim apt install chrony配置
12345# vim /etc/chrony/chrony.confserver 192.168.1.xxx iburst #增加一条以自己作为serverallow 80.0.0.0/24 #允许该网段,即管理网络重启服务
1# service chrony restart验证配置是否成功
12345678910# chrony sources210 Number of sources = 5MS Name/IP address Stratum Poll Reach LastRx Last sample===============================================================================^? 192.168.1.158 0 10 0 10y +0ns[ +0ns] +/- 0ns^+ ntp4.itcompliance.dk 3 10 333 632 -57ms[ -56ms] +/- 246ms^+ mx.comglobalit.com 2 10 304 67m +28ms[ +28ms] +/- 301ms^* biisoni.miuku.net 2 10 333 69 +29ms[ +30ms] +/- 128ms^+ 101.6.6.172 2 10 377 238 +24ms[ +24ms] +/- 219ms结果中有一项带*即可,表明当前节点与之同步。
Compute Node
安装chrony
1# vim apt install chrony配置
123# vim /etc/chrony/chrony.confserver controller iburst #以controller作为server重启服务
1# service chrony restart验证配置是否成功
123456# chrony sources210 Number of sources = 1MS Name/IP address Stratum Poll Reach LastRx Last sample===============================================================================^* controller 3 6 377 38 +294us[+6630us] +/- 116ms
配置OpenStack版本
Controller Node & Compute Node
添加 Newton版本库
12# apt install software-properties-common# add-apt-repository cloud-archive:newton更新包
12# apt update && apt dist-upgrade# reboot安装openstack 客户端
1# apt install python-openstackclient
SQL数据库
一般来说,数据库服务只运行在Controller Node上,这里OpenStack官方建议是使用MariaDB。
Controller Node
安装数据库,中途会提示为数据库设置密码,本人是将其设置为openstack,各位可以按自己喜好来,只要别忘了就行-0-
1# apt install mariadb-server python-pymysql新建并配置文件
/etc/mysql/mariadb.conf.d/99-openstack.cnf123456789# vim /etc/mysql/mariadb.conf.d/99-openstack.cnf[mysqld]bind-address = 80.0.0.11default-storage-engine = innodbinnodb_file_per_tablemax_connections = 4096collation-server = utf8_general_cicharacter-set-server = utf8完成安装,重启服务
12# service mysql restart# mysql_secure_installation- mysql_secure_installation是为了进行一些保障SQL安全性的操作,比如删除匿名用户,为root账户设置密码等。
消息队列
OpenStack使用消息队列来进行各项服务之间的协作以及状态信息交互的。一般来说,消息队列服务运行在Controller节点上。
OpenStack支持RabbitMQ,Qpid,ZeroMQ等消息队列服务。这里使用的是RabbitMQ。
安装软件
1# apt install rabbitmq-server添加名为openstack的用户
1# rabbitmqctl add_user openstack openstack这里用户名和密码都设置为openstack
为openstack用户赋予配置、读、写权限
1# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
Memcached
Identity服务认证机制采用Memcached来缓存token。
Memcached服务运行在Controller节点上
- Controller Node
安装软件包
1# apt install memcached python-memcache编辑配置文件
/etc/memcached.conf,将原有的 -l 127.0.0.1替换为如下内容
123# vim /etc/memcached.conf-l 80.0.0.11 #即Controller节点的管理网络ip重启服务
1# service memcached restart
五、身份认证服务 Identity Service – Keystone
OpenStack认证服务提供身份认证,授权,服务目录的功能。
为Keystone创建数据库
以root身份登录进数据库
1# mysql -uroot -popenstack创建
keystone数据库1> CREATE DATABASE keystone;授予
keystone数据库正确的访问权限12345> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \IDENTIFIED BY 'keystone';> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \IDENTIFIED BY 'keystone';> exit将keystone数据库密码也设置为keystone
安装并配置组件
安装
keystone1# apt install keystone编辑配置文件
/etc/keystone/keystone.conf1234567# vim /etc/keystone/keystone.conf[database]……connection = mysql+pymysql://keystone:keystone@controller/keystone[token]……provider = fernet配置文件中的……表明其余项不作修改,仅仅添加新项
将配置信息写入数据库,初始化数据库中的表
1# su -s /bin/sh -c "keystone-manage db_sync" keystone初始化Fernet keys
12# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone# keystone-manage credential_setup --keystone-user keystone --keystone-group keystoneIdentity service引导程序,创建endpoint等
12345# keystone-manage bootstrap --bootstrap-password admin \--bootstrap-admin-url http://controller:35357/v3/ \--bootstrap-internal-url http://controller:35357/v3/ \--bootstrap-public-url http://controller:5000/v3/ \--bootstrap-region-id RegionOne–bootstrap-password指定的是admin用户的密码,这里也设置为admin
配置Apache HTTP server
编辑配置文件
/etc/apache2/apache2.conf,配置ServerName指向controller123# vim /etc/apache2/apache2.confServerName controller删除默认的SQLite数据库
1# rm -f /var/lib/keystone/keystone.db配置admin账户,写一个脚本
admin-openrc来导入环境变量12345678# vim admin-openrcexport OS_USERNAME=adminexport OS_PASSWORD=adminexport OS_PROJECT_NAME=adminexport OS_USER_DOMAIN_NAME=defaultexport OS_PROJECT_DOMAIN_NAME=defaultexport OS_AUTH_URL=http://controller:35357/v3export OS_IDENTITY_API_VERSION=3PASSWORD取值要与keystone-manage bootstrap中的password一致。
接着执行以下命令导入环境变量
1# . admin-openrc
创建 domain,project,user,role
认证服务结合了domain,project,user和role四个域
创建service project,其中的user为OpenStack的各项服务
1# openstack project create --domain default --description "Service Project" service为非admin用户创建project和user
这里命名为demo
创建
demoproject和user12# openstack project create --domain default --description "Demo Project" demo# openstack user create --domain default --password-prompt demodemo user 的密码也设为demo
创建
userrole1# openstack role create user将
userrole添加到demoproject的demouser上。1# openstack role add --project demo --user demo user
验证操作
- 出于安全考虑,取消掉临时token的验证机制
编辑/etc/keystone/keystone-paste.ini文件,将[pipeline:public_api], [pipeline:admin_api], and [pipeline:api_v3]区域中的admin_token_auth移除。 撤销环境变量
1# unset OS_AUTH_URL OS_PASSWORD以admin用户身份去请求一个验证token
123# 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输入admin用户的密码
admin
环境变量脚本
为
admin和demoproject和user创建换了变量脚本。
在之前的
admin-openrc中添加一项12......export OS_IMAGE_API_VERSION=2新建
demo-openrc脚本123456789# vim demo-openrcexport OS_PROJECT_DOMAIN_NAME=defaultexport OS_USER_DOMAIN_NAME=defaultexport OS_PROJECT_NAME=demoexport OS_USERNAME=demoexport OS_PASSWORD=demoexport OS_AUTH_URL=http://controller:5000/v3export OS_IDENTITY_API_VERSION=3export OS_IMAGE_API_VERSION=2使用脚本添加换金变量,并请求一个token
12# . admin-openrc# openstack token issue- 有结果输出即表明keystone配置完成。
六、镜像管理服务 Image Service – Glance
镜像服务为用户提供虚拟机镜像的注册,检索服务
该服务只运行于Controller节点上
为Glance创建数据库
以root身份登录进数据库
1# mysql -uroot -popenstack创建glance数据库,并赋予正确的访问权限
123456> CREATE DATABASE glance;> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \IDENTIFIED BY 'glance';> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \IDENTIFIED BY 'glance';>exitglance数据库的密码设为glance
为glance服务创建用户,服务实体,访问点
以
admin身份去使用管理员权限的CLI1$ . admin-openrc为glance服务在service project里创建一个用户
创建
glance用户1234# openstack user create --domain default --password-prompt glanceUser Password:Repeat User Password:将密码设置为glance
将
serviceproject中的glance用户赋予admin角色1# openstack role add --project service --user glance admin创建glance服务实体
1# openstack service create --name glance --description "OpenStack Image" image
- 创建镜像服务的API访问点 123# 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
安装和配置镜像服务
安装
glance1# apt install glance编辑配置文件
/etc/glance/glance-api.conf1234567891011121314151617181920212223242526# vim /etc/glance/glance-api.conf[database]……connection = mysql+pymysql://glance:glance@controller/glance#注释或者删除掉keystone_authtoken中的其他所有选项[keystone_authtoken]auth_uri = http://controller:5000auth_url = http://controller:35357memcached_servers = controller:11211auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultproject_name = serviceusername = glancepassword = glance[paste_deploy]...flavor = keystone[glance_store]...stores = file,httpdefault_store = filefilesystem_store_datadir = /var/lib/glance/images/…表示只新增项,原有配置不变
编辑配置文件
/etc/glance/glance-registry.conf12345678910111213141516171819202122#vim /etc/glance/glance-registry.conf[database]...connection = mysql+pymysql://glance:glance@controller/glance#注释或者删除掉keystone_authtoken中的其他所有选项[keystone_authtoken]...auth_uri = http://controller:5000auth_url = http://controller:35357memcached_servers = controller:11211auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultproject_name = serviceusername = glancepassword = glance[paste_deploy]...flavor = keystone将配置信息写入数据库,初始化数据库中的表
1# su -s /bin/sh -c "glance-manage db_sync" glance
重启服务,完成安装
重启服务
12# service glance-registry restart# service glance-api restart下载镜像并上传至Glance
12345# wget http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img# openstack image create "cirros" \--file cirros-0.3.4-x86_64-disk.img \--disk-format qcow2 --container-format bare \--public查看镜像
1234567# openstack image list+--------------------------------------+--------+--------+| ID | Name | Status |+--------------------------------------+--------+--------+| 547e9e90-9863-49dd-bacc-f00d84d6f920 | cirros | active |+--------------------------------------+--------+--------+结果中会显示刚刚上传的cirros镜像,Status为active
七、计算服务 Compute Service – Nova
该服务在Controller节点和Compute节点都需要安装
Controller Node
为Nova创建数据库
以root身份登录进数据库
1# mysql -uroot -popenstack创建
nova数据库,并赋予正确的访问权限1234567891011> CREATE DATABASE nova_api;> CREATE DATABASE nova;> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \IDENTIFIED BY 'nova';> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \IDENTIFIED BY 'nova';> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \IDENTIFIED BY 'nova';> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \IDENTIFIED BY 'nova';>exit数据库密码设为
nova
为nova服务创建用户,服务实体,访问点
以
admin身份去使用管理员权限的CLI1$ . admin-openrc为nova服务在service project里创建一个用户
创建
nova用户123# openstack user create --domain default --password-prompt novaUser Password:Repeat User Password:将密码设置为nova
将
serviceproject中的nova用户赋予admin角色1# openstack role add --project service --user nova admin创建nova服务实体
1# openstack service create --name nova --description "OpenStack Compute" compute
- 创建计算服务的API访问点 123# 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
安装和配置计算服务
安装nova相关组件
1# apt install nova-api nova-conductor nova-consoleauth nova-novncproxy nova-scheduler编辑配置文件
/etc/nova/nova.conf123456789101112131415161718192021222324252627282930313233343536# vim /etc/nova/nova.conf[DEFAULT]...transport_url = rabbit://openstack:openstack@controllerauth_strategy = keystonemy_ip = 80.0.0.11use_neutron = Truefirewall_driver = nova.virt.firewall.NoopFirewallDriver[api_database]connection = mysql+pymysql://nova:nova@controller/nova_api[database]connection = mysql+pymysql://nova:nova@controller/nova[keystone_authtoken]auth_uri = http://controller:5000auth_url = http://controller:35357memcached_servers = controller:11211auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultproject_name = serviceusername = novapassword = nova[vnc]vncserver_listen = 80.0.0.11vncserver_proxyclient_address = 80.0.0.11[glance]api_servers = http://controller:9292[oslo_concurrency]lock_path = /var/lib/nova/tmp由于bug,需要删除掉
[DEFAULT]中的log-dir
重启服务,完成安装
- 重启计算服务 12345# service nova-api restart# service nova-consoleauth restart# service nova-scheduler restart# service nova-conductor restart# service nova-novncproxy restart
Compute Node
安装和配置计算服务
安装nova相关组件
1# apt install nova-compute编辑配置文件
/etc/nova/nova.conf123456789101112131415161718192021222324252627282930313233343536# vim /etc/nova/nova.conf#消息队列配置[DEFAULT]...transport_url = rabbit://openstack:openstack@controllerauth_strategy = keystonemy_ip = 80.0.0.21use_neutron = Truefirewall_driver = nova.virt.firewall.NoopFirewallDriver#注释掉keystone_authtoken中其他选项[keystone_authtoken]auth_uri = http://controller:5000auth_url = http://controller:35357memcached_servers = controller:11211auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultproject_name = serviceusername = novapassword = nova#配置vnc远程登录[vnc]enabled = Truevncserver_listen = 0.0.0.0vncserver_proxyclient_address = 80.0.0.21novncproxy_base_url = http://controller:6080/vnc_auto.html#配置镜像服务API[glance]api_servers = http://controller:9292[oslo_concurrency]lock_path = /var/lib/nova/tmp由于bug,需要移除掉
[DEFAULT]中的log-dir
完成安装
检测计算节点是否支持虚拟机硬件加速
1# egrep -c '(vmx|svm)' /proc/cpuinfo如果结果是大于等于1的值,则无需修改;若值为0,则进行以下步骤,将virt_type设置为qemu
12345# vim /etc/nova/nova-compute.conf[libvirt]...virt_type = qemu重启服务
1# service nova-compute restart
验证操作
Controller Node
在控制节点进行下面的验证操作
以
admin身份去使用管理员权限的CLI1$ . admin-openrc列出计算服务
如果前面配置成功,这里会有3个服务运行在Controller节点,一个服务运行在Compute节点12345678+----+------------------+------------+----------+---------+-------+----------------------------+| ID | Binary | Host | Zone | Status | State | Updated At |+----+------------------+------------+----------+---------+-------+----------------------------+| 3 | nova-consoleauth | controller | internal | enabled | up | 2017-06-04T10:04:02.000000 || 4 | nova-scheduler | controller | internal | enabled | up | 2017-06-04T10:03:58.000000 || 5 | nova-conductor | controller | internal | enabled | up | 2017-06-04T10:04:05.000000 || 6 | nova-compute | compute1 | nova | enabled | up | 2017-06-04T10:04:07.000000 |+----+------------------+------------+----------+---------+-------+----------------------------+
八、网络服务 Networking Service – Neutron
该服务在Controller节点和Compute节点都需要安装
Controller Node
为Neutron创建数据库
以root身份登录进数据库
1# mysql -uroot -popenstack创建
neutron数据库,并赋予正确的访问权限1234> CREATE DATABASE neutron;> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'neutron';> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron';> exit数据库密码设为
neutron
为neutron服务创建用户,服务实体,访问点
以
admin身份去使用管理员权限的CLI1$ . admin-openrc为neutron服务在service project里创建一个用户
创建
neutron用户123# openstack user create --domain default --password-prompt neutronUser Password:Repeat User Password:将密码设置为neutron
将
serviceproject中的neutron用户赋予admin角色1# openstack role add --project service --user neutron admin创建neutron服务实体
1# openstack service create --name neutron --description "OpenStack Networking" network
- 创建网络服务的API访问点 123# 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
网络架构部署
这里使用官网介绍的第二种架构–Self-Service Networks
安装neutron相关组件
123# apt install neutron-server neutron-plugin-ml2 \neutron-openvswitch-agent neutron-l3-agent neutron-dhcp-agent \neutron-metadata-agent配置外部网桥br-ex,并设置默认路由
12345# ovs-vsctl add-br br-ex# ovs-vsctl add-port br-ex eth0# ifconfig eth0 0# ifconfig br-ex 192.168.1.158# route add default gw 192.168.1.1编辑neutron server配置文件
/etc/neutron/neutron.conf12345678910111213141516171819202122232425262728293031323334[database]...connection = mysql+pymysql://neutron:neutron@controller/neutron[DEFAULT]...core_plugin = ml2service_plugins = routerallow_overlapping_ips = Truetransport_url = rabbit://openstack:openstack@controllerauth_strategy = keystone[keystone_authtoken]...auth_uri = http://controller:5000auth_url = http://controller:35357memcached_servers = controller:11211auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultproject_name = serviceusername = neutronpassword = neutron[nova]...auth_url = http://controller:35357auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultregion_name = RegionOneproject_name = serviceusername = novapassword = nova
配置插件及代理
配置ML2 plug-in
Modular Layer 2 (ML2) 使用OpenvSwitch机制来构建二层虚拟网络。
官网目前默认使用的是Linux bridge机制,有需要的可按照官网安装文档进行安装配置。12345678910111213141516171819202122# vim /etc/neutron/plugins/ml2/ml2_conf.ini[ml2]...type_drivers = flat,vlan,vxlantenant_network_types = vxlanmechanism_drivers = openvswitch,l2populationextension_drivers = port_security[ml2_type_flat]...flat_networks = external[ml2_type_vxlan]...vni_ranges = 1:1000[securitygroup]...enable_security_group = Trueenable_ipset = Truefirewall_driver = iptables_hybrid配置L3 agent
Layer-3 (L3) agent为self-service虚拟网络提供路由及NAT服务。
编辑
/etc/neutron/l3_agent.ini文件1234[DEFAULT]...interface_driver = neutron.agent.linux.interface.OVSInterfaceDriverexternal_network_bridge =- external_network_bridge值故意空缺,这样可使多个外部网络共用一个代理。
配置DHCP agent
DHCP agent为虚拟网络提供DHCP服务。
编辑
/etc/neutron/dhcp_agent.ini文件12345[DEFAULT]...interface_driver = neutron.agent.linux.interface.OVSInterfaceDriverdhcp_driver = neutron.agent.linux.dhcp.Dnsmasqenable_isolated_metadata = True配置OpenvSwitch agent
OpenvSwitch agent为实例建立了二层虚拟网络设施
编辑
/etc/neutron/plugins/ml2/openvswitch_agent.ini文件12345678910111213# vim /etc/neutron/plugins/ml2/openvswitch_agent.ini[ovs]integration_bridge = br-intbridge_mappings = external:br-exlocal_ip = 80.0.1.11[agent]tunnel_types = vxlanl2_population = True[securitygroup]#enable_security_group = Truefirewall_driver = iptables_hybrid配置metadata agent
meatadata agent向实例提供配置信息
编辑
/etc/neutron/metadata_agent.ini文件,shared secret设置为openstack。1234[DEFAULT]...nova_metadata_ip = controllermetadata_proxy_shared_secret = openstack配置计算服务使用网络服务
编辑/etc/nova/nova.conf文件metadata_proxy_shared_secret值要与上一步中的相同,这里也为openstack
123456789101112[neutron]url = http://controller:9696auth_url = http://controller:35357auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultregion_name = RegionOneproject_name = serviceusername = neutronpassword = neutronservice_metadata_proxy = Truemetadata_proxy_shared_secret = openstack
完成安装
将配置信息写入数据库,初始化数据库中的表
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重启Compute API服务
1# service nova-api restart重启Networking服务
12345# service neutron-server restart# service neutron-openvswitch-agent restart# service neutron-dhcp-agent restart# service neutron-metadata-agent restart# service neutron-l3-agent restart
Compute Node
安装网neutron相关组件
安装软件包
1# apt install neutron-plugin-ml2 neutron-openvswitch-agent编辑
/etc/neutron/neutron.conf文件12345678910111213141516171819202122232425# vim /etc/neutron/neutron.conf[database]#注释掉所有connection选项,因为compute节点不需要直接操作数据库[DEFAULT]...transport_url = rabbit://openstack:openstack@controllerauth_strategy = keystonecore_plugin = ml2service_plugins = routerallow_overlapping_ips = Trueverbose = True[keystone_authtoken]...auth_uri = http://controller:5000auth_url = http://controller:35357memcached_servers = controller:11211auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultproject_name = serviceusername = neutronpassword = neutron配置ML2 plug-in
编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件1234567891011[ml2]type_drivers = flat,vlan,vxlantenant_network_types = vxlanmechanism_drivers = openvswitchextension_drivers = port_security[securitygroup]enable_ipset = True[ml2_type_vxlan]vni_ranges = 1:1000配置OpenvSwitch agent
编辑/etc/neutron/plugins/ml2/openvswitch_agent.ini文件12345678910111213# vim /etc/neutron/plugins/ml2/openvswitch_agent.ini[ovs]integration_bridge = br-intlocal_ip = 80.0.1.21[agent]tunnel_types = vxlanl2_population = True[securitygroup]enable_security_group = Truefirewall_driver = iptables_hybrid配置计算服务使用网络服务
编辑/etc/nova/nova.conf文件123456789101112# vim /etc/nova/nova.conf[neutron]url = http://controller:9696auth_url = http://controller:35357auth_type = passwordproject_domain_name = defaultuser_domain_name = defaultregion_name = RegionOneproject_name = serviceusername = neutronpassword = neutron
完成安装
重启计算服务
1# service nova-compute restart重启代理服务
1# service neutron-openvswitch-agent restart
###验证操作
Controller Node
在Controoler节点执行验证操作
以
admin身份去使用管理员权限的CLI1$ . admin-openrc列出已加载的extensions
1# neutron ext-list列出成功运行的neutron agent
1# neutron agent-list就当前部署情况,应该有4个agent在Controller节点,一个agent在计算节点
123456789+--------------------------------------+--------------------+------------+-------------------+-------+----------------+---------------------------+| id | agent_type | host | availability_zone | alive | admin_state_up | binary |+--------------------------------------+--------------------+------------+-------------------+-------+----------------+---------------------------+| 075e6e72-4a85-4845-a427-cd3ef45b9803 | Metadata agent | controller | | :-) | True | neutron-metadata-agent || 1805ba7f-7f7d-4e8d-8415-8f63f3f40cc5 | DHCP agent | controller | nova | :-) | True | neutron-dhcp-agent || 4b3b5877-37e2-4de3-a5ec-f89786000bb9 | L3 agent | controller | nova | :-) | True | neutron-l3-agent || 7e3ec045-336f-43ff-a130-8cfe24951aa6 | Open vSwitch agent | compute1 | | :-) | True | neutron-openvswitch-agent || bcccd6de-99a0-4a63-9042-8f655efd8ea0 | Open vSwitch agent | controller | | :-) | True | neutron-openvswitch-agent |+--------------------------------------+--------------------+------------+-------------------+-------+----------------+---------------------------+
九、前端仪表盘 Dashboard – Horizon
这是一个可选组件,用于提供一个可视化界面,让云管理者和用户可以通过Web接口来操作和管理OpenStack资源与服务。
该组件安装和配置在Controller节点。
安装和配置仪表盘
安装
dashboard1# apt install openstack-dashboard编辑配置文件
/etc/openstack-dashboard/local_settings.py1234567891011121314151617181920212223# vim /etc/openstack-dashboard/local_settings.pyOPENSTACK_HOST = "controller"ALLOWED_HOSTS = ['*', ]SESSION_ENGINE = 'django.contrib.sessions.backends.cache'CACHES = {'default': {'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache','LOCATION': 'controller:11211',}}OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOSTOPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = TrueOPENSTACK_API_VERSIONS = {"identity": 3,"image": 2,"volume": 2,}OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default"OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
验证操作
重新载入web server配置
1# service apache2 reload使用浏览器打开dashboard
打开浏览器,在网址栏中输入http://controller/horizon,出现登陆界面后,以admin用户或者demo用户的身份登陆进去即可。Bug解决
如果在上面一步中,输入网址后并未出现登陆界面,并出现ERROR,则需要进行下面两步解决。
在配置文件
/etc/apache2/conf-enabled/openstack-dashboard.conf中添加一行1234# vim /etc/apache2/conf-enabled/openstack-dashboard.conf#在WSGIProcessGroup horizon下一行添加WSGIApplicationGroup %{GLOBAL}进入到
/usr/share/openstack-dashboard目录,运行manage.py12# cd /usr/share/openstack-dashboard# python manage.py compress
十、创建虚拟机实例
上述步骤已经安装部署好了所有的基本组件,OpenStack已经可以开始使用了,下面将介绍一些基本的使用方法,包括创建虚拟网络,路由器,实例,添加floating ip等。
创建provider虚拟网络
以
admin身份去使用管理员权限的CLI1$ . admin-openrc创建provider网络
这里命名为ext-net
1# neutron net-create ext-net --router:external --provider:physical_network external --provider:network_type flat参数说明
--router:external:使self-service的router可以使用该网络来连接到外部网络,比如Internet--provider:physical_network:指定flat虚拟网络连接到哪个flat物理网络上--provider:network_type:指定provider网络类型,这里将其设置为flat
–provider:physical_network参数是使用的
ml2_conf.ini中指定的参数12[ml2_type_flat]flat_networks = external创建provider子网
123# neutron subnet-create ext-net 192.168.1.0/24 --name ext-subnet \--allocation-pool start=192.168.1.180,end=192.168.1.199 \--disable-dhcp --gateway 192.168.1.1参数说明
--name:子网名称--allocation-pool:start和end指定了你想为虚拟机实例分配的ip地址范围,请确保该范围内的地址可用--disable-dhcp:撤销这个子网的DHCP功能--gateway:指定这个子网的网关
创建self-service虚拟网络及路由器
以
demo身份去获取user身份的CLI使用权1$ . demo-openrc创建self-service网络
这里命名为demo-net
1# neutron net-create demo-net创建self-service子网
我将虚拟内部子网网段定义为90.0.0.0/24,这个可以根据自己情况修改
1# neutron subnet-create demo-net 90.0.0.0/24 --name demo-subnet --dns-nameserver 61.139.2.69 --gateway 90.0.0.1创建demo租户的路由器
1# neutron router-create demo-router在demo-router上加一个接口,将self-service子网(demo-subnet)添加上去
1# neutron router-interface-add demo-router demo-subnet在demo-router上设置一个provider网络的网关
1# neutron router-gateway-set demo-router ext-net
验证虚拟网络
以
admin身份去使用管理员权限的CLI1$ . admin-openrc列出名字空间(namespace)
可以看到一个qrouter和一个qdhcp
123# ip netnsqrouter-8afe6ad1-3a63-4036-a374-275b0c44fef2qdhcp-20dcee41-145b-4210-83c9-3bcd7b4f732a列出demo-router上的接口
12345678# neutron router-port-list demo-router+--------------------------------------+------+-------------------+--------------------------------------------------------------------------------------+| id | name | mac_address | fixed_ips |+--------------------------------------+------+-------------------+--------------------------------------------------------------------------------------+| b4fbf9c0-4f49-43e3-8808-6f241c8b7631 | | fa:16:3e:a7:2b:0d | {"subnet_id": "cfbf6897-6e94-4b08-8783-2c982ffd0b6e", "ip_address": "90.0.0.1"} || ed881f13-c09d-4dc7-9225-d95f6df47865 | | fa:16:3e:6a:38:c0 | {"subnet_id": "572af278-9ac6-4c6f-8771-966e7a22d3ea", "ip_address": "192.168.1.181"} |+--------------------------------------+------+-------------------+--------------------------------------------------------------------------------------+
准备创建实例的参数
以
admin身份去执行命令1$ . admin-openrc新建合适的flavor
1# openstack flavor create --id 1 --vcpus 1 --ram 512 --disk 1 m1.tiny列出可用的flavor
1# openstack flavor list以
demo身份执行后续操作1$ . demo-openrc创建key pair
12# ssh-keygen -q -N ""# openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
增加安全组规则
默认情况下,
default安全组将应用于所有的实例,并且阻止所有的远程接入。对于Linux镜像,比如之前上传的Cirros镜像,建议至少需要允许ICMP(ping)和SSH。
允许ICMP
1# openstack security group rule create --proto icmp default允许SSH
1# openstack security group rule create --proto tcp --dst-port 22 default
在self-service网络上创建虚拟机实例
以
demo身份执行后续操作1$ . demo-openrc列出各项参数的可选值
列出flavor
1234567# nova flavor-list+----+------------+-----------+------+-----------+------+-------+-------------+-----------+| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |+----+------------+-----------+------+-----------+------+-------+-------------+-----------+| 1 | m1.tiny | 512 | 1 | 0 | | 1 | 1.0 | True |+----+------------+-----------+------+-----------+------+-------+-------------+-----------+列出image
123456# openstack image list+--------------------------------------+--------+--------+| ID | Name | Status |+--------------------------------------+--------+--------+| 547e9e90-9863-49dd-bacc-f00d84d6f920 | cirros | active |+--------------------------------------+--------+--------+列出net
1234567# neutron net-list+--------------------------------------+----------+--------------------------------------------------+| id | name | subnets |+--------------------------------------+----------+--------------------------------------------------+| 20dcee41-145b-4210-83c9-3bcd7b4f732a | demo-net | cfbf6897-6e94-4b08-8783-2c982ffd0b6e 90.0.0.0/24 || 71e40f62-98cb-438b-94ee-0b7e06d9ee17 | ext-net | 572af278-9ac6-4c6f-8771-966e7a22d3ea |+--------------------------------------+----------+--------------------------------------------------+
创建实例
1# openstack server create --flavor m1.tiny --image cirros --nic net-id=20dcee41-145b-4210-83c9-3bcd7b4f732a --security-group default --key-name mykey demo-ins查看实例
下面两个命令都可以查看
12# openstack server list# nova list通过VNC登陆到实例
12345678# openstack console url show demo-ins+-------+---------------------------------------------------------------------------------+| Field | Value |+-------+---------------------------------------------------------------------------------+| type | novnc || url | http://controller:6080/vnc_auto.html?token=5eeccb47-525c-4918-ac2a-3ad1e9f1f493 |+-------+---------------------------------------------------------------------------------+将结果中的url复制到浏览器中即可查看实例。
在namespace中SSH进实例
此时实例只有内部网络的ip,在Controller节点上是无法SSH到实例的。但是我们可以通过Controller节点中的qrouter namespace进入到实例。
查看namespace
123# ip netnsqrouter-8afe6ad1-3a63-4036-a374-275b0c44fef2qdhcp-20dcee41-145b-4210-83c9-3bcd7b4f732a在qrouter中SSH到实例
1# ip netns exec qrouter-8afe6ad1-3a63-4036-a374-275b0c44fef2 ssh cirros@90.0.0.3其中的ip地址根据自己实例的具体值修改。
- 创建并绑定floating ip
此时实例只有内部ip,如果想从外部访问实例,则需要为实例添加一个floating ip
创建floating ip
1# openstack ip floating create ext-net将创建的floating ip关联到实例上
1# openstack ip floating add 192.168.1.xxx demo-ins