CONTENTS
1、neutron网络介绍
2、neutron配置
2.1 安装并配置controller节点
2.2 安装并配置network节点
2.3 安装并配置compute节点
2.4 配置外部网络
1、neutron网络介绍
(1)neutron基本概念
- 网络连接服务
- 面向租户API接口,用于创建虚拟网络、路由器、负载均衡、关联网络接口至指定网络和路由
- 通过API接口管理虚拟或物理交换机
- 提供Plugin架构来支持不同的技术平台
- Neutron Private Network——提供固定私网地址
- Neutron Public Network——提供浮动IP 地址
(2)neutron关键概念
- Network
- 一个L2网络单元
- 租户可通过Neutron API创建自己的网络
- Subnet
- 一段IPV4/IPV6 地址段
- 为Instance提供私网或公网地址
- Router
- 三层路由器
- 为租户的Instance 提供路由功能
- Port
- 虛拟交换机上的端口
- 管理Instance 的网卡
(3)组件架构
(4)neutron plugin
- Open vSwitch
- Linux Bridge
- Ciso NX1000
- Nicira NVP
- Ryu
- NEC OpenFlow
- Floodnight
(5)neutron+Nova架构
(6)neutron组件
组件沟通方式
(7)neutron常见的构建类型
- Single FLAT Network
- Multi FLAT Ne twork
- Mixed FLAT and Private Network
- Provider Router with Private Network
- Per-tenant Routers with Private Network
2、neutron配置
2.1 安装并配置controller节点
(1)创建数据库,完成下列步骤:
#a.使用root用户连接mysql数据库
mysql -u root -p
#b.创建neutron数据库
CREATE DATABASE neutron;
#c.创建数据库用户neutron,并授予neutron用户对neutron数据库完全控制权限
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';
d.退出数据库连接
(2)执行admin环境变量脚本并在认证服务中创建网络服务的认证信息,完成下列步骤:
source admin.sh
#a.创建neutron用户
keystone user-create --name neutron --pass NEUTRON_PASS
#b.连接neutron用户到serivce租户和admin角色
keystone user-role-add --user neutron --tenant service --role admin
#c.创建neutron服务
keystone service-create --name neutron --type network --description "OpenStackNetworking"
#d.创建neutron服务端点
keystone endpoint-create \
--service-id $(keystone service-list | awk '/ network / {print $2}') \
--publicurl http://controller.nice.com:9696 \
--adminurl http://controller.nice.com:9696 \
--internalurl http://controller.nice.com:9696 \
--region regionOne
(3)安装网络服务组件并配置
#安装
yum install openstack-neutron openstack-neutron-ml2 python-neutronclient which -y
#配置网络服务组件
#编辑/etc/neutron/neutron.conf文件,并完成下列操作:
#a.编辑[database]小节,配置数据库访问
[database]
...
connection=mysql://neutron:NEUTRON_DBPASS@controller.nice.com/neutron
#b.编辑[DEFAULT]小节,配置RabbitMQ消息队列访问:
[DEFAULT]
...
rpc_backend=rabbit
rabbit_host=controller.nice.com
rabbit_password=guest
#c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务访问:
[DEFAULT]
...
auth_strategy=keystone
[keystone_authtoken]
...
auth_uri=http://controller.nice.com:5000/v2.0
identity_uri=http://controller.nice.com:35357
admin_tenant_name=service
admin_user=neutron
admin_password=NEUTRON_PASS
#d.编辑[DEFAULT]小节,启用Modular Layer2(ML2)插件,路由服务和重叠IP地址功能:
[DEFAULT]
...
core_plugin=ml2
service_plugins=router
allow_overlapping_ips=True
#e.编辑[DEFAULT]小节,配置当网络拓扑结构发生变化时通知计算服务:
[DEFAULT]
...
notify_nova_on_port_status_changes=True
notify_nova_on_port_data_changes=True
nova_url=http://controller.nice.com:8774/v2
nova_admin_auth_url=http://controller.nice.com:35357/v2.0
nova_region_name=regionOne
nova_admin_username=nova
nova_admin_password=NOVA_PASS
nova_admin_tenant_id=SERVICE_TENANT_ID
注:可通过keystone tenant-get service,获取service租户ID。
#f.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
verbose=True
(4)配置Modular Layer 2 (ML2) plug-in
编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件,并完成下列操作:
#a.编辑[ml2]小节,启用flat和generic routing encapsulation (GRE)网络类型驱动,配置GRE租户网络和OVS驱动机制。
[ml2]
...
type_drivers=flat,gre
tenant_network_types=gre
mechanism_drivers=openvswitch
#b.编辑[ml2_type_gre]小节,配置隧道标识范围:
[ml2_type_gre]
...
tunnel_id_ranges=1:1000
#c.编辑[securitygroup]小节,启用安全组,启用ipset并配置OVS防火墙驱动:
[securitygroup]
...
enable_security_group=True
enable_ipset=True
firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
(5)配置计算服务使用Neutron
默认情况下,计算服务使用传统网络,我们需要重新配置。
编辑/etc/nova/nova.conf文件,并完成下列操作:
#a.编辑[DEFAULT]小节,配置API接口和驱动程序:
[DEFAULT]
...
network_api_class=nova.network.neutronv2.api.API
security_group_api=neutron
linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver=nova.virt.firewall.NoopFirewallDriver
#b.编辑[neutron]小节,配置访问参数:
[neutron]
...
url=http://controller.nice.com:9696
auth_strategy=keystone
admin_auth_url=http://controller.nice.com:35357/v2.0
admin_tenant_name=service
admin_username=neutron
admin_password=NEUTRON_PASS
(6)完成配置
#1、为ML2插件配置文件创建连接文件。
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
#2、初始化数据库
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade juno" neutron
#3、重新启动计算服务
systemctl restart openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service
#4、启动网络服务并配置开机自动启动
systemctl enable neutron-server.service
systemctl start neutron-server.service
(7)验证
1、执行admin环境变量脚本
source admin.sh
2、列出加载的扩展模块,确认成功启动neutron-server进程。
# neutron ext-list
2.2 安装并配置network节点
(1)配置先决条件
#1、编辑/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
(2)安装网络组件并配置
yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-openvswitch
配置网络通用组件,网络通用组件配置包含认证机制,消息队列及插件。
编辑/etc/neutron/neutron.conf文件并完成下列操作:
a.编辑[database]小节,注释任何connection选项。因为network节点不能直接连接数据库。
b.编辑[DEFAULT]小节,配置RabbitMQ消息队列访问
[DEFAULT]
...
rpc_backend=rabbit
rabbit_host=controller.nice.com
rabbit_password=guest
c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务访问:
[DEFAULT]
...
auth_strategy=keystone
[keystone_authtoken]
...
auth_uri=http://controller.nice.com:5000/v2.0
identity_uri=http://controller.nice.com:35357
admin_tenant_name=service
admin_user=neutron
admin_password=NEUTRON_PASS
d.编辑[DEFAULT]小节,启用Modular Layer2(ML2)插件,路由服务和重叠IP地址功能:
[DEFAULT]
...
core_plugin=ml2
service_plugins=router
allow_overlapping_ips=True
e.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错
[DEFAULT]
...
verbose=True
(3)配置Modular Layer 2 (ML2) plug-in
ML2插件使用Open vSwitch(OVS)机制为虚拟机实例提供网络框架。
编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件并完成下列操作:
#a.编辑[ml2]小节,启用flat和generic routing encapsulation (GRE)网络类型驱动,配置GRE租户网络和OVS驱动机制。
[ml2]
...
type_drivers=flat,gre
tenant_network_types=gre
mechanism_drivers=openvswitch
#b.编辑[ml2_type_flat]小节,配置外部网络:
[ml2_type_flat]
...
flat_networks=external
#c.编辑[ml2_type_gre]小节,配置隧道标识范围:
[ml2_type_gre]
...
tunnel_id_ranges=1:1000
#d.编辑[securitygroup]小节,启用安全组,启用ipset并配置OVS防火墙驱动:
[securitygroup]
...
enable_security_group=True
enable_ipset=True
firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver、
#e.编辑[ovs]小节,配置Open vSwitch(OVS) 代理
[ovs]
...
local_ip=172.16.0.11
tunnel_type=gre
enable_tunneling=True
bridge_mappings=external:br-ex
(4)配置Layer-3 (L3) agent
编辑/etc/neutron/l3_agent.ini文件并完成下列配置:
#a.编辑[DEFAULT]小节,配置驱动,启用网络命名空间,配置外部网络桥接
[DEFAULT]
...
interface_driver= neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces=True
external_network_bridge=br-ex
#b.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
verbose=True
(5)配置DHCP agent
#1、编辑/etc/neutron/dhcp_agent.ini文件并完成下列步骤:
#a.编辑[DEFAULT]小节,配置驱动和启用命名空间
[DEFAULT]
...
interface_driver=neutron.agent.linux.interface.OVSInterfaceDriver
dhcp_driver=neutron.agent.linux.dhcp.Dnsmasq
use_namespaces=True
#b.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
debug=True
#2、(可选,在VMware虚拟机中可能是必要的!)配置DHCP选项,将MUT改为1454bytes,以改善网络性能。
#a.编辑/etc/neutron/dhcp_agent.ini文件,先编辑[DEFAULT]小节,启用dnsmasq配置:
[DEFAULT]
...
dnsmasq_config_file=/etc/neutron/dnsmasq-neutron.conf
#b.创建并编辑/etc/neutron/dnsmasq-neutron.conf文件并完成下列配置:
启用DHCP MTU选项(26)并配置值为1454bytes
dhcp-option-force=26,1454
user=neutron
group=neutron
#c.终止任何已经存在的dnsmasq进行,shell中敲下面这个命令
pkill dnsmasq
(6)配置metadata agent
#1、编辑/etc/neutron/metadata_agent.ini文件并完成下列配置:
#a.编辑[DEFAULT]小节,配置访问参数:
[DEFAULT]
...
auth_url=http://controller.nice.com:5000/v2.0
auth_region=regionOne
admin_tenant_name=service
admin_user=neutron
admin_password=NEUTRON_PASS
#b.编辑[DEFAULT]小节,配置元数据主机:
[DEFAULT]
...
nova_metadata_ip=controller.nice.com
#c.编辑[DEFAULT]小节,配置元数据代理共享机密暗号:
[DEFAULT]
...
metadata_proxy_shared_secret=METADATA_SECRET
#b.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
debug=True
(7)下面需要在controller节点配置
#编辑/etc/nova/nova.conf文件并完成下列配置
#编辑[neutron]小节,启用元数据代理并配置机密暗号:
[neutron]
...
service_metadata_proxy=True
metadata_proxy_shared_secret=METADATA_SECRET
#在controller节点,重新启动computeAPI服务
systemctl restart openstack-nova-api.service
(8)回到neutron节点上来,配置Open vSwitch(OVS)服务
#1、启动VOS服务并配置开机自动启动:
systemctl enable openvswitch.service
systemctl start openvswitch.service
#2、添加外部网桥(external birdge)
ovs-vsctl add-br br-ex
#3、添加一个端口到外部网桥,用于连接外部物理网络
ovs-vsctl add-port br-ex INTERFACE_NAME
注:将INTERFACE_NAME换成实际连接外部网卡接口名。如:eth2或eno50332208。
(9)完成安装
1、创建网络服务初始化脚本的符号连接
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
cp/usr/lib/systemd/system/neutron-openvswitch-agent.service /usr/lib/systemd/system/neutron-openvswitch-agent.service.orig
sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' /usr/lib/systemd/system/neutron-openvswitch-agent.service
2、启动网络服务并设置开机自动启动
systemctl enable neutron-openvswitch-agent.service neutron-l3-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-ovs-cleanup.service
systemctl start neutron-openvswitch-agent.service neutron-l3-agent.service neutron-dhcp-agent.service neutron-metadata-agent.service neutron-ovs-cleanup.service
(10)验证(在controller节点执行下列命令)
1、执行admin环境变量脚本
source admin.sh
2、列出neutron代理,确认启动neutron agents成功。
neutron agent-list
2.3 安装并配置compute节点
(1)配置先决条件
#1、编辑/etc/sysctl.conf文件,使其包含下列参数:
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0
#2、使/etc/sysctl.conf文件中的更改生效:
sysctl -p
(2)安装网络组件并配置网络通用组件
yum install openstack-neutron-ml2 openstack-neutron-openvswitch
#编辑/etc/neutron/neutron.conf文件并完成下列操作:
#a.编辑[database]小节,注释左右connection配置项。因为计算节点不能直接连接数据库。
#b.编辑[DEFAULT]小节,配置RabbitMQ消息代理访问:
[DEFAULT]
...
rpc_backend=rabbit
rabbit_host=controller.nice.com
rabbit_password=guest
#c.编辑[DEFAULT]和[keystone_authtoken]小节,配置认证服务访问:
[DEFAULT]
...
auth_strategy=keystone
[keystone_authtoken]
...
auth_uri=http://controller.nice.com:5000/v2.0
identity_uri=http://controller.nice.com:35357
admin_tenant_name=service
admin_user=neutron
admin_password=NEUTRON_PASS
#d.编辑[DEFAULT]小节,启用Modular Layer2(ML2)插件,路由服务和重叠ip地址功能:
[DEFAULT]
...
core_plugin=ml2
service_plugins=router
allow_overlapping_ips=True
#e.(可选)在[DEFAULT]小节中配置详细日志输出。方便排错。
[DEFAULT]
...
verbose=True
(3)配置Modular Layer 2 (ML2) plug-in
编辑/etc/neutron/plugins/ml2/ml2_conf.ini文件并完成下列操作:
#a.编辑[ml2]小节,启用flat和generic routing encapsulation (GRE)网络类型驱动,GRE租户网络和OVS机制驱动:
[ml2]
...
type_drivers=flat,gre
tenant_network_types=gre
mechanism_drivers=openvswitch
#b.编辑[ml2_type_gre]小节,配置隧道标识符(id)范围:
[ml2_type_gre]
...
tunnel_id_ranges=1:1000
#c.编辑[securitygroup]小节,启用安装组,ipset并配置OVS iptables防火墙驱动:
[securitygroup]
...
enable_security_group=True
enable_ipset=True
firewall_driver=neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
#d.编辑[ovs]小节,配置Open vSwitch(OVS) agent:
[ovs]
...
local_ip=172.16.0.10
tunnel_type=gre
enable_tunneling=True
(4)配置Open vSwitch(OVS) service
启动OVS服务并设置开机自动启动:
systemctl enable openvswitch.service
systemctl start openvswitch.service
(5)配置计算服务使用网络
编辑/etc/nova/nova.conf文件并完成下列操作:
#a.编辑[DEFAULT]小节,配置API接口和驱动:
[DEFAULT]
...
network_api_class=nova.network.neutronv2.api.API
security_group_api=neutron
linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver=nova.virt.firewall.NoopFirewallDriver
#b.编辑[neutron]小节,配置访问参数:
[neutron]
...
url=http://controller.nice.com:9696
auth_strategy=keystone
admin_auth_url=http://controller.nice.com:35357/v2.0
admin_tenant_name=service
admin_username=neutron
admin_password=NEUTRON_PASS
(6)完成安装
#1、创建网络服务初始化脚本的符号连接
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
cp /usr/lib/systemd/system/neutron-openvswitch-agent.service /usr/lib/systemd/system/neutron-openvswitch-agent.service.orig
sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' /usr/lib/systemd/system/neutron-openvswitch-agent.service
#2、重启计算服务:
systemctl restart openstack-nova-compute.service
#3、启动OVS代理服务并设置开机自动启动:
systemctl enable neutron-openvswitch-agent.service
systemctl start neutron-openvswitch-agent.service
(7)验证(在controller节点执行下列命令)
1、执行admin环境变量脚本
source admin-openrc.sh
2、列出neutron代理,确认启动neutron agents成功。
neutron agent-list
2.4 配置外部网络
(1)创建一个外部网络
#1、执行admin环境变量脚本
source admin.sh
#2、创建网络
neutron net-create ext-net --shared --router:external True --provider:physical_network external --provider:network_typeflat
(2)创建一个外部网络的子网:例如,外网网段为:100.100.100.0/24,浮动地址范围为:100.100.100.12~100.100.100.240,网关为:100.100.100.11
(3)配置租户网络(在controller节点执行后面的命令),先执行demo环境变量脚本
# source demo-openrc.sh
(4)创建一个租户网络的子网,例如,租户网的网段为192.168.2.0/24,网关为192.168.2.1(网关通常默认为.1)
(5)在租户网络创建一个路由器,用来连接外部网和租户网
创建路由器:
附加路由器到demo租户的子网并通过设置网关,使路由器附加到外部网
(6)查看路由器获取到的IP。
(7)测试外网互通情况,查看100.100.100.0这个网络,修改vmnet3中的ip,测试与路由器互通情况。如下图,成功与路由器互通。