网络虚拟化 SDN

一.Linux Bridge :Linux中的网桥

假设宿主机有 1 块与外网连接的物理网卡 eth0,上面跑了 1 个虚机 VM1,现在有个问题是: 如何让 VM1 能够访问外网?

至少有两种方案

  1. 将物理网卡eth0直接分配给VM1,但随之带来的问题很多: 宿主机就没有网卡,无法访问了; 新的虚机,比如 VM2 也没有网卡。 下面看推荐的方案
  2. 给 VM1 分配一个虚拟网卡 vnet0,通过 Linux Bridge  br0 将 eth0 和 vnet0 连接起来,如下图所示

Linux Bridge 是 Linux 上用来做 TCP/IP 二层协议交换的设备,其功能大家可以简单的理解为是一个二层交换机。多个网络设备可以连接到同一个 Linux Bridge,当某个设备收到数据包时,Linux Bridge 会将数据转发给其他设备。

在上面这个例子中,当有数据到达 eth0 时,br0 会将数据转发给 vnet0,这样 VM1 就能接收到来自外网的数据;
反过来,VM1 发送数据给 vnet0,br0 也会将数据转发到 eth0,从而实现了 VM1 与外网的通信。

现在我们增加一个虚机 VM2,如下图所示

VM2 的虚拟网卡 vnet1 也连接到了 br0 上。
现在 VM1 和 VM2 之间可以通信,同时 VM1 和 VM2 也都可以与外网通信。

网桥实际上相当于一个物理路由器(交换机)。

brctl show  查看网桥信息,br100就是我们在这里搭建的网桥,后面挂接的虚拟机网卡和物理机网卡

virbr0 是 KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供 NAT 访问外网的功能。virbr0 默认分配了一个IP 192.168.122.1,并为连接其上的其他虚拟网卡提供 DHCP 服务。(NAT)

需要说明的是,使用 NAT 的虚机 VM1 可以访问外网,但外网无法直接访问 VM1。 因为 VM1 发出的网络包源地址并不是 192.168.122.6,而是被 NAT 替换为宿主机的 IP 地址了。

每张网卡都有唯一的MAC地址。

二.VLAN

首先搞清楚这几个概念:

LAN:Local Area Network     局域网

我们一般在公司组网,都是组建的LAN网络,用户在局域网里通信、传输文件。

其获取到的是内部IP,LAN 信息交换使用的是交换机。我们可以不连接 WAN 口,把路由器当做普通交换机来使用。

一个 LAN 表示一个广播域:LAN 中的所有成员都会收到任意一个成员发出的广播包。

WAN:Wide Area Network 广域网

WLAN:Wireless LAN 无线局域网。WLAN 利用电磁波在空气中发送和接受数据,而无需线缆介质。

WAN口是对外的接口,和运营商、上级网络打交道。

LAN和WLAN是对内的接口,内部的电脑、手机、PAD,都是接入到LAN或者WLAN。

一般的无线路由器,包含了完整的LAN、WAN、WLAN功能对LAN、WAN、WLAN,要放在一起理解,理解其在网络通信中扮演的角色。

那什么是VLAN呢?

VLAN 表示 Virtual LAN。一个带有 VLAN 功能的物理交换机能够将自己的端口划分出多个 LAN。计算机发出的广播包可以被同一个 LAN 中其他计算机收到,但位于其他 LAN 的计算机则无法收到。简单地说,VLAN 将一个交换机分成了多个交换机,限制了广播的范围,在二层将计算机隔离到不同的 VLAN 中。现在的交换机几乎都是支持 VLAN 的。通常交换机的端口有两种配置模式: Access 和 Trunk。

看下图,实际上是两台交换机,上面是一台,下面是一台。

Access 口:这些端口被打上了 VLAN 的标签,表明该端口属于哪个 VLAN。 Access 口都是直接与计算机网卡相连的,这样从该网卡出来的数据包流入 Access 口后就被打上了所在 VLAN 的标签。

