openstack-neutron

Neutron 的设计目标是实现“网络即服务(Networking as a Service)”。为了达到这一目标,在设计上遵循了基于 SDN 实现网络虚拟化的原则,在实现上充分利用了 Linux 系统上的各种网络相关的技术。
SDN 模式服务— NeutronSDN( 软件定义网络 ), 通过使用它,网络管理员和云计算操作员可以通过程序来动态定义虚拟网络设备。Openstack 网络中的 SDN 组件就是 Quantum.但因为版权问题而改名为Neutron 
network 是一个隔离的二层广播域。Neutron 支持多种类型的 network,包括 local, flat, VLAN, VxLAN 和 GRE
local :本地网络,网络与其他网络和节点隔离。local 网络中的 instance 只能与位于同一节点上同一网络的 instance 通信,local 网络主要用于单机测试。

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

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

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

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

subnet 子网:instance 的 IP 从 subnet 中分配。每个 subnet 需要定义 IP 地址的范围和掩码。network 与 subnet 是 1对多 关系。一个 subnet 只能属于某个 network;一个 network 可以有多个 subnet,这些 subnet 可以是不同的 IP 段,但不能重叠

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

Nova 的 Instance 是通过虚拟交换机连接到虚拟二层网络的。Neutron 支持多种虚拟交换机,包括 Linux 原生的 Linux Bridge 和 Open vSwitch。 Open vSwitch(OVS)是一个开源的虚拟交换机,它支持标准的管理接口和协议。

Instance 可以配置不同网段的 IP,Neutron 的 router(虚拟路由器)实现 instance 跨网段通信。router 通过 IP forwarding,iptables 等技术来实现路由和 NAT。我们将在后面章节讨论如何在 Neutron 中配置 router 来实现 instance 之间,以及与外部网络的通信。

方案1:控制节点 + 计算节点:
 
控制节点:部署的服务包括:neutron server, core plugin 的 agent 和 service plugin 的 agent。
 
计算节点:部署 core plugin 的agent,负责提供二层网络功能。
这里有几点需要说明: 
1. core plugin 和 service plugin 已经集成到 neutron server,不需要运行独立的 plugin 服务。
2. 控制节点和计算节点都需要部署 core plugin 的 agent,因为通过该 agent 控制节点与计算节点才能建立二层连接。
 
3. 可以部署多个控制节点和计算节点。
 
 
 
方案2:控制节点 + 网络节点 + 计算节点
在这个部署方案中,OpenStack 由控制节点,网络节点和计算节点组成。
 
控制节点:部署 neutron server 服务。
 
网络节点:部署的服务包括:core plugin 的 agent 和 service plugin 的 agent。
 
计算节点:部署 core plugin 的agent,负责提供二层网络功能。
这个方案的要点是将所有的 agent 从控制节点分离出来,部署到独立的网络节点上。
  1. 控制节点只负责通过 neutron server 响应 API 请求。
     
  2. 由独立的网络节点实现数据的交换,路由以及 load balance等高级网络服务。
     
  3. 可以通过增加网络节点承担更大的负载。
     
  4. 可以部署多个控制节点、网络节点和计算节点。
该方案特别适合规模较大的 OpenStack 环境。
openstack的几种网络类型:
几类网络流量
Management 网络
用于节点之间 message queue 内部通信以及访问 database 服务,所有的节点都需要连接到 management 网络。
 
API 网络
OpenStack 各组件通过该网络向用户暴露 API 服务。Keystone, Nova, Neutron, Glance, Cinder, Horizon 的 endpoints 均配置在 API 网络上。通常,管理员也通过 API 网络 SSH 管理各个节点。
 
VM 网络
VM 网络也叫 tenant 网络,用于 instance 之间通信。
VM 网络可以选择的类型包括 local, flat, vlan, vxlan 和 gre。
VM 网络由 Neutron 配置和管理。
 
External 网络
External 网络指的是 VM 网络之外的网络,该网络不由 Neutron 管理。 Neutron 可以将 router attach 到 External 网络,为 instance 提供访问外部网络的能力。 External 网络可能是企业的 intranet,也可能是 internet。
 架构图:
 

 

Neutron Server
对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求。
Plugin
处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络状态, 并调用 Agent 处理请求。
Agent
处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能
network provider
提供网络服务的虚拟或物理网络设备,例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物理交换机。
Queue
Neutron Server,Plugin 和 Agent 之间通过 Messaging Queue 通信和调用
Database
存放 OpenStack 的网络状态信息,包括 Network, Subnet, Port, Router 等。

 部署-node1 

创建数据库

> 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';

创建用户:

#  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

创建endpoint

# openstack endpoint create --region RegionOne \
> network internal http://node1:9696

openstack endpoint create --region RegionOne \
> network admin http://cnode1:9696

# openstack endpoint create --region RegionOne \
> network public http://node1:9696

安装服务:

# yum install openstack-neutron openstack-neutron-ml2   openstack-neutron-linuxbridge ebtables

编写配置文件

 vim /etc/neutron/neutron.conf

[database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@node1/neutron

[DEFAULT]
core_plugin = ml2
service_plugins = router
allow_overlapping_ips = true

transport_url = rabbit://openstack:admin@node1

auth_strategy = keystone

notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true

[keystone_authtoken]
www_authenticate_uri = http://node1:5000
auth_url = http://node1:5000
auth_url = http://node1:35357
memcached_servers = node1:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron

[nova]
auth_url = http://node1:35357
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = nova
password = nova

[oslo_concurrency]
lock_path = /var/lib/neutron/tmp

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

[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

# vim /etc/neutron/plugins/ml2/linuxbridge_agent.ini

[linux_bridge]
physical_interface_mappings = provider:ens33

[vxlan]
enable_vxlan = true
local_ip = 192.168.234.248
l2_population = true

[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

# vim  /etc/neutron/l3_agent.ini

[DEFAULT]
interface_driver = linuxbridge

 

# vim /etc/neutron/dhcp_agent.ini

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

# vim /etc/neutron/metadata_agent.ini

[DEFAULT]
nova_metadata_host = node1
metadata_proxy_shared_secret = METADATA_SECRET

# vim /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
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET

# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini

同步数据库:

启动服务

# systemctl restart openstack-nova-api.service

# systemctl enable neutron-server.service   neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service

# systemctl start neutron-server.service   neutron-linuxbridge-agent.service neutron-dhcp-agent.service   neutron-metadata-agent.service

]# systemctl enable neutron-l3-agent.service

# systemctl start neutron-l3-agent.service

node2 安装服务

# yum install openstack-neutron-linuxbridge ebtables ipset

[root@node2 ~]# vim /etc/neutron/neutron.conf

[DEFAULT]
transport_url = rabbit://openstack:admin@node1
auth_strategy = keystone

[keystone_authtoken]
www_authenticate_uri = http://node1:5000
auth_url = http://node1:5000
auth_url = http://node1:35357
memcached_servers = node1:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = neutron
password = neutron

[oslo_concurrency]
lock_path = /var/lib/neutron/tmp

[linux_bridge]
physical_interface_mappings = provider:ens33

[vxlan]
enable_vxlan = true
local_ip = 192.168.234.249
l2_population = true

[securitygroup]
enable_security_group = true
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver

# vim /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

启动服务

# systemctl restart openstack-nova-compute.service

systemctl enable neutron-linuxbridge-agent.service

# systemctl start neutron-linuxbridge-agent.service

 

posted @ 2022-10-05 18:22  huxl1  阅读(43)  评论(0编辑  收藏  举报