neutron介绍

提供 OpenStack 虚拟网络服务,也是 OpenStack 重要的核心模块之一,该模块最开始是 Nova 的一部分,叫 nova-network,后来从 Nova 中分离出来,开始名字为 Quantum,后来由于商业名权的原因改为了 Neutron。该模块之所以重要是因为如果没有虚拟网络服务,OpenStack 就变为单纯提供虚拟机实例和虚拟存储服务的平台,这就违背了提供分布式虚拟服务的云计算核心价值。该模块不仅提供基本的创建子网、路由和为虚拟机实例分配 IP 地址功能,还提供了

a. 同时支持多种物理网络类型,支持 Linux Bridge、Hyper-V 和 OVS bridge 计算节点共存;

b. 支持防火墙服务;

c. 支持虚拟网络中节点间 VPN 服务;

d. SDN 实现完善和提高。


Neutron 功能

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

二层交换 Switching

Nova 的 Instance 是通过虚拟交换机连接到虚拟二层网络的。

Neutron 支持多种虚拟交换机,包括 Linux 原生的 Linux Bridge 和 Open vSwitch。

Open vSwitch(OVS)是一个开源的虚拟交换机,它支持标准的管理接口和协议。

利用 Linux Bridge 和 OVS,Neutron 除了可以创建传统的 VLAN 网络,还可以创建基于隧道技术的 Overlay 网络,比如 VxLAN 和 GRE(Linux Bridge 目前只支持 VxLAN)。

三层路由 Routing

Instance 可以配置不同网段的 IP,Neutron 的 router(虚拟路由器)实现 instance 跨网段通信。router 通过 IP forwarding,iptables 等技术来实现路由和 NAT。

负载均衡 Load Balancing

Openstack 在 Grizzly 版本第一次引入了 Load-Balancing-as-a-Service(LBaaS),提供了将负载分发到多个 instance 的能力。LBaaS 支持多种负载均衡产品和方案,不同的实现以 Plugin 的形式集成到 Neutron,目前默认的 Plugin 是 HAProxy。

防火墙 Firewalling

Neutron 通过下面两种方式来保障 instance 和网络的安全性。

Security Group

通过 iptables 限制进出 instance 的网络包。

Firewall-as-a-Service

FWaaS,限制进出虚拟路由器的网络包,也是通过 iptables 实现。


neutron架构及组件讲解

Neutron Server

对外提供 OpenStack 网络 API,接收请求,并调用 Plugin 处理请求。

Plugin

处理 Neutron Server 发来的请求,维护 OpenStack 逻辑网络状态, 并调用 Agent 处理请求。

Agent

处理 Plugin 的请求,负责在 network provider 上真正实现各种网络功能。

+--------------------+------+-------------------+-------+-------+---------------------------+
| Agent Type | Host | Availability Zone | Alive | State | Binary |
+--------------------+------+-------------------+-------+-------+---------------------------+
| Open vSwitch agent | yun2 | None | True | UP | neutron-openvswitch-agent |
| Metadata agent | yun2 | None | True | UP | neutron-metadata-agent |
| L3 agent | yun2 | nova | True | UP | neutron-l3-agent |
| Open vSwitch agent | yun3 | None | True | UP | neutron-openvswitch-agent |
| Open vSwitch agent | yun4 | None | True | UP | neutron-openvswitch-agent |
| DHCP agent | yun2 | nova | True | UP | neutron-dhcp-agent |
+--------------------+------+-------------------+-------+-------+---------------------------+

network provider

提供网络服务的虚拟或物理网络设备,例如 Linux Bridge,Open vSwitch 或者其他支持 Neutron 的物理交换机。

Queue

Neutron Server,Plugin 和 Agent 之间通过 Messaging Queue 通信和调用。

Database

存放 OpenStack 的网络状态信息,包括 Network, Subnet, Port, Router 等

DHCP

dhcp agent 通过 dnsmasq 为 instance 提供 dhcp 服务。