Trunk 口:有两个交换机 A 和 B。 如何让 AB 上相同 VLAN 之间能够通信呢?办法是将 A 和 B 连起来。这样的端口就是Trunk口了。 VLAN1、2、3 的数据包在通过 Trunk 口到达对方交换机的过程中始终带着自己的 VLAN 标签。

物理交换机有VLAN的功能,那么Linux Bridge中又是如何实现VLAN的呢?

该图实际上就是在物理服务器中实现了一个虚拟交换机,该交换机具有VLAN的功能 。凡是连接在brvlan10(网桥)上的虚拟机,共同组建成一个局域网,id为10;凡是连接在brvlan20上的虚拟机,共同组建成一个局域网,id为20。eth0相当于是Trunk口,与外界交换信息。这样,

VM1发出的数据包,会打上tag为10的标签,并且只会在id为10的局域网中产生广播风暴,而不会转发到id为20的局域网中,它们之间是相互隔离开来的。如果现在有多台物理服务器,那么它们之间就通过trunk口相连接,里面的虚拟机,就可以在id相同的局域网中通信了。

Linux Bridge + VLAN = 虚拟交换机

三.Neutron

“软件定义网络(software-defined networking, SDN)”具有的灵活性和自动化优势使其成为云时代网络管理的主流。Neutron 的设计目标是实现“网络即服务(Networking as a Service)”。Neutron 为 OpenStack 的整个环境提供网络支持,包括二层交换,三层路由,负载均衡,防火墙和 VPN 等,Neutron 提供了一个灵活的框架。Neutron有如下几个重要功能:

1.二层交换(Switching):Nova 的 Instance 是通过虚拟交换机构建局域网的。Neutron 支持多种虚拟交换机,包括 Linux 原生的 Linux Bridge 和 OpenvSwitch。 OpenvSwitch(OVS)是一个开源的虚拟交换机,利用 Linux Bridge 和 OVS,Neutron 除了可以创建传统的 VLAN 网络,还可以创建基于隧道技术的 Overlay 网络,比如 VxLAN 和 GRE。

2.三层路由(routing):Instance 可以配置不同网段的 IP,即不同网段的虚拟机实现互相通信。Neutron 的 router(虚拟路由器)实现 instance 跨网段通信。router 通过 IP forwarding,iptables 等技术来实现路由和 NAT。

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

4.要保证物理服务器的安全性,可以配一台防火墙。那么如何保证虚拟机的安全呢?

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

Security Group 安全组:通过 iptables 限制进出 instance 的网络包。

Firewall-as-a-Service:FWaaS,限制进出虚拟路由器的网络包,也是通过 iptables 实现。

Neutron 管理的网络资源包括 Network,subnet 和 port

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

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

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

vlan:vlan 网络是具有 802.1q tagging 的网络。vlan 是一个二层的广播域,同一 vlan 中的 instance 可以通信,不同 vlan 只能通过 router 通信。

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

Neutron的架构:

与 OpenStack 的其他服务的设计思路一样,Neutron 也是采用分布式架构,由多个组件(子服务)共同对外提供网络服务。

Neutron 由如下组件构成:

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

Plugin:处理 Neutron Server 发来的请求, 并调用 Agent 去处理请求。plugin 解决的是 What 的问题,即网络要配置成什么样子?而至于如何配置 How 的工作则交由 agent 完成。

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

network provider:提供网络服务的虚拟或物理网络设备,例如 Linux Bridge,Open vSwitch

Queue:Neutron Server,Plugin 和 Agent 之间通过 Messaging Queue 通信和调用(解耦)

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

以创建一个 VLAN100 的 network 为例,假设 network provider 是 linux bridge, 流程如下:

  1. Neutron Server 接收到创建 network 的请求,通过 Message Queue(RabbitMQ)通知已注册的 Linux Bridge Plugin。
  2. Plugin 将要创建的 network 的信息(例如名称、VLAN ID等)保存到数据库中,并通过 Message Queue 通知运行在各节点上的 Agent。
  3. Agent 收到消息后会在物理节点的网卡(比如 eth0)上创建 VLAN 设备(比如 eth2.100),并创建 bridge (比如 brqXXX) 桥接 VLAN 设备。

