OpenStack—neutron组件介绍与安装

时间:2022-03-17 09:28:36

neutron介绍

  Neutron 概述:传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备;而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能需要创建、修改和删除网络,网络的连通性和隔离不已经太可能通过手工配置来保证了。

  如何快速响应业务的需求对网络管理提出了更高的要求。传统的网络管理方式已经很难胜任这项工作,而“软件定义网络(software-defined networking, SDN)”所具有的灵活性和自动化优势使其成为云时代网络管理的主流。

  Neutron 的设计目标是实现“网络即服务(Networking as a Service)”。为了达到这一目标,在设计上遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术。

  SDN 模式服务— NeutronSDN( 软件定义网络 ), 通过使用它,网络管理员和云计算操作员可以通过程序来动态定义虚拟网络设备。Openstack 网络中的 SDN 组件就是 Quantum.但因为版权问题而改名为Neutron 。

Neutron网络基本概念:

  1)neutwork
  network 是一个隔离的二层广播域。Neutron 支持多种类型的 network,包括 local, flat, VLAN, VxLAN 和 GRE。

  local
  local 网络与其他网络和节点隔离。local 网络中的 instance 只能与位于同一节点上同一网络的 instance 通信,local 网络主要用于单机测试。

  flat
  flat 网络是无 vlan tagging 的网络。flat 网络中的 instance 能与位于同一网络的 instance 通信,并且可以跨多个节点。

  vlan
  vlan 网络是具有 802.1q tagging 的网络。vlan 是一个二层的广播域,同一 vlan 中的 instance 可以通信,不同 vlan 只能通过 router 通信。vlan 网络可跨节点,是应用最广泛的网络类型。

flat与vlan 的区别:都可以跨多个节点,flat 在同一网络地址通信。vlan 打了vlan的标记,可以在不同网络地址通信。

  vxlan
  vxlan 是基于隧道技术的 overlay 网络。vxlan 网络通过唯一的 segmentation ID(也叫 VNI)与其他 vxlan 网络区分。vxlan 中数据包会通过 VNI 封装成 UDP 包进行传输。因为二层的包通过封装在三层传输,能够克服 vlan 和物理网络基础设施的限制。

  gre
  gre 是与 vxlan 类似的一种 overlay 网络。主要区别在于使用 IP 包而非 UDP 进行封装。

vxlan 与 gre的区别:都是二层封装,三层传输,vxlan 使用UDP, gre 使用IP包

  不同 network 之间在二层上是隔离的。
  以 vlan 网络为例,network A 和 network B 会分配不同的 VLAN ID,这样就保证了 network A 中的广播包不会跑到 network B 中。当然,这里的隔离是指二层上的隔离,借助路由器不同 network 是可能在三层上通信的。

  

network 必须属于某个 Project( Tenant 租户),Project 中可以创建多个 network。 network 与 Project 之间是 1对多 关系。

  2)subnet
  subnet 是一个 IPv4 或者 IPv6 地址段。instance 的 IP 从 subnet 中分配。每个 subnet 需要定义 IP 地址的范围和掩码。

network 与 subnet 是 1对多 关系。一个 subnet 只能属于某个 network;一个 network 可以有多个 subnet,这些 subnet 可以是不同的 IP 段,但不能重叠。

  

  3)port
  port 可以看做虚拟交换机上的一个端口。port 上定义了 MAC 地址和 IP 地址,当 instance 的虚拟网卡 VIF(Virtual Interface) 绑定到 port 时,port 会将 MAC 和 IP 分配给 VIF。

subnet 与 port 是 1对多 关系。一个 port 必须属于某个 subnet;一个 subnet 可以有多个 port。

  Neutron 功能
  Neutron 为整个 OpenStack 环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和 VPN 等。Neutron 提供了一个灵活的框架,通过配置,无论是开源还是商业软件都可以被用来实现这些功能。

neutron 的部署方案:

          方案一,控制节点+计算节点

            方案二,控制节点+网络节点+计算节点

neutron 架构非常灵活,层次较多,目的是:

          1,为了支持各种现有或者将来会出现的优秀网络技术

          2,支持分布部署,获得足够的扩展性