L3 agent

  1. Routing

    l3 agent 可以为 project(租户)创建 router,提供 Neutron subnet 之间的路由服务。路由功能默认通过 IPtables 实现。
  2. Firewall

    l3 agent 可以在 router 上配置防火墙策略,提供网络安全防护。另一个与安全相关的功能是 Security Group,也是通过 IPtables 实现。

其中:

Firewall 与 Security Group 的区别在于:

  • Firewall 安全策略位于 router,保护的是某个 project 的所有 network。
  • Security Group 安全策略位于 instance,保护的是单个 instance。

Load Balance

Neutron 默认通过 HAProxy 为 project 中的多个 instance 提供 load balance 服务。


neutron server 详解

plugin,agent,provider

  1. plugin 解决的是 What 的问题,即网络要配置成什么样子?而至于 How 的工作(如何配置)则交由 agent 完成。
  2. plugin,agent 和 network provider 是配套使用的,比如 network provider 是 linux bridge,那么就得使用 linux bridge 的 plungin 和 agent;如果 network provider 换成了 OVS 或者物理交换机,plugin 和 agent 也得替换。
  3. plugin 的一个主要的职责是在数据库中维护 Neutron 网络的状态信息,这就造成一个问题:所有 network provider 的 plugin 都要编写一套非常类似的数据库访问代码。为了解决这个问题,Neutron 在 Havana 版本实现了一个 ML2(Modular Layer 2)plugin,对 plgin 的功能进行抽象和封装。有了 ML2 plugin,各种 network provider 无需开发自己的 plugin,只需要针对 ML2 开发相应的 driver 就可以了,工作量和难度都大大减少。
  4. plugin 按照功能分为两类: core plugin 和 service plugin。core plugin 维护 Neutron 的 netowrk, subnet 和 port 相关资源的信息,与 core plugin 对应的 agent 包括 linux bridge, OVS 等; service plugin 提供 routing, firewall, load balance 等服务,也有相应的 agent。

Ml2 Core Plugin 详解:

  • Core Plugin,其功能是维护数据库中 network, subnet 和 port 的状态,并负责调用相应的 agent 在 network provider 上执行相关操作,比如创建 network。
  • openstack中有两大常见 Core Plugin: linux bridge plugin 和 open vswitch plugin
  • Type Driver : 网络类型驱动;可以让neutron同时使用不同的网络类型;负责维护网络类型的状态,执行验证,创建网络等
  • Mechanism Driver:网络机制驱动;可以让neutron同时支持不同的network provider;负责获取由 type driver 维护的网络状态,并确保在相应的网络设备(物理或虚拟)上正确实现这些状态

VXLAN与VLAN

VXLAN ( Virtual eXtensible Local Area Network)VXLAN 提供与 VLAN 相同的以太网二层服务,但拥有更强的扩展性和灵活性。与 VLAN 相比,VXLAN 有下面几个优势:

  1. 支持更多的二层网段。

    VLAN 使用 12-bit 标记 VLAN ID,最多支持 4094 个 VLAN,这对大型云部署会成为瓶颈。VXLAN 的 ID (VNI 或者 VNID)则用 24-bit 标记,支持 16777216 个二层网段。
  2. 能更好地利用已有的网络路径。

    VLAN 使用 Spanning Tree Protocol 避免环路,这会导致有一半的网络路径被 block 掉。VXLAN 的数据包是封装到 UDP 通过三层传输和转发的,可以使用所有的路径。
  3. 避免物理交换机 MAC 表耗尽。

    由于采用隧道机制,TOR (Top on Rack) 交换机无需在 MAC 表中记录虚拟机的信息。

vxlan推荐文章:https://www.cnblogs.com/hbgzy/p/5279269.html


ML2 mechanism driver

Linux Bridge :

Open vSwitch:

Open vSwitch 中的网络设备:

  • br-ex:连接外部(external)网络的网桥。
  • br-int:集成(integration)网桥,所有 instance 的虚拟网卡和其他虚拟网络设备都将连接到该网桥。
  • br-tun:隧道(tunnel)网桥,基于隧道技术的 VxLAN 和 GRE 网络将使用该网桥进行通信。
  • tap interface:命名为 tapXXXX。
  • linux bridge:命名为 qbrXXXX。
  • veth pair:命名为 qvbXXXX, qvoXXXX
  • OVS integration bridge:命名为 br-int。
  • OVS patch ports:命名为 int-br-ethX 和 phy-br-ethX(X 为 interface 的序号)。
  • OVS provider bridge:命名为 br-ethX(X 为 interface 的序号)。
  • 物理 interface:命名为 ethX(X 为 interface 的序号)。
  • OVS tunnel bridge:命名为 br-tun。

