注:建议配置过程中要设置的一切密码都设置成1234 !!!
由于作者直接从word文档复制粘贴到博客,所以排版不美观,而且正确性未验证。
https://github.com/misiyu/blogresource
以上链接可以下载到作者的原文档,原文档经多次验证,切实可用。
1组网
本章给出物理环境下和VMware的的虚拟机环境下的组网方式。
1.1 物理环境组网方式
如图1.1官方文档给出的各节点网络拓扑图所示,右边虚框表示的节点为可选节点,而左边的节点为必要节点。因此,此次部署只部署一个控制节点,和一个计算节点。
图1.1官方文档组网图
综上所述,此次部署需要的硬件设备有:
1,电脑两台:两个网卡,ubuntu16.04系统最低要求,控制节点内存3G,计算节点内存1G。
2,路由器两个
3,网线若干
使用以上设备进行组网如图1.2所示。本文约定,使用的eth0的表示主机第一个网卡的名称,ETH1表示第二张网卡的名称,网卡的实际名称可以在控制台通过使用的ifconfig命令查看。
图1.2实现组网图
图中控制节点与计算节点的第一个网卡分别接入路由器1,为了固定这两个网卡的IP需要配置为静态IP,也可以在路由器1中设置的IP与主机MAC地址绑定此次。部署采取第二种方式,至于静态IP配置可自行百度。首先登录路由器1的管理页面,即在浏览器地址栏输入192.168.0.1,登录页面后,找到可以配置IP绑定的页面,设置IP绑定如图1.3所示。
图1.3路由器绑定IP
路由器2为两台主机分配的子网为192.168.1.0/24。将两个主机的第二个网卡接到路由器2,无需配置IP。
1.2 VMware 虚拟机环境组网方式
使用的VMware的虚拟机组网图如图1.4所示。需要两个虚拟机,为每个虚拟机添加两个网卡。控制节点内存3G,计算节点内存1G,作者使用的是无图形界面的,若使用有图形界面的虚拟机,可以要适当调大内存(推荐各上调1G)。
图1.4 vmware虚拟机组网图
组网过程如下:
(1)生成两台虚拟机,请使用ubuntu16.04版本系统。
(2)按以下步骤配置的VMware的虚拟网络:
我,点击“编辑” - “”虚拟网络编辑器“
可看到当前有的两个虚拟网络如图
II、点击“更改设置”,在弹出的界面中选中NAT模式的虚拟网卡,如下图中选择
取消红框里的对勾,关闭NAT网络的DHCP服务。
选择如图所示“编辑虚拟机设置”,在打开页面中设置内存
选择“处理器” - “虚拟机Intel VT-x / EPT或AMD-V / RVI(V)
编辑``/ etc / network / interfaces``文件,更改设置如下图所示
汽车ens33
iface ens33静态
地址192.168.1.112
网络掩码255.255.255.0
网关192.168.1.2
dns-nameserver 192.168.1.2
其中ens33是第一块网卡的名称,静态ip,网关请根据虚拟网络,具体情况具体分析。(提示:通过ip link命令可以查看所有网卡名称)。
保存文件,重启主机,用的ifconfig查看是否生效。
2 openstack软件环境配置
对两台主机都执行以下命令
(1)进入超级用户状态
$ sudo -s
2.1 主机网络配置
2.1.1控制节点网络配置
(1)编辑``/ etc / network / interfaces``文件
添加内容
汽车eth1
iface eth1 inet manual
up ip link set dev $ IFACE up
down ip link set dev $IFACE down
即对第二块网卡(eth1)进行配置。保存文件后,重启系统以激活修改。
(2) 编辑``/etc/hosts``文件
添加以下内容后保存文件
192.168.0.100 controller
192.168.0.101 compute
2.1.2 计算节点网络配置
计算节点配置与控制节点相同,需要注意的是主机的第二张网卡名称在实际中也许不同。
2.1.3 额外配置
计算如果控制节点与计算节点的主机名相同,需修改其中一个。修改主机名称的方法:
(1) 编辑`` /etc/hostname``文件
文件内容就是主机名,修改该文件内容,保存退出。(假如原文件内容为ubuntu,可将其改为openstack1)
(2) 编辑`` /etc/hosts``文件
将该文件中的原主机名改成与/etc/hostname文件内容一致。
(3)重启系统,使配置生效
2.1.4 连通性测试
(1) 在控制节点上执行
# ping openstack.org
# ping compute
(2) 在控制节点上执行
# ping openstack.org
# ping controller
保证4条ping命令都能ping通。
2.2 各节点时间同步配置
2.2.1 控制节点
在控制节点上执行以下命令。
# apt install chrony
添加以下两行
allow 192.168.0.0/24
server ntp1.aliyun.com iburst
注: I、第一行表示允许192.168.0.0/24该子网内的主机访问本主机做时间同步。
II、第二行表示添加 ntp1.aliyun.com(阿里云服务器) 这个服务器作为时间同步服务器。
# service chrony restart
2.2.2 计算节点
在计算结点上执行以下命令。
# apt install chrony
注释或删除该文件中的所有行。
添加以下一行,使用控制节点为时间同步服务器。
server controller iburst
# service chrony restart
2.2.3 时间同步验证
(1)在控制节点上执行
# chronyc sources
应出现如图所示。在120.25.115.20(这是ntp1.aliyun.com的ip地址)一行前应出现*号,表示时间同步成功。
(2)在控制节点上执行
# chronyc sources
应出现如图所示。controller一行前有*号,表示与控制节点时间同步成功。
(3) 如果没看到有*号,请等待一会再查看,因为时间同步需要一小段时间。另外也可反复在各节点上执行service chrony restart命令。
2.3 添加openstack软件源
在所有节点执行以下命令。
(1) 添加软件源
# apt-get install software-properties-common
# add-apt-repository cloud-archive:newton
这里安装newton版本的openstack
(2)升级软件包
# apt-get update && apt-get dist-upgrade
(3)重启系统
(4)安装 OpenStack 客户端:
# apt-get install python-openstackclient
2.4 安装mysql数据库
在控制节点执行以下命令:
(1)安装软件
# apt-get install mariadb-server python-pymysql
(2)创建并编辑文件``/etc/mysql/mariadb.conf.d/99-openstack.cnf``
写入以下内容。
[mysqld]
bind-address = 192.168.0.100
default-storage-engine = innodb
innodb_file_per_table
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
其中192.168.0.100为控制节点在管理网络中的ip地址,请参考图1.2。
(3) 重启数据库服务:
# service mysql restart
# mysql_secure_installation
2.5 消息队列服务安装
在控制节点执行以下命令:
# apt-get install rabbitmq-server
# rabbitmqctl add_user openstack 1234
其中1234是为openstack用户设置的密码。
# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
2.6 安装Memcached
在控制节点执行以下命令:
# apt-get install memcached python-memcache
把
-l 127.0.0.1
这一行改为
-l 192.168.0.100
其中192.168.0.100为控制节点在管理网络中的ip 。
# service memcached restart
3 认证服务——keystone组件安装
3.1 创建keystone数据库
在控制节点执行以下命令。
(1)进入数据库
# mysql -u root -p
(2)创建 keystone 数据库:
CREATE DATABASE keystone;
(3)对``keystone``数据库授予恰当的权限:
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY '1234';
其中1234为访问keystone数据库密码。
(4)退出数据库客户端。
exit
3.2 keystone服务安装与配置
在控制节点执行以下命令。
(1)安装后禁止keystone 服务自动启动:
# echo "manual" > /etc/init/keystone.override
(2)安装软件
# apt-get install keystone apache2 libapache2-mod-wsgi
(3)随机产生一个token
# openssl rand -hex 10 > token
保存在 token这个文件中备用,在下文中用ADMIN_TOKEN指代,读者应注意替换 。
查看命令:
# cat token
(4)编辑文件 /etc/keystone/keystone.conf 并完成如下动作:
I、在``[DEFAULT]``部分,定义初始管理令牌的值:
[DEFAULT]
...
admin_token = ADMIN_TOKEN
使用前一步骤生成的随机数(该随机数保存在token文件中)替换``ADMIN_TOKEN`` 。
(注:省略号表示该文件中原有部分应保留)
II、在 [database] 部分,配置数据库访问:
[database]
...
connection = mysql+pymysql://keystone:1234@controller/keystone
注意删除 [database] 部分原有的包含 connection的一行。
III、在``[token]``部分,配置Fernet UUID令牌的提供者。
[token]
...
provider = fernet
(5)初始化身份认证服务的数据库:
# su -s /bin/sh -c "keystone-manage db_sync" keystone
(6)初始化Fernet keys:
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
3.3 apache服务器配置
在控制节点执行以下命令。
(1)编辑``/etc/apache2/apache2.conf``文件,为控制节点配置``ServerName``选项:
在最后一行添加
ServerName controller
(2)使用下面的内容创建
``/etc/apache2/sites-available/wsgi-keystone.conf``文件:
Listen 5000
Listen 35357
WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}
WSGIProcessGroup keystone-public
WSGIScriptAlias / /usr/bin/keystone-wsgi-public
WSGIApplicationGroup %{GLOBAL}
WSGIPassAuthorization On
ErrorLogFormat "%{cu}t %M"
ErrorLog /var/log/apache2/keystone.log
CustomLog /var/log/apache2/keystone_access.log combined
Require all granted
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/apache2/keystone.log
CustomLog /var/log/apache2/keystone_access.log combined
Require all granted
# rm /etc/apache2/sites-enabled/*
# ln -s /etc/apache2/sites-available/wsgi-keystone.conf \
/etc/apache2/sites-enabled
# service apache2 restart
(6) 默认情况下,Ubuntu 上的安装包会自动创建一个 SQLite 数据库。
因为这里配置使用SQL 数据库服务器,所以你可以删除SQLite 服务库文件:
# rm -f /var/lib/keystone/keystone.db
3.4 创建服务实体和API端点
(1) 配置必要环境变量:
# export OS_TOKEN=ADMIN_TOKEN
使用3.2中生成的认证令牌替代``ADMIN_TOKEN``,使用cat token可以查看
# export OS_URL=http://controller:35357/v3
# export OS_IDENTITY_API_VERSION=3
(2)创建服务实体
# openstack service create \
--name keystone --description "OpenStack Identity" identity
(3)创建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
3.5 创建域、项目、用户和角色
(1)创建域``default``:
# openstack domain create --description "Default Domain" default
(2)创建 admin 项目:
# openstack project create --domain default --description "Admin Project" admin
(3)创建 admin 用户:
# openstack user create --domain default --password-prompt admin
需要为用户设置密码,统一设置为1234。
(4)创建 admin 角色:
# openstack role create admin
(5)添加``admin`` 角色到 admin 项目和用户上:
# openstack role add --project admin --user admin admin
(注:该命令无输出,即为执行成功)
(6)创建``service``项目:
# openstack project create --domain default --description "Service Project" service
(7)创建``demo`` 项目:
# openstack project create --domain default --description "Demo Project" demo
(8)创建``demo`` 用户:
# openstack user create --domain default --password-prompt demo
需要为用户设置密码,统一设置为1234。
(9)创建 user 角色:
# openstack role create user
(10)添加 user``角色到 ``demo 项目和用户:
# openstack role add --project demo --user demo user
(注:该命令无输出即为运行成功)
3.6 验证操作
在控制节点执行以下操作。
(1)编辑 /etc/keystone/keystone-paste.ini 文件,从``[pipeline:public_api]``,[pipeline:admin_api]``和``[pipeline:api_v3]``部分删除``admin_token_auth`` 。
(2)重置``OS_TOKEN``和``OS_URL`` 环境变量:
# unset OS_TOKEN OS_URL
(3)作为 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
输入密码1234,并得到如图输出即为安装成功。
(4)作为``demo`` 用户,请求认证令牌:
# openstack --os-auth-url http://controller:5000/v3 \
--os-project-domain-name default --os-user-domain-name default \
--os-project-name demo --os-username demo token issue
输入密码1234,并得到如图输出即为安装成功。
3.7 创建脚本
在控制节点执行以下操作。
(1)编辑文件 admin-openrc 并添加如下内容:
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=1234
export OS_AUTH_URL=http://controller:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
其中1234为之前创建admin用户时设置的密码。
(2)编辑文件 demo-openrc 并添加如下内容:
export OS_PROJECT_DOMAIN_NAME=default
export OS_USER_DOMAIN_NAME=default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=1234
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
其中1234为之前创建demo用户时设置的密码。
(3)试用脚本
I、加载``admin-openrc``文件来身份认证服务的环境变量位置和``admin``项目和用户证书:
# . admin-openrc
II、请求认证令牌:
# openstack token issue
4 镜像服务——glance组件安装
4.1 创建glance数据库
在控制节点执行以下操作。
# mysql -u root -p
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' \
IDENTIFIED BY '1234' ;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' \
IDENTIFIED BY '1234' ;
exit
4.2 创建glance服务证书、服务实体和服务端点
在控制节点执行以下操作。
# . admin-openrc
# openstack user create --domain default --password-prompt glance
需要为glance 用户设置密码,统一设置为1234。
# openstack role add --project service --user glance admin
(注:该命令无输出,即为执行成功)
# openstack service create --name glance --description "OpenStack Image" image
# 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 安装并配置组件
在控制节点执行以下操作。
# apt-get install glance
[database]
...
connection = mysql+pymysql://glance:1234@controller/glance
其中1234为3.1中设置的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 = 1234
[paste_deploy]
...
flavor = keystone
其中1234为3.2中设置的认证服务访问密码。
[glance_store]
...
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
[database]
...
connection = mysql+pymysql://glance:1234@controller/glance
其中1234为3.1中设置的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 = 1234
[paste_deploy]
...
flavor = keystone
# su -s /bin/sh -c "glance-manage db_sync" glance
# service glance-registry restart
# service glance-api restart
4.4 验证操作
在控制节点执行以下操作。
# . admin-openrc
# 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
# openstack image list
5 计算服务——nova组件安装
5.1 创建navo、nova_api数据库
在控制节点执行以下操作。
# mysql -u root -p
CREATE DATABASE nova_api;
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' \
IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' \
IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' \
IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' \
IDENTIFIED BY '1234';
其中1234为可自定义数据库访问密码。
exit
5.2 创建服务证书、服务实体和服务API端点
在控制节点执行以下操作。
# . admin-openrc
# openstack user create --domain default \
--password-prompt 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/%\(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
5.3 安装配置组件
在控制节点执行以下操作。
# apt-get install nova-api nova-conductor nova-consoleauth \
nova-novncproxy nova-scheduler
[DEFAULT]
...
enabled_apis = osapi_compute,metadata
这一行在原文件中应该是有的,应先注意查找。
(注:省略号表示其它东西应保留)
[api_database]
connection = mysql+pymysql://nova:1234@controller/nova_api
[database]
connection = mysql+pymysql://nova:1234@controller/nova
其中1234为5.1中为数据库设置的密码。
[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
其中1234为2.5中设置的密码。
(注:[oslo_messaging_rabbit]这一部分在原文件中没有,应自行添加,下文中也有几个部分原文没有,需要读者自行添加)
[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 = 1234
其中1234为5.2中设置的密码。
[DEFAULT]
...
my_ip = 192.168.0.100
其中192.168.0.100为控制节点在管理网络中的ip,参考图1.2。
[DEFAULT]
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[vnc]
vncserver_listen = $my_ip
vncserver_proxyclient_address = $my_ip
[glance]
api_servers = http://controller:9292
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
(注意: [oslo_concurrency]这一部分在原文件中是存在的,所以应修改原文,不是添加)
# su -s /bin/sh -c "nova-manage api_db sync" nova
# su -s /bin/sh -c "nova-manage db sync" nova
# service nova-api restart
# service nova-consoleauth restart
# service nova-scheduler restart
# service nova-conductor restart
# service nova-novncproxy restart
5.3 安装配置计算节点
在计算节点执行以下操作。
# apt-get install nova-compute
[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
1234为2.5中设置的密码。
[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 = 1234
[DEFAULT]
...
my_ip = 192.168.0.101
其中192.168.0.101为计算节点在管理网络中的IP地址,参考图1.2。
[DEFAULT]
...
use_neutron = True
firewall_driver = nova.virt.firewall.NoopFirewallDriver
[vnc]
enabled = True
vncserver_listen = 0.0.0.0
vncserver_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html
[glance]
api_servers = http://controller:9292
[oslo_concurrency]
lock_path = /var/lib/nova/tmp
(注意: [oslo_concurrency]这一部分在原文件中是存在的,所以应修改原文,不是添加)
# egrep -c '(vmx|svm)' /proc/cpuinfo
如果这个命令返回了 zero 值,那么你的计算节点不支持硬件加速。你必须配置 libvirt 来使用 QEMU 去代替 KVM
在 /etc/nova/nova-compute.conf 文件的 [libvirt] 区域做出如下编辑:
[libvirt]
...
virt_type = qemu
# service nova-compute restart
5.3 验证操作
在控制节点执行以下操作。
# . admin-openrc
# openstack compute service list
该输出应该如图显示三个服务组件在控制节点上启用,一个服务组件在计算节点上启用。
6 网络服务——neutron组件安装
6.1 创建neutron数据库
在控制节点执行以下操作。
# mysql -u root -p
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
IDENTIFIED BY '1234';
其中1234是为neutron数据库设置的密码。
exit
6.2创建服务证书和服务API端点
在控制节点执行以下操作。
# . admin-openrc
# openstack user create --domain default --password-prompt neutron
需要为neutron用户设置密码,统一设置为1234。
# 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
6.3 控制节点安装与配置
在控制节点执行以下操作。
# apt-get install neutron-server neutron-plugin-ml2 \
neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent \
neutron-metadata-agent
[DEFAULT]
...
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = True
rpc_backend = rabbit
auth_strategy = keystone
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
(注意第一行在原文中是存在的。)
[database]
...
connection = mysql+pymysql://neutron:1234@controller/neutron
(注意删除原文中包含connection的一行。)
其中1234为6.1中设置的database数据库密码。
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
其中1234为2.5中设置的密码。
[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 = 1234
其中1234为6.2中设置的密码。
[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 = 1234
其中1234为5.2中设置的密码。
[ml2]
...
type_drivers = flat,vlan,vxlan
tenant_network_types = vxlan
mechanism_drivers = linuxbridge,l2population
extension_drivers = port_security
[ml2_type_flat]
...
flat_networks = provider
[ml2_type_vxlan]
...
vni_ranges = 1:1000
[securitygroup]
...
enable_ipset = True
[linux_bridge]
physical_interface_mappings = provider:eth1
其中eth1为控制节点主机的第二块网卡名,请参考图1.2。
[vxlan]
enable_vxlan = True
local_ip = 192.168.0.100
l2_population = True
其中,192.168.0.100为控制节点管理网络ip,参考图1.2。
[securitygroup]
...
enable_security_group = True
firewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True
[DEFAULT]
...
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True
[DEFAULT]
...
nova_metadata_ip = controller
metadata_proxy_shared_secret = 1234
其中1234人为设置的密码。
[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 = 1234
service_metadata_proxy = True
metadata_proxy_shared_secret = 1234
# 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
# service nova-api restart
# service neutron-server restart
# service neutron-linuxbridge-agent restart
# service neutron-dhcp-agent restart
# service neutron-metadata-agent restart
# service neutron-l3-agent restart
(注:最后一条命令是重启L3服务,是私有网特有的)
6.4 计算节点安装与配置
在计算节点执行以下操作。
# apt-get install neutron-linuxbridge-agent
[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = 1234
[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 = 1234
[linux_bridge]
physical_interface_mappings = provider:eth1
其中eth1为计算节点主机第二块网卡名称,请参考图1.2。
[vxlan]
enable_vxlan = True
local_ip = 192.168.0.101
l2_population = True
[securitygroup]
...
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
[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 = 1234
# service nova-compute restart
# service neutron-linuxbridge-agent restart
6.5 验证操作
在控制节点执行以下操作。
# . admin-openrc
# neutron agent-list
输出结果应该包括控制节点上的四个代理和每个计算节点上的一个代理。注意alive一行应该是笑脸,不应该是xxx 。
7 图形界面服务——horizon组件安装
7.1 安装与配置
在控制节点执行以下操作。
# apt-get install openstack-dashboard
(注:以下变量设置大多能在原文件中找到,请在原文件中修改,不要重复添加)
OPENSTACK_HOST = "controller"
ALLOWED_HOSTS = ['*', ]
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'controller:11211',
}
}
(注:SESSION_ENGINE这个变量在原文件中是没有的,但CACHES这个变量是有的。所以应在CACHES变量前添加SESSION_ENGINE变量这一行,并修改CACHES变量。)
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 2,
}
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "default"
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
(注:这里是与公有网络选项即网络选项1的区别所在,此处不必配置禁用3层网络服务)
WSGIApplicationGroup %{GLOBAL}
# service apache2 reload
7.2 验证操作
用可访问管理网络的浏览器访问http://192.168.0.100/horizon
7.3 可能出现的错误及解决方法
如果访问网址出现如下图的错误。
可尝试修改/etc/openstack-dashboard/local_settings.py文件,将
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
改为
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
8 创建实例
8.1 创建提供者网络
在控制节点执行以下操作。
# . admin-openrc
# neutron net-create --shared --provider:physical_network provider \
--provider:network_type flat provider
# neutron subnet-create --name provider \
--allocation-pool start=192.168.1.150,end=192.168.1.199 \
--dns-nameserver DNS_RESOLVER --gateway 192.168.1.1 \
provider 192.168.1.0/24
其中,192.168.1.0/24是路由器2的子网,请参考图1.2。start=192.168.1.150,end=192.168.1.199是为以后生成实例分配IP地址的范围。
设置开始和结束地址时,应先了解路由器的DHCP服务器的地址池范围,如下图所示。可以看到地址池是192.168.1.100到192.168.1.199,我们设置的地址范围应在地址池范围内。
8.2 创建实例
在控制节点执行以下操作。
# openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
# . demo-openrc
# ssh-keygen -q -N ""
# openstack keypair create --public-key /root/.ssh/id_rsa.pub mykey
# openstack keypair list
# openstack security group rule create --proto icmp default
# openstack security group rule create --proto tcp --dst-port 22 default
# . demo-openrc
# openstack network list
(注:读者看到的输出应该只有provider一行,请注意provider这个网络ID在下面会用到。)
# openstack server create --flavor m1.nano --image cirros \
--nic net-id=b5b6993c-ddf9-40e7-91d0-86806a42edb8 \
--security-group default --key-name mykey provider-instance
# openstack server list
当构建过程完全成功后,状态会从 BUILD``变为``ACTIVE。
8.3 访问实例
在控制节点执行以下操作。
# ssh [email protected]
其中192.168.1.151为实例的ip地址
# ping openstack.org
# ping 192.168.1.1
8.4 添加私有网络
在能访问192.168.0.100的电脑上执行以下操作。这里使用图形界面创建私有网。
(1)在浏览器输入网址 http://192.168.0.100/horizon
输入如图所示账号,密码为1234。
(2) 点击左边Project -> Network -> Network Topology
注:DNS服务器地址要设置一个控制节点和计算节点都能连接上的。
8.5 添加虚拟路由器
在添加私有网的页面,执行以下操作。