plugin,agent 和 network provider 是配套使用的,比如上例中 network provider 是 linux bridge,那么就得使用 linux bridge 的 plugin 和 agent;如果 network provider 换成了 OVS ,plugin 和 agent 也得替换。

plugin 的一个主要的职责是在数据库中维护 Neutron 网络的状态信息,这就造成一个问题:所有 network provider 的 plugin 都要编写一套非常类似的数据库访问代码。为了解决这个问题,Neutron 实现了一个 ML2(Modular Layer 2)plugin,对 plugin 的功能进行抽象和封装。有了 ML2 plugin,各种 network provider 无需开发自己的 plugin,只需要针对 ML2 开发相应的 driver 就可以了,工作量和难度都大大减少。

plugin 按照功能分为两类: core plugin 和 service plugin。core plugin 维护 Neutron 的 netowrk, subnet 和 port 相关资源的信息,与 core plugin 对应的 agent 包括 linux bridge, OVS 等; service plugin 提供 routing, firewall, load balance 等服务。

Management 网络:用于节点之间 message queue 内部通信以及访问 database 服务,所有的节点都需要连接到 management 网络。API 网络:OpenStack 各组件通过该网络向用户暴露 API 服务。Keystone, Nova, Neutron, Glance, Cinder, Horizon 的 endpoints 均配置在 API 网络上。

VM 网络:VM 网络也叫 tenant 网络(租户网络),用于 instance 之间通信。VM 网络可以选择的类型包括 local, flat, vlan, vxlan 和 gre。VM 网络由 Neutron 配置和管理。

External 网络:External 网络指的是 VM 网络之外的网络,该网络不由 Neutron 管理。 Neutron 可以将 router attach 到 External 网络,为 instance 提供访问外部网络的能力。

网络拓扑

时间: 2024-10-02 23:04:55

网络虚拟化 SDN的相关文章

网络虚拟化(SDN,NFV..)和企业骨干网的演化

本来昨天就规划了今天的这篇文章,无奈昨天中午自己喝了将近一瓶的52度二锅头...晚上想着今天怎么着也完了,要颓废难受一天了...没想到早上竟然一点都不难受了,于是就写下了本文.正文之前,还是做个广告,喝酒就要喝高度酒,醉得快,醒的也快. BGP和IGP的路由黑洞问题 在描述企业骨干网(大型企业的内网)之前,我得先来解释一下互联网路由的层次问题,理解了这个,你才能理解企业内网的构建规则,我还是以问题开始吧.        路由本身是层次化的,但是路由的查询则是平坦的.比如下图的情形: 现在看上图中

从SDN鼻祖Nicira到VMware NSX 网络虚拟化平台的简单探讨

以前的大二层技术,一般是在物理网络底层使用IS-IS路由技术,再在此基础之上,实现数据中心网络的二层扩展,如公有的Trill.SPB技术和Cisco私有的OTV.Fabricpath技术:前沿一些的网络虚拟化技术,使用了VXLAN.NVGRE等协议,突破VLAN和MAC的限制,将数据中心的大二层网络扩展的更大.而使用VMware NSX,则更进一步--我们可以对网络提供已对计算和存储实现的相同虚拟化功能.就像服务器虚拟化可以通过编程方式创建.删除和还原基于软件的虚拟机以及拍摄其快照一样,NSX网

实现软件定义网络(SDN)的6种途径

尽管围绕软件定义网络(SDN)的所有兴奋点都是由OpenFlow刺激起来的,但实际上利用各种标准工具对网络进行编程已经有一段时间了.OpenFlow并非实现SDN的唯一方法或者唯一途径.就目前而言,要想实现SDN,除了OpenFlow以外,至少还有6种方法或途经. 命令行接口(CLI) CLI是交换机和路由器的常用接口,网络经理们常用它来配置交换机,激活或者禁用某些服务. Arista网络的CEO Jayshree Ullal说,"要想开放,不只有一种方法.要想扩展,也不只一种方法.CLI虽然不