注意:eth2没有ip地址

brctl
ovs-vsctl

虚机的网络访问

虚机跨节点访问虚机:东西流向

  1. 虚机的网卡通过tap设备连到linux bridge。
  2. linux bridge通过一对veth pair设备连到ovs的集成网桥br-int上,
  3. 通过patch-tun连接到patch-int,从而连接到br-tun上,
  4. 通过vxlan网口连接到另一台虚机的vxlan网口,从而连接到另一台虚机的隧道网桥br-tun上,
  5. 通过patch-int连接到patch-tun,从而连接到br-int上,
  6. br-int通过一对veth pair设备连到ovs的集成网桥linux bridge上 ,
  7. 通过tap设备连到虚机的网卡,从而实现通信。

虚机访问外网:南北流向(虚拟机访问外网----SNAT原理:)

  1. 虚机的网卡通过tap设备连到linux bridge,
  2. linux bridge 通过一对veth pair设备连到ovs的集成网桥br-int上,
  3. br-int通过虚拟机网关qr连到路由上,
  4. 路由通过qg连接到br-ex上。
  5. qg上的网关有SNAT源地址转发功能,
  6. 所以虚机可以通过这种方式连接外网。

外网访问虚机——floating ip原理:

  1. 外网通过浮动ip访问虚机,
  2. qg上的网关有DNAT目标地址转换功能,
  3. br-ex通过qg链接到路由上,
  4. 路由通过qr端链接到ovs的集成网桥br-int,
  5. br-int通过一对veth pair设备链接到linux bridge,
  6. linux bridge通过tap连接到虚机的网卡完成通信。

常见日志

问题一:虚拟机获取不到ip

查看dhcp-agent.log 和 openvswitch-agent.log

问题二:虚拟机访问不了外网

查看l3-agent.log

问题三:主服务日志

server.log