安装neutron和配置控制器节点

1、先决条件:
  1)登录数据库,创建数据库和服务凭据和API接口
  # mysql -uroot -proot
  2)创建neutron数据库
  MariaDB [(none)] CREATE DATABASE neutron;
  3)授予对neutron数据库的适当访问权限,替换 NEUTRON_DBPASS为合适的密码

MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';

  4)创建neutron用户

  # openstack user create --domain default --password=neutron neutron
  5)将neutron用户添加到admin角色
  # openstack role add --project service --user neutron admin
  6)创建neutron服务
  # openstack service create --name neutron --description "OpenStack Networking" network
  7)创建网络服务API端点

# openstack endpoint create --region RegionOne network public http://node1:9696
# openstack endpoint create --region RegionOne network internal http://node1:9696
# openstack endpoint create --region RegionOne network admin http://node1:9696

2、配置网络选项

  1)这里我们选择自助服务网络
  2)下载安装包

# yum install openstack-neutron openstack-neutron-ml2 openvswitch openstack-neutron-openvswitch ebtables -y 

  3)配置neutron配置文件,配置以下文件时,请将配置文件备份,在创建一个同名到的配置文件,加入内容

vim /etc/neutron/neutron.conf

[DEFAULT]
state_path = /var/lib/neutron
auth_strategy = keystone
core_plugin = ml2
service_plugins = router
dhcp_agent_notification = true
allow_overlapping_ips = True
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true
transport_url = rabbit://openstack:admin@node1 [agent] [cors] [cors.subdomain] [database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@node1/neutron [keystone_authtoken]
auth_uri = http://node1:5000
auth_url = http://node1:35357
memcached_servers = node1:
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron#openstack用户
password = neutron#openstack中neutron用户密码 [matchmaker_redis] [nova]
region_name = RegionOne#地址域
auth_url = http://node1:35357
auth_type = password
project_domain_name = default
project_name = service
user_domain_name = default
username = nova
password = nova [oslo_concurrency]
lock_path = $state_path/lock [oslo_messaging_amqp] [oslo_messaging_kafka] [oslo_messaging_notifications] [oslo_messaging_rabbit] [oslo_messaging_zmq] [oslo_middleware] [oslo_policy] [qos] [quotas] [ssl]

  4)配置构建第2层(桥接和交换)虚拟网络基础架构

vim /etc/neutron/plugins/ml2/ml2_conf.ini

[DEFAULT]

[ml2]
type_drivers = flat,vxlan
tenant_network_types = vxlan
mechanism_drivers = openvswitch,l2population
extension_drivers = port_security [ml2_type_flat] [ml2_type_geneve] [ml2_type_gre] [ml2_type_vlan] [ml2_type_vxlan]
vni_ranges = : [securitygroup]
enable_ipset = true

  5)配置Linux桥代理,为实例构建第2层(桥接和交换)虚拟网络基础架构并处理安全组

vim /etc/neutron/plugins/ml2/openvswitch_agent.ini

[DEFAULT]

[agent]
tunnel_types = vxlan
l2_population = True [ovs]
tunnel_bridge = br-tun
local_ip = 192.168.83.10#主机的第二块网卡
bridge_mappings =#等号后面没内容 [securitygroup]
firewall_driver = iptables_hybrid
enable_security_group = true [xenapi]

  6)配置第3层代理,提供路由和NAT服务

vim /etc/neutron/l3_agent.ini

[DEFAULT]
interface_driver = openvswitch
external_network_bridge = br-ex [agent] [ovs]

  7)配置DHCP代理为虚拟网络提供DHCP服务

vim /etc/neutron/dhcp_agent.ini

[DEFAULT]
interface_driver = openvswitch
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true [agent] [ovs]

3、配置元数据代理,提供配置信息的诸如凭据实例

vim /etc/neutron/metadata_agent.ini

[DEFAULT]
nova_metadata_ip = node1
metadata_proxy_shared_secret = METADATA_SECRET
#和/etc/nova/nova.conf中的密码需要一致,可以自己设置
[agent] [cache]