【VMCloud云平台】SCVMM进阶篇(一)网络虚拟化(2)

上一篇,我们讲了下最基本的SDN,就是使用CA地址的客户端如何去访问外部的网络?网络虚拟化里是否有类似"VLAN虚拟网关"的概念?还有PA跟CA到底之间具体的联系是如何实现的? 本篇涉及的网络架构由于是SCVMM进阶篇,就把SCVMM部分单独拿出来扩展,随着SCVMM进阶篇的推进,将会不断更新SCVMM架构图,图中Red.Blue两朵云分别代表租户的两个网络,Host-GW是用来做VMM网关(IP地址设置为23): 1. 上一篇中,我们创建了SC_NetWork作为主机间通信的&quo

[转]数据中心网络虚拟化 主流平台产品介绍

http://www.sdnlab.com/12076.html SDNLAB 为了对数据中心网络虚拟化有个初步的认识,本文将对当前比较主流的几款商业平台进行介绍,包括VMware公司的网络虚拟化技术,IBM公司的Dove及开源的OpenDove平台, NEC公司的virtual-network-platform和VTN平台,以及Cisco公司的Nexus虚拟化平台. 1.Vmware公司的网络虚拟化技术 VMware在虚拟化领域的领导地位使得我们必须首先介绍一下他们的网络虚拟化技术NSX.然而

openstack之Neutron网络虚拟化

第一:为什么需要网络虚拟化? 一.数据中心的现有网络不能满足云计算的物理需求: 互联网行业数据中心的基本特征就是服务器的规模偏大.进入云计算时代后,其业务特征变得更加复杂,包括:虚拟化支持.多业务承载.资源灵活调度等(如下图所示).与此同时,互联网云计算的规模不但没有缩减,反而更加庞大.这就给云计算的网络带来了巨大的压力. 互联网云计算业务特点 1. 大容量的MAC表项和ARP表项 虚拟化会导致更大的MAC表项.假设一个互联网云计算中心的服务器有5000台,按照1:20的比例进行虚拟化,则有10

Neuron实现网络虚拟化

一 引子 数据中心虚拟化成为了趋势,最典型的场景莫过于:对数据中心的服务器进行虚拟化,来提高资源利用率,同时降低单位能耗. 但是,随着数据中心虚拟化程度的不断提高.虚拟化服务器规模的不断扩大,带来了巨大的管理压力.===>这就孕育了云计算诞生的条件. ps:在大规模虚拟化的基础上,实现了自动化管理和集中化管理,就是云计算的基本模型.这一点在互联网行业尤其重要. 云计算的超大规模带来了诸多亟需解决的问题,这些问题中,首当其冲的就是网络问题.而关于网络,云计算的超大规模带来的压力问题也并不代表全部,

网络虚拟化之FlowVisor:网络虚拟层(下)

在前面两篇文章:网络虚拟化之FlowVisor:网络虚拟层(上)和网络虚拟化之FlowVisor:网络虚拟层(中)中分别介绍了FLowVisor的特性和实现,三连载的最后一篇介绍虚拟网络的隔离机制. 虚拟化的一个重要元素是切片之间的隔离,因为不同资源的隔离机制是不相同的,接下来将分别描述. 1. 带宽隔离 FLowVisor可以通过标记数据包的VLAN优先级比特位来利用现存的交换机带宽隔离特性.VLAN标签拥有三个比特域,PCP(VLAN Priority Code Point)有一个将数据包映

云大会】之三《简评:全球未来网络暨SDN技术大会》

点击上面的链接文字,可以快速关注"东方云洞察"公众号 [个人观点] 两天的会议有20多名专家学者登台献艺,具体的内容可以在这里获得:http://net.zdnet.com.cn/files/klist-9-338653-1.htm 本次会议主要以 SDN 和 NFV为核心,介绍了这两项网络虚拟化或者有人说网络云化方面的最新进展和应用情况.这两项技术目前主要用于数据中心和云计算领域的基础架构领域.在云计算普及度越来越高的今天,网络虚拟化是其中非常重要的一部分,和存储虚拟化.计算虚拟化并