neutron配置文件示例:

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@controller [agent] [cors] [cors.subdomain] [database]
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron [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 [matchmaker_redis] [nova]
region_name = RegionOne
auth_url = http://controller: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]

/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

/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 = 1:1000 [securitygroup]
enable_ipset = true

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

[DEFAULT]

[agent]
tunnel_types = vxlan
l2_population = True [ovs]
tunnel_bridge = br-tun
local_ip = 192.168.254.63
bridge_mappings = [securitygroup]
firewall_driver = iptables_hybrid
enable_security_group = true [xenapi]

/etc/neutron/l3_agent.ini

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

/etc/neutron/metadata_agent.ini

[DEFAULT]
nova_metadata_ip = controller
metadata_proxy_shared_secret = METADATA_SECRET [agent] [cache]

/etc/neutron/dhcp_agent.ini

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

命令:

##注意:配置完配置文件后,提前准备ovs外网用的网桥,之后同步数据库,启动服务:

yum install openstack-neutron openstack-neutron-ml2 openvswitch openstack-neutron-openvswitch ebtables -y      #控制节点

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

ovs-vsctl add-br br-ex

ovs-vsctl add-port br-ex eth2

systemctl enable neutron-l3-agent.service

systemctl start neutron-l3-agent.service

yum install openvswitch openstack-neutron-openvswitch ebtables ipset    #计算节点
systemctl enable openvswitch neutron-openvswitch-agent
systemctl start openvswitch neutron-openvswitch-agent
systemctl stop openvswitch neutron-openvswitch-agent

OpenStack (neutron 网络服务)的更多相关文章

  1. openstack——neutron网络服务

    一.neutron 介绍:   Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能需要 ...

  2. Openstack neutron 网络服务 (七)

    引用: https://docs.openstack.org/ocata/zh_CN/install-guide-rdo/common/get-started-networking.html neut ...

  3. openstack第四章:neutron— 网络服务

    第四篇neutron— 网络服务 一.neutron 介绍:   Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是 ...

  4. CentOS7安装OpenStack(Rocky版)-06.安装Neutron网络服务(控制节点)

    上一章介绍了独立的nova计算节点的安装方法,本章分享openstack的网络服务neutron的安装配制方法 ------------------- 完美的分割线 ----------------- ...

  5. openstack (5)-- 部署 Neutron 网络服务

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

  6. OpenStack核心组件-neutron网络服务

    1. neutron 介绍 1.1 Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云环境下的网络已经变得非常复杂,特别是在多租户场景里,用户随时都可能 ...

  7. openstack核心组件——neutron网络服务 抓取ip(9)

    云计算openstack核心组件——neutron网络服务(9)   一.虚拟机获取 ip: 用 namspace 隔离 DHCP 服务   Neutron 通过 dnsmasq 提供 DHCP 服务 ...

  8. openstack核心组件——neutron网络服务(8)

    云计算openstack核心组件——neutron网络服务(8)   一.neutron 介绍:   Neutron 概述 传统的网络管理方式很大程度上依赖于管理员手工配置和维护各种网络硬件设备:而云 ...

  9. OpenStack Train版-10.安装neutron网络服务(网络节点:可选)

    可选:安装neutron网络服务节点(neutron01网络节点192.168.0.30)网络配置按照官网文档的租户自助网络 配置系统参数 echo 'net.ipv4.ip_forward = 1' ...

随机推荐

  1. 每日一个linux命令4

    mkdir命令 linux mkdir 命令用来创建指定的名称的目录,要求创建目录的用户在当前目录中具有写权限,并且指定的目录名不能是当前目录中已有的目录. mkdir test    创建一个空目录 ...

  2. VUE项目性能优化实践——通过懒加载提升页面响应速度

    本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 最近我司因业务需求,需要在一个内部数据分析平台集成在线Excel功能,既然我 ...

  3. Npoi XWPF Word 导出时插入图片无法显示 bug 完美解决

    一.来自客户的需求 最近客户来个新需求生成一个word 标签纸,并且需要在标签纸上插入一个logo,并且将erp 中的数据取出来自动写在文档上,不由得淡淡一笑,这不难呀! 于是乎我就写下了这样的代码: ...

  4. 一图看懂Actor Typed

    引言 朋友看罢我之前整理的<Akka Typed 官方文档之随手记>,一人用了诗歌<长城长>作为回赠,另一人则要求推出简化版本.于是抽空整理了几张思维导图,并且用了一些不太恰当 ...

  5. [leetcode] 周赛 223

    比赛题目:https://leetcode-cn.com/contest/weekly-contest-223/. 解码异或后的数组 题目:1720. 解码异或后的数组. 还记得数列求和的「累加法」? ...

  6. 关于es6 let var const 以及Symbol的总结

    ```javascript //es6新增块级作用域.声明变量用关键字let const , // es5中只有函数作用域和全局作用域,声明变量用关键字var  // let 和const 声明的变量 ...

  7. node.js中使用http-proxy-middleware请求转发给其它服务器

    var express = require('express');var proxy = require('http-proxy-middleware'); var app = express(); ...

  8. 如何用Github上传项目中的代码

    第一步: 在Github上创建自己的仓库 第二步:克隆GitHub文件 1:$ git clone  Github文件地址 如:$ git clone https://github.com/wwwxx ...

  9. 在CentOS上安装Singularity高性能容器

    什么是singularity容器 Singularity是劳伦斯伯克利国家实验室专门为大规模.跨节点HPC和DL工作负载而开发的容器化技术.具备轻量级.快速部署.方便迁移等诸多优势,且支持从Docke ...

  10. Loadrunner与kylinPET的能力对比测试--web动态请求

    概述 在<性能测试工具选择策略--仿真度对比测评分析报告>一文详细分析了使用相同的web页面,分别使用LoadRunner,Jmeter,kylinTOP工具进行录制脚本并执行得出在静态请 ...