4、配置Compute服务以使用Networking服务,在/etc/nova/nova.conf加入以下内容

[neutron] 

url = http:// node1:9696
auth_url = http:// node1: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

5、完成安装

  1)创建软连接
  # 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 head" neutron

  

  3)重新启动Compute API服务

  # systemctl restart openstack-nova-api.service
  4)启动网络服务并开机启动

# systemctl enable neutron-server.service neutron-dhcp-agent.service openvswitch neutron-openvswitch-agent neutron-metadata-agent.service
# systemctl start neutron-server.service neutron-dhcp-agent.service openvswitch neutron-openvswitch-agent neutron-metadata-agent.service

  

  5)创建网桥,并将网口绑定网桥

  # ovs-vsctl add-br br-ex
  # ovs-vsctl add-port br-ex ens37
  6)启动第3层服务
  # systemctl enable neutron-l3-agent.service     

  # systemctl start neutron-l3-agent.service

三、计算节点安装和配合neutron

1、下载安装包
# yum install openvswitch openstack-neutron-openvswitch ebtables ipset

2、配置公共组件
编辑/etc/neutron/neutron.conf文件
vim /etc/neutron/neutron.conf

[DEFAULT]
#state_path = /var/lib/neutron
auth_strategy = keystone
#core_plugin = ml2
#service_plugins = router
#dhcp_agent_notification = true
#allow_overlapping_ips = True
#notify_nova_on_port_status_changes = true
#notify_nova_on_port_data_changes = true
transport_url = rabbit://openstack:admin@node1 [agent] [cors] [cors.subdomain] [database]
#connection = mysql+pymysql://neutron:NEUTRON_DBPASS@node1/neutron [keystone_authtoken]
auth_uri = http://node1:5000
auth_url = http://node1:35357
memcached_servers = node1:
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron [matchmaker_redis] [nova] [oslo_concurrency]
lock_path = $state_path/lock [oslo_messaging_amqp] [oslo_messaging_kafka] [oslo_messaging_notifications] [oslo_messaging_rabbit] [oslo_messaging_zmq] [oslo_middleware] [oslo_policy] [qos] [quotas] [ssl]

3、配置Linux桥代理

vim /etc/neutron/plugins/ml2/openvswitch_agent.ini

[DEFAULT]

[agent]
tunnel_types = vxlan
l2_population = True [ovs]
tunnel_bridge = br-tun
local_ip = 192.168.83.20#本机的第二块网卡ip
bridge_mappings = [securitygroup]
firewall_driver = iptables_hybrid
enable_security_group = true [xenapi]

3、完成安装

1)重新启动Compute服务
# systemctl restart openstack-nova-compute.service
2)启动Linux网桥代理并将其开机启动

# systemctl restart openstack-nova-compute.service
# systemctl enable openvswitch neutron-openvswitch-agent
# systemctl start openvswitch neutron-openvswitch-agent

四、验证操作

# openstack network agent list

[root@node1 ~]# openstack network agent list
+----------------------+--------------------+-------+-------------------+-------+-------+------------------------+
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+----------------------+--------------------+-------+-------------------+-------+-------+------------------------+
| 4307db4f-527a-441e-b | Open vSwitch agent | node2 | None | True | UP | neutron-openvswitch- |
| -3842c2c23521 | | | | | | agent |
| 4e7445c0-7a53-423d- | Metadata agent | node1 | None | True | UP | neutron-metadata-agent |
| bc23-a26a26cc9d6d | | | | | | |
| 9c38108c-74ea-48c7- | Open vSwitch agent | node1 | None | True | UP | neutron-openvswitch- |
| -7abd5a1ecf90 | | | | | | agent |
| a5b22961-bf50-46ec- | DHCP agent | node1 | nova | True | UP | neutron-dhcp-agent |
| 88b4-a1c98740441e | | | | | | |
| c68858cd-6d03-457f- | L3 agent | node1 | nova | True | UP | neutron-l3-agent |
| bbbf-0fb5528223ab | | | | | | |
+----------------------+--------------------+-------+-------------------+-------+-------+------------------------+