OpenStack学习五 (Neutron)

Neutron笔记

一、neutron概述

neutron提供以下支持

  • 二层交换,支持多种虚拟机交换机
  • 三层路由,实现实例的跨网段通信
  • 负载均衡,分发负载到多个实例
  • 防火墙

neutron相关概念

  1. neutron支持多种network(隔离的二层广播域),包括local、flat、VLAN、VxLAN、GRE

    • local,全隔离,local网络中实例只能和同一节点同一网络的其他实例通信
    • falt,部分隔离,只能同网络,但是可以跨节点
    • vlan,同一vlan以内可以通信,不同vlan之间通信需要通过三层的路由器
    • vxlan,与vlan类似,只是多了各个vxlan之间通过唯一的VNI号区分,然后包实际上都是封装成UDP在三层传输
    • gre,与Vxlan一样,只是是ip包
  2. subnet地址段

    • network 1 subnet 多 //一对多,多个subnet之间不允许重复
    • subnet 1 port 多 //一对多
  3. 多种虚拟网络设备

    • TAP设备 操作二层数据包
    • TUN设备 操作三层数据包

二、neutron架构

(1) 核心组件
  • Neutron Server 向外提供可调用的API接口
  • Plugin 调用 Agent 处理 neutron server 发来的请求
  • Agent 调用 network provider处理 Plugin 发来的请求
  • network provider 提供虚拟网络设备
  • Queue 消息队列
  • Database 数据库

neutron架构

(2) Neutron Server
  • Core API 提供管理 network、subnet、port的API
  • Extension API 向外提供管理 router、load bablance、firewall 的API
  • Commnon Service 校验API请求
  • Neutron Core 调用 Plugin
  • Core Pligin API 调用 Core Pligin
  • Extension Plugin API 调用 Extension Plugin
  • Core Plugin 实现 Core Pligin API
  • service Plugin 实现 Extension Plugin API

neutron server架构

neutron 支持不同的network provider只需要实现对应的 bridge core plugin 和 linux bridge agent (图中红色部分)

支持不同的provider

同一套 openstack 中只能用一种 network provider
于是乎相当于选了那种 core plugin 就只能使用唯一他对应的 core plugin agent
ML2 作为新一代的 core plugin,通过引入type driver 和 mechansim driver 支持一对多,支持不同的 core plugin agent

ML2支持一对多

(3) 网络种类
  • Managenment 网络 所有包含neutron的节点都要连接的,用于节点之间 messages queue 内部通信以及访问数据库
  • API网络 向外暴露API服务的
  • VM网络 虚拟机之间通信用的
  • External 除了VM网络之外的网络

一个简单的网络实例

ps:在此方案中API网络已经和Managenment网络合并

三、各种网络方案

(1) local network

local network不会与宿主机的任何网络相连,也不关联 VLAN ID,每个local network都有自己单独的bridge,一个local network只能在一个物理节点上不能跨节点

因为各用各的桥,互不相通,并且不连接物理网卡,所以实例之间如果属于两个local network,也不能互相通信,即使在同一宿主机

简单的local网络结构示例

VM0 和 VM1可以通信,因为他们属于一个loacl network用同一个bridge,VM2则不可以与VM0、VM1通信,不是同一个local network

普通用户与admin用户都可以创建网络,但是只有admin用户可以指定network属于那个租户、是否共享、选择neutron type 以及只指定是否为external network

(2) flat network

flat network网络必须与宿主机物理网卡直接相连,因为它不带tag,所以每个flat network 都独占一个物理网卡

2个falt网络

这里创建了2个falt network,所以就有2个物理网卡(如图中eth1和eth2)

配置DHCP agent

neutron通过 DHCP agent提供DHCP功能,DHCP agent包括 dhcp_driver 和 interface_driver

  • dhcp_driver使用 dnsmasq 实现DHCP
  • interface_driver 使用bridge连接DHCP namespace interface

dnsmasq与network一对一
一个dnsmasq进程可以为同一网络中的所有已经enable了DHCP的subnet提供DHCP服务
在enable DHCP的同时dnsmasq进程即启动

namespace隔离DHCP服务

linux network namespace 可以将一个物理的三层网络分割成几个独立的虚拟三层网络

每个namespace都有自己独立的网络栈,包括以下

  • route table 路由表
  • firewall rule 防火墙
  • network interface device 网络接口设备

