Neutron概览
Neutron中最为核心的工作便是对二层物理网络的抽象和管理
组成部分
- neutron-server :接收和路由API请求到合适的OpenStack网络插件,以达到预想的目的。
- OpenStack Networking plug-ins and agents:
插拔端口,创建网络和子网,以及提供IP地址,这些插件和代理依赖于供应商和技术而不同,OpenStack网络基于插件和代理为Cisco 虚拟和物理交换机、NEC OpenFlow产品,Open vSwitch,Linux bridging以及VMware NSX 产品穿线搭桥。
常见的代理L3(3层),DHCP(动态主机IP地址),以及插件代理。
- Messaging queue
大多数的OpenStack Networking安装都会用到,用于在neutron-server和各种各样的代理进程间路由信息。也为某些特定的插件扮演数据库的角色,以存储网络状态
控制节点数据库创建
为Neutron创建数据库
mysql -u root -p
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' \
IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' \
IDENTIFIED BY 'NEUTRON_DBPASS';
创建neutron用户和服务实例、端点
openstack user create --domain default --password-prompt 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
配置控制节点的网络选项(不支持私有网络)
安装服务和代理服务模块
apt-get install neutron-server neutron-plugin-ml2 \
neutron-linuxbridge-agent neutron-dhcp-agent \
neutron-metadata-agent
网络服务器(现在是controller节点)的配置修改
/etc/neutron/neutron.conf配置文件如下:
[database]
...
connection =mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
[DEFAULT]
...
core_plugin = ml2
service_plugins =
[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
[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 = NEUTRON_PASS
[DEFAULT]
...
notify_nova_on_port_status_changes = True
notify_nova_on_port_data_changes = True
[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 = NOVA_PASS
/etc/neutron/plugins/ml2/ml2_conf.ini
ML2插件使用Linux桥接机制为实例创建layer-2 (桥接/交换)虚拟网络基础设施
[ml2]
...
type_drivers = flat,vlan
[ml2]
...
tenant_network_types = #禁用私有网络选项
[ml2]
...
mechanism_drivers = linuxbridge
[ml2]
...
extension_drivers = port_security #启用端口安全扩展驱动
[ml2_type_flat]
...
flat_networks = provider #配置公共flat提供网络
[securitygroup]
...
enable_ipset = True
/etc/neutron/plugins/ml2/linuxbridge_agent.ini
为实例创建包括私有网络的VXLAN隧道和处理安全组的layer-2(桥接/交换)虚拟网络设施
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME
[vxlan]
enable_vxlan = False#因为没有私有网络的功能所以禁用
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
/etc/neutron/dhcp_agent.ini
[DEFAULT]
interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = True
配置控制节点的元数据代理
/etc/neutron/metadata_agent.ini
[DEFAULT]
...
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET
配置控制节点的计算服务使用网络
/etc/nova/nova.conf
[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 = NEUTRON_PASS
service_metadata_proxy = True
metadata_proxy_shared_secret = METADATA_SECRET
同步数据库并重启
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
init 6
计算节点配置
安装网桥代理组建
apt-get install neutron-linuxbridge-agent
配置neutron服务(/etc/neutron/neutron.conf)
[DEFAULT]
...
rpc_backend = rabbit
[oslo_messaging_rabbit]
...
rabbit_host = controller
rabbit_userid = openstack
rabbit_password = RABBIT_PASS
[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 = NEUTRON_PASS
*配置计算节点的Linux bridge服务
[linux_bridge]
physical_interface_mappings = provider:PROVIDER_INTERFACE_NAME(改成eth1)
[vxlan]
enable_vxlan = False
[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 = NEUTRON_PASS
验证服务
neutron agent-list
如果列表host里出现compute1,就已经成功了。
参考:
http://docs.openstack.org/mitaka/install-guide-ubuntu/common/get_started_networking.html
网络配置解释
Flat network:基于不使用 VLAN 的物理网络实现的虚拟网络。每个物理网络最多只能实现一个虚拟网络。
Provider network: 基于不使用 VLAN 的物理网络实现的虚拟网络。每个物理网络最多只能实现一个虚拟网络。
- /etc/neutron/plugins/ml2/ml2_conf.ini 这个配置文件其实是Neutron ML2模块的配置文件。这个模块统一管理着 Layer 2 网络的虚拟化(Neutron支持L2-L7的虚拟化),目前支持 Open vSwitch,linux bridge,SR-IOV 等虚拟化 。在上面的配置选项中,我们选择了linux bridge这个代理。
网络类型的支持由 ML2 的 types drivers 来完成。’local’,’flat’,’vlan’,’gre’,’vxlan’,’geneve’。实际上就是 ML2 内部所有支持的网络类型。
下面是ML2的工作方式
ML2和agent之间的关系:
OpenStack网络类型(管理,数据,外接和API):
Flat结构: