OpenStack 网络(neutron) ...............................................................................48
传统网络(nova-network) ..................................................................................67
下一步..............................................................................................................69
在OpenStack上配置网络服务会是一个令人惊讶的经验。这个指引为OpenStack网络服务(neutron)和传统网络服务(nova-network)提供了一步一步的说明。如果你不确定使用哪个,我们建议你使用Openst网络服务,因为它提供了相当多的功能和包括了适用于各种新兴支持虚拟网络服务的产品的插件的灵活性。可以看在the OpenStack Cloud Administrator Guide中的Networking章节得到更多信息。
OpenStack 网络(neutron)管理了全部的对于虚拟网络结构(VNI)的网络面和在你的OpenStack环境上的物理网络结构的可访问层方面。Openst网络允许租户创建高级虚拟网络拓扑,包括如防火墙,负载均衡和VPN的服务。
网络服务由以下对象抽象概念:网络,子网和路由器。每一个都有它模仿它物理副本的功能:网络包含子网,路由器路由管理不同子网和网络之间的交流。
每一个设置的网络都至少有一个外部网络。这个网络不像其他网络,它不仅仅是个定义上的网络。相反,它代表了观察外部网络的一个切片,能够访问OpenStack设备的外部。外部网络的IP地址对于物理上在外部网络的任何人都是可访问的。因为这个网络仅表示外部网络的一个切片,所以这个网络上禁用DHCP。
除了外部网络,任何网络设置都有一个或多个内部网络。这些软件定义的网络直接连接到虚拟机。只有在任何给定的内部网络上的虚拟机,或者通过接口连在一个类似路由器上的子网上的虚拟机,可以直接访问连接在该网络的虚拟机。
对于外网访问虚拟机,反之,网络之间的路由器也是需要的。每一个路由器都有一个网关来连接一个网络和许多接口去连接子网。像物理路由器,子网可以访问连接在同一个路由器上的其他子网,机器也可以访问通过路由器的网关连接的外网。
另外,你可以分配外部网络的IP地址到内网的端口。不论什么时候某个连接在子网上,这个连接叫做一个端口。你可以用虚拟机的端口来关联外网的IP地址。这样,外部的实体就可以访问虚拟机。
网络也支持安全组。安全组使管理用户去定义组内的防火墙规则。一个虚拟机可以属于一个或者多个安全组,而且网络提供了提供了这些安全组的规则去阻塞或者解锁虚拟机的端口,端口范围或者流通类型。
每个网络使用的插件都有它自己的概念。当操作网络不重要,去理解这些概念可以帮助你设置网络。所有的网络设备使用一个核心插件和一个安全组插件(或者只是无操作安全组插件)。另外,防火墙服务(FWaaS)和负载均衡服务(LBaaS)插件也可。
在你配置OpenStack网络时(neutron),你必须创建一个数据库和认证包括一个用户和服务的身份服务。
1.作为root用户连接数据库,创建neutron数据库,而且授予适当的权限访问它:
用一个合适的密码来代替Neutron_dbpass。
$ mysql -u root -p
mysql> CREATE DATABASE neutron;
mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
IDENTIFIED BY 'NEUTRON_DBPASS';
mysql> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
IDENTIFIED BY 'NEUTRON_DBPASS';
2.为网络创建身份服务认证:
a. 创建neutron用户:
用一个合适的密码代替NEUTRON_PASS并用和社的e—mail地址来代替[email protected]。
$ keystone user-create --name neutron --pass NEUTRON_PASS --
email [email protected]
b. 连接neutron用户到服务租户和admin角色。
$ keystone user-role-add --user neutron --tenant service --role admin
c.创建neutron服务:
$ keystone service-create --name neutron --type network --description
"OpenStack Networking"
d.创建服务终端:
$ keystone endpoint-create \
--service-id $(keystone service-list | awk '/ network / {print $2}')
\
--publicurl http://controller:9696 \
--adminurl http://controller:9696 \
--internalurl http://controller:9696
# yum install openstack-neutron openstack-neutron-ml2 python-neutronclient
网络服务器组件配置包括数据库,验证机制,消息代理,拓扑变化通知和插件。
1. 配置网络使用数据库:
用合适密码代替NEUTRON_DBPASS。
# openstack-config --set /etc/neutron/neutron.conf database connection \
mysql://neutron:NEUTRON_DBPASS@controller/neutron
2. 配置网络使用身份服务来认证:
在身份服务使用你为neutron用户选择的密码来代替NEUTRON_PASS。
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
auth_strategy keystone
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
auth_uri http://controller:5000
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
auth_host controller
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
auth_protocol http
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
auth_port 35357
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
admin_tenant_name service
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
admin_user neutron
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
admin_password NEUTRON_PASS
3. 配置网络使用消息代理:
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
rpc_backend neutron.openstack.common.rpc.impl_qpid
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
qpid_hostname controller
4. 配置网络来通知计算服务有关于网络拓扑变化:
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
notify_nova_on_port_status_changes True
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
notify_nova_on_port_data_changes True
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
nova_url http://controller:8774/v2
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
nova_admin_username nova
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
nova_admin_tenant_id $(keystone tenant-list | awk '/ service / { print
$2 }')
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
nova_admin_password NOVA_PASS
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
nova_admin_auth_url http://controller:35357/v2.0
5. 配置网络使用模块化层2(ML2)插件和相关服务:
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
core_plugin ml2
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
service_plugins router
注意
我们建议添加verbose = True到在/etc/neutron/neutron.conf里的[DEFAULT]选项来协助故障排除。
ML2插件使用Open vSwitch(OVS)机制(agent)来建立虚拟网络实例框架。然而,因为控制器节点不能处理实例网络流量,所以控制器节点不需要OVS节点。
-运行下面的指令:
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
type_drivers gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
tenant_network_types gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
mechanism_drivers openvswitch
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini
ml2_type_gre \
tunnel_id_ranges 1:1000
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini
securitygroup \
firewall_driver neutron.agent.linux.iptables_firewall.
OVSHybridIptablesFirewallDriver
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini
securitygroup \
enable_security_group True
默认情况下,大部分发行版配置的计算都使用传统网络。你必须重新配置计算通过网络服务管理网络。
-运行下面的指令:
用你为在身份服务的neutron用户选择的密码代替NEUTRON_PASS。
# openstack-config --set /etc/nova/nova.conf DEFAULT \
network_api_class nova.network.neutronv2.api.API
# openstack-config --set /etc/nova/nova.conf DEFAULT \
neutron_url http://controller:9696
# openstack-config --set /etc/nova/nova.conf DEFAULT \
neutron_auth_strategy keystone
# openstack-config --set /etc/nova/nova.conf DEFAULT \
neutron_admin_tenant_name service
# openstack-config --set /etc/nova/nova.conf DEFAULT \
neutron_admin_username neutron
# openstack-config --set /etc/nova/nova.conf DEFAULT \
neutron_admin_password NEUTRON_PASS
# openstack-config --set /etc/nova/nova.conf DEFAULT \
neutron_admin_auth_url http://controller:35357/v2.0
# openstack-config --set /etc/nova/nova.conf DEFAULT \
linuxnet_interface_driver nova.network.linux_net.LinuxOVSInterfaceDriver
# openstack-config --set /etc/nova/nova.conf DEFAULT \
firewall_driver nova.virt.firewall.NoopFirewallDriver
# openstack-config --set /etc/nova/nova.conf DEFAULT \
security_group_api neutron`<br><br>
注意
默认情况下,计算使用内部网络防火墙服务。因为网络包括一个防火墙服务,所以你必须通过使用nova.virt.firewall.NoopFirewallDriver防火墙驱动程序禁用计算防火墙服务。
1.网络服务初始化脚本预期一个符号链接/etc/neutrom/plugin.ini指向你和你选择的插件联系的配置文件。使用ML2,例如,符号链接必须指向/etc/neutron/plugins/ml2/ml2_conf.ini。如果这个符号链接不存在,使用下面的指令创建它:
# ln -s plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
2.重启计算服务:
# service openstack-nova-api restart
# service openstack-nova-scheduler restart
# service openstack-nova-conductor restart
3.启动网络服务,配置它系统开启时启动:
# service neutron-server start
# chkconfig neutron-server on
注意
不想其他服务,网络典型的不需要一个单独的步骤来填充数据库,因为neutrom-server服务已经自动填充数据库。然而,有时候这些版本的包 需要在启动neutron-server之前运行neutrom-db-manage指令。我们建议在手动填充数据库之前尝试启动这个服务。如果这个服务返回数据看 错误,执行下面操作:
1.配置网络使用长插件名:
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
core_plugin neutron.plugins.ml2.plugin.Ml2Plugin
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
service_plugins neutron.services.l3_router.
l3_router_plugin.L3RouterPlugin
2.填充数据库:
# su -s /bin/sh -c "neutron-db-manage --config-file /etc/
neutron/neutron.conf \
--config-file /etc/neutron/plugin.ini upgrade head"
neutron
3.尝试再次启动noutron-server服务。你可以返回core_plugin和service_plugins配置项给短插件名。
在你配置OpenStack网络之前,你必须启动某些内核网络功能。
-
编辑/etc/sysctl.conf来包含下列内容:
net.ipv4.ip_forward=1 net.ipv4.conf.all.rp_filter=0 net.ipv4.conf.default.rp_filter=0
2.确定改变:
# sysctl -p
# yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-openvswitch
网络普通组件配置包含认证机制,消息代理和插件。
-
配置网络使用身份服务来认证:
使用你选择的在身份服务的neutron用户的密码来代替NEUTRON_PASS。auth_strategy keystone
auth_uri http://controller:5000
auth_host controller
auth_protocol http
auth_port 35357
admin_tenant_name service
admin_user neutron
admin_password NEUTRON_PASS 2.配置网络使用消息代理:
rpc_backend neutron.openstack.common.rpc.impl_qpid
qpid_hostname controller 3.配置网络使用模块化层2(ML2)插件和相关服务:
core_plugin ml2
service_plugins router 注意
我们建议添加verbose=true进入/etc/neutron/neutron.conf的[DEFAULT]项来协助故障排除。
Layer-3(L3)为实例虚拟网络提供路由服务。
运行下面的指令:
# openstack-config --set /etc/neutron/l3_agent.ini DEFAULT \
interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
# openstack-config --set /etc/neutron/l3_agent.ini DEFAULT \
use_namespaces True
注意 我们建议添加verbose=true进入/etc/neutron/l3_agent.ini的[DEFAULT]项来协助故障排除。
DHCP代理为实例虚拟网络提供DHCP服务。
-
运行下列指令:
interface_driver neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver neutron.agent.linux.dhcp.Dnsmasq
use_namespaces True 注意
我们建议添加verbose = True进入/etc/neutron/dhcp_agent.ini的[DEFAULT]项来协助故障排除。
2.隧道协议例如通用路由封装(GRE)包括这种增加开销和用于有效载荷或用户数据的减少空间的额外数据包报头。没有对虚拟网络框架的认识下,实例尝试使用1500字节的默认的以太网最大传输单元(MTU)来发送数据包。互联网协议(IP)网络包含MTU路径发现(PMTUD)机制来检测端至端的MTU并相应调整分组的大小。然而一些操作系统和网络阻塞或者其他的缺乏对于PMTUD导致了性能下降或者连接故障。
理想的情况下,你可以预防这些问题通过使用包含你的租户虚拟网络的物理网络上的巨型帧。巨型帧支持MTUS到大约9000个字节能够抵消GRE的在虚拟网络上的影响。然而,许多网络设备缺乏巨型帧的支持和OpenStack管理者缺乏对网络框架的控制。鉴于后面的并发,你可以预防MTU问题通过减少实例MTU值占GRE的开销。确定适合的MTU值需要实验,但是1454字节在大部分环境下有用。你可以配置DHCP服务器来分配IP地址进入你的实例来调整MTU值。
注意
一些云镜像例如CirrOS忽略了DHCPMTU选项。
a.运行下面指令:dnsmasq_config_file /etc/neutron/dnsmasq-neutron.conf b.创建和编辑/etc/neutron/dnsmasq-neutron.conf文件和添加下面的值:
dhcp-option-force=26,1454 c.终结任何的dnsmasq进程:
元数据代理提供配置信息比如远程访问实例的凭证。
1.运行下面指令:
使用你选择的在身份服务里的neutron用户的密码来代替NEUTRON_PASS。用一个合适的元数据代理的私密数来代替METEDATA_SECRET。
# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
auth_url http://controller:5000/v2.0
# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
auth_region regionOne
# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
admin_tenant_name service
# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
admin_user neutron
# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
admin_password NEUTRON_PASS
# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
nova_metadata_ip controller
# openstack-config --set /etc/neutron/metadata_agent.ini DEFAULT \
metadata_proxy_shared_secret METADATA_SECRET
注意
我们建议添加verbose = True进入/etc/neutron/metadata_agent.ini的[DEFAULT]项来协助故障排除。
2.
注意
在控制器节点上执行下面两步。
3.在控制器节点上,配置计算使用元数据服务:
使用你为元数据代理使用的秘密数代替METEDATA_SECRET。
# openstack-config --set /etc/nova/nova.conf DEFAULT \
service_neutron_metadata_proxy true
# openstack-config --set /etc/nova/nova.conf DEFAULT \
neutron_metadata_proxy_shared_secret METADATA_SECRET
4.在控制器节点上,重启计算API服务:
# service openstack-nova-api restart
ML2插件使用Open vSwitch(OVS)机制(agent)来建立虚拟网络实例框架。
-运行下面指令:
使用在你的网络节点上的实例隧道网络接口的IP地址来代替INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS。这个指引使用了10.0.1.21来作为网络节点上的实例隧道网络接口的IP地址。
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
type_drivers gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
tenant_network_types gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
mechanism_drivers openvswitch
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini
ml2_type_gre \
tunnel_id_ranges 1:1000
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \
local_ip INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \
tunnel_type gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \
enable_tunneling True
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini
securitygroup \
firewall_driver neutron.agent.linux.iptables_firewall.
OVSHybridIptablesFirewallDriver
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini
securitygroup \
enable_security_group True
OVS服务提供了底层的虚拟网络实例框架。这个内部桥br-int处理OVS的内部的实例网络流通。外部桥br-ex处理OVS的外部实例网络流通。外部桥需要一个在物理外部网接口的端口来提供外部网实例的访问。本质上,这个端口在你的环境上桥接了虚拟机和物理上的外部网。
-
启动OVS服务和配置它随系统启动而启动:
2.添加内部桥:
# ovs-vsctl add-br br-int
3.添加外桥:
# ovs-vsctl add-br br-ex
4.为连接物理外部网接口的外部桥添加一个端口:
使用真实的接口名来代替INTERFACE_NAME,例如,eth2或者eth256。
# ovs-vsctl add-port br-ex INTERFACE_NAME
注意
根据你的网络接口驱动,你可能需要通过禁用通用接受卸载(GRO)来实现你的实例和外网之间的合适吞吐量。
在测试你的环境是暂时禁用你的外网接口上的GRO:
# ethtool -K INTERFACE_NAME gro off
1.网络服务初始化脚本需要一个符号链接/etc/neutron/plugin.ini指向与你选择插件有关的配置文件。
使用ML2插件,例如,符号链接必须指向/etc/neutron/plugins/ml2/ml2_conf.ini。如果符号链接不存在,使用下面的命令创建一个:
# ln -s plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
由于包装错误,Open vSwitch代理初始化脚本明确查找Open vSwitch插件配置文件而不是一个指向ML2插件配置文件的符号链接/etc/neutron/plugin.ini。运行下面的指令解决这个问题:
# cp /etc/init.d/neutron-openvswitch-agent /etc/init.d/neutronopenvswitch-
agent.orig
# sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' /etc/
init.d/neutron-openvswitch-agent
2.启动网络服务和配置它们虽系统启动也启动:
# service neutron-openvswitch-agent start
# service neutron-l3-agent start
# service neutron-dhcp-agent start
# service neutron-metadata-agent start
# chkconfig neutron-openvswitch-agent on
# chkconfig neutron-l3-agent on
# chkconfig neutron-dhcp-agent on
# chkconfig neutron-metadata-agent on
在你配置OpenStack网络钱,你必须启动一下内核网络功能。
1.编辑/etc/sysctl.conf包含下面内容:
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
2.明确改变:
# sysctl -p
# yum install openstack-neutron-ml2 openstack-neutron-openvswitch
网络通用组件配置包括认证机制,消息代理和插件。
1.配置网络使用身份服务来认证:
使用你在身份服务中的neutron用户的密码来代替NEUTRON_PASS。
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
auth_strategy keystone
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
auth_uri http://controller:5000
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
auth_host controller
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
auth_protocol http
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
auth_port 35357
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
admin_tenant_name service
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
admin_user neutron
# openstack-config --set /etc/neutron/neutron.conf keystone_authtoken \
admin_password NEUTRON_PASS
2.配置网络使用消息代理:
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
rpc_backend neutron.openstack.common.rpc.impl_qpid
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
qpid_hostname controller
3.配置网络使用模块化层2(ML2)插件和相关服务。
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
core_plugin ml2
# openstack-config --set /etc/neutron/neutron.conf DEFAULT \
service_plugins router
注意
我们建议添加verbose = True进入/etc/neutron/neutron.conf的[DEFAULT]项来协助故障排除。
ML2插件使用Open vSwitch(OVS)机制(agent)来建立虚拟网络实例框架。
-运行下面的指令:
使用在你的计算节点上的实例隧道网络接口来代替INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS。这个指引使用10.0.1.31来作为在你的第一个计算节点上的实例隧道网络接口的IP地址。
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
type_drivers gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
tenant_network_types gre
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 \
mechanism_drivers openvswitch
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini
ml2_type_gre \
tunnel_id_ranges 1:1000
# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini ovs \
OVS服务提供了底层网络实例框架。这个内部桥br-int处理OVS中的内部网络流通。
1.启动OVS服务和配置其随系统开启就启动:
# service openvswitch start
# chkconfig openvswitch on
2.添加内部桥:
# ovs-vsctl add-br br-int
默认情况下,大部分的发行版配置的计算使用传统网络,你不想重新配置计算来通过网络服务来管理网络。
-运行下面的指令
使用你在身份服务上的neutron用户的密码来代替NEUTRON_PASS。
# openstack-config --set /etc/nova/nova.conf DEFAULT \
network_api_class nova.network.neutronv2.api.API
# openstack-config --set /etc/nova/nova.conf DEFAULT \
neutron_url http://controller:9696
# openstack-config --set /etc/nova/nova.conf DEFAULT \
neutron_auth_strategy keystone
# openstack-config --set /etc/nova/nova.conf DEFAULT \
neutron_admin_tenant_name service
# openstack-config --set /etc/nova/nova.conf DEFAULT \
neutron_admin_username neutron
# openstack-config --set /etc/nova/nova.conf DEFAULT \
neutron_admin_password NEUTRON_PASS
# openstack-config --set /etc/nova/nova.conf DEFAULT \
neutron_admin_auth_url http://controller:35357/v2.0
# openstack-config --set /etc/nova/nova.conf DEFAULT \
linuxnet_interface_driver nova.network.linux_net.LinuxOVSInterfaceDriver
# openstack-config --set /etc/nova/nova.conf DEFAULT \
firewall_driver nova.virt.firewall.NoopFirewallDriver
# openstack-config --set /etc/nova/nova.conf DEFAULT \
security_group_api neutron
注意
默认情况下,计算使用内部防火墙服务。因为网络包括了一个防火墙服务,你必须使用nova.virt.firewall.NoopFirewallDriver防火墙驱动来禁用计算的防火墙服务。