因为namespace的存在,可以提供独立的DHCP、路由服务,所以才能允许租户创建重叠的网络

虚拟网线,veth pair成对出现,类似于网线,一端输入数据,与之成对的另一端就能读到数据库

(4) vlan network

vlan network 是带tag的网络

单个vlan network结构

VM0、VM1、VM2是三个实例,通过tap设备连接到同一个桥brqxxx上,又在物理网卡eth1上创建了eth1.100这个vlan interface,也连接到桥brqxxx上,从此各实例通过eth1.100发送到eth1的数据,都会打上vlan100的tag

再建一个,同样,eth1.101发送到eth1的数据,都会打上vlan101的tag,这样就实现了基于vlan的隔离

同一个vlan的实例可以互相通信,不是同一个vlan的在二层已经不能通信,需要经由三层路由转发

两个个vlan network结构

ps:因为物理网卡可以走多个valn,所以物理交换机上与eth1相连的port就必须设置成 trunk模式了

经由三层路由转发实现不同valn之间通信

不同valn之间经由三层路由转发通信

vm1与vm3属于不同的vlan,vm1发出数据包,经由 vlan100 到达路由器,路由器送达解析地址,将其从101.1 接口ip发出,相当于此时数据包与vm3同valn,可以到达vm3

接入物理路由的vlan有几个,就有几个对应的 interface ip
172.16.100.1 对应 vlan100 的网关
172.16.101.1 对应 vlan101 的网关

虚拟路由通过软件实现,与物理路由功能相同,只是使用虚拟路由必须开启 L3 agent

虚拟路由

对于硬件实现的物理路由,需要网关对网关,正如上文的172.16.100.1 对应 vlan100 的网关,虚拟路由则不需要,如图虚拟路由的两个TAP设备并没有Gateway IP (即网关ip),那么如何实现像物理路由一般通信的呢?

L3 agent 会给每个虚拟router创建一个namesapce,通过veth pair与TAP相连,前面说过,veth pair相当于网线的作用,然后Gateway Ip实际上配置在了namespace里面的 veth interface 上

namespace可以有多个 veth interface,至于为什么不直接在TAP上配置Gateway IP ,而是增加一层namesapce再配置Gateway IP,是为了支持网络重叠

简单的说,直接配在TAP设备上, 那么就得用一张路由表, 如果2个租户创建了相同的subnet就会出错
而增加一层namespace, 就可以用各用各的路由表(每个namespace都有自己的路由表),解决了这个问题

连接外网

  1. 普通模式连接外网

连接外部网络,对于私有云,外网通常是指公司的内网,对于公有云,外网通常是指internet
所以外网实际上是已经客观存在的了,仅需要neutron识别它

连接外网

数据包流向: 从 vm1 发出的数据包,先到达172.16.100.1,然后通过10.10.10.2发出,最后到10.10.10.1转出至外网,历经2此跳转

在经过10.10.10.2的veth接口qg-b8b32a88-03时,会进行 Source NAT
将数据包的源地址改为10.10.10.2,以便接收返回的应答包

Source NAT
router 会修改包的源地址为自己的外网地址,这样确保数据包转发到外网,并能够从外网返回。router 修改返回的数据包,并转发给真正的 instance。这个行为称之为Source NAT

  1. 浮动IP模式连接外网

通过浮动ip可以让实例与外网之间直接通信,因为

  • floating IP 提供即静态 NAT 功能(即通过在 router 上应用 iptalbes 的 NAT 规则)
    建立了外网与租户网络之间一对一的映射
  • floating IP配置在router通外网的那个接口上,而不是实例中
  • router根据通信方向做Source NAT
(5) vxlan network

vxlan 与 valn 类似,但是在 valn 的基础上有一些改进

  • 支持更多的二层网络 vlan最多支持4094个vlan id,vxlan最多支持16777216 vxland id

  • 更多的利用已有的网段
    vlan 数据包在二层传输,所以使用Spanning Tree Protocol避免环路,这样有一半的路径会被block掉用不了,vxlan的数据包是封装成UDP在三层传输的,所以可以使用所有路径

  • 避免物理交换机MAC表耗尽 vxlan采用隧道机制,交换机不需要在MAC表中记录虚拟机信息

vxlan 在原始的网络包前增加了一个 VXLAN header头,以 MAC-in-UDP 的方式封装,使用VTEP设备封装和解封

待续……

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值