注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

虚拟网络技术之叠加网络技术  

2014-07-12 17:32:04|  分类: 虚拟化技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一、VXLAN/NVGRE


网络工程师一般都很熟悉的通用路由封装(GRE),比较容易理解叠加的概念。一个数据包(或帧)封装在另一个数据包内;被封装的包转 发到隧道端点后再被拆装。原来的包就发送到了目的地。叠加网络就是使用这种所谓“包内之包”的技术安全地将一个网络隐藏在另一个网络中,然后将网络区段进 行迁移。2层扩展和多租户就是比较流行的叠加网络实例。

在过去几年间,个标准化组织已发布了不少的叠加协议,这是因为虚拟化数据中心需要在任意时间、任意地点移动主机的需求所致。有些SDN控制器使用叠 加作为其传输选项,在散布于数据中心内的各个主机之间架起了一座桥。而软交换机通常被用作隧道的另一端。虚拟可扩展局域网(VXLAN)是目前获得业界最 广泛支持的协议,思科、博科和VMware都支持叠加网络。在硬件方面支持VXLAN隧道端点的是Arista和博科的交换机。

       VXLAN的硬件端点正给业界带来一场剧变,因为叠加通常都是由软件交换机作为端点的。

       VXLAN在3层UDP包内封装2层帧。这样做可以让一个VXLAN段内的主机彼此通信,只要它们处在同一个2层网络上,即便这些主机可能被一个或多个3层网络所隔离。

      此外,由于VXLAN保留了全部的2层帧、还有VLAN标识,所以在一个VXLAN段内可允许多个3层网络存在。在该VXLAN段内的客户(也可叫做租户)会觉得这个网络很像他们以前所用过的VLAN,但底层网络只能用一个段ID来区分VXLAN的包。

每个VXLAN网络是用VXLAN包头内的段ID来区分的。这个ID有24位,也就是说可允许1600万个租户共享同一个网络基础架构,同时又可以彼此间相互隔离。

           和VXLAN相似,利用GRE实现网络虚拟化(NVGRE)使用一个24位的标识符来定义租户的网络。NVGRE主要是微软开发的技术,也是其Hyper-V所使用的叠加方法。

          尽管VMware坚定地支持VXLAN,但是它的叠加网络仍被称为无状态传输隧道(STT)。属于VMware旗下的Nicira。STT是 Nicira网络虚拟化平台的一个组成部分,尤其需要指出的是,STT的封装格式充分利用了先进网卡的硬件能力,可以将较大的数据块分解成较小的数据块。

             这被称为TCP分段卸载(TSO),一块有TSO功能的网卡可以承担分段卸载的任务,从而释放出服务器的CPU给其他任务。STT的未来尚无法确定,但VXLAN已经有了VMware的支持以及来自行业的普遍支持。

          除了VXLAN、NVGRE和STT,另一个值得关注的叠加网络技术是网络虚拟化叠加(NVO3)。NVO3是 由IETF的一个工作组开发的。关于 NVO3的问题说明与上面已经讨论过的其他叠加技术很相像,也就是说,流量孤立、租户可自由使用所选择的寻址方案,可将虚拟机在网络内自由移动,不必考虑 底层核心中3层网络的分隔等等。NVO3未来会怎么演进,如何封装尚有待观察,但NVO3工作组成员所提交的用例线路已经基本成形。

          二、使用vxlan案例(转集)

在 openvswitch 上配置 VXLAN

作者说明:本文讲的是 korg 内核中的 openvswitch,而非 openvswitch.org 上提供的openvswitch模块

       之前讲过 VXLAN,但是一直没有动手实践。其实配置 VXLAN 要比配置 GRE tunnel 简单很多,你所需要做的只要两步:

1. 添加 VXLAN 设备(需要比较新的 iproute2 和内核支持):

# ./ip/ip li add vxlan0 type vxlan id 42 group 239.1.1.1 local 10.16.43.214 mtu 1500 dev eth0

其中,10.16.43.214 是配置在 eth0 (或其它连接两台主机的设备)上的本地IP地址。

2. 把 vxlan0 添加到 openvswitch 的 bridge 中去:

# ovs-vsctl add-port ovsbr0 vxlan0

最终的结果如下所示:

# ./ip/ip -d li show vxlan0
7: vxlan0:  mtu 1500 qdisc noqueue
state UNKNOWN mode DEFAULT
    link/ether d2:93:a2:08:10:1e brd ff:ff:ff:ff:ff:ff
    vxlan id 42 group 239.1.1.1 local 10.16.43.214 dev eth0 port 32768
61000 ageing 300
# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr AC:16:2D:05:14:3A
          inet addr:10.16.43.214  Bcast:10.16.47.255  Mask:255.255.248.0
          inet6 addr: 2620:52:0:102f:ae16:2dff:fe05:143a/64 Scope:Global
          inet6 addr: fe80::ae16:2dff:fe05:143a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:386702 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1505515 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:42804806 (40.8 MiB)  TX bytes:1202562852 (1.1 GiB)
          Interrupt:20 Memory:fbc00000-fbc20000

# ifconfig vxlan0
vxlan0    Link encap:Ethernet  HWaddr D2:93:A2:08:10:1E
          inet6 addr: fe80::d093:a2ff:fe08:101e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:346746 errors:0 dropped:0 overruns:0 frame:0
          TX packets:752833 errors:36 dropped:0 overruns:0 carrier:36
          collisions:0 txqueuelen:0
          RX bytes:18081642 (17.2 MiB)  TX bytes:1139323399 (1.0 GiB)

# ovs-vsctl show
2dce25d0-ac18-4626-905d-c4995464785d
    Bridge "ovsbr0"
        Port "vnet0"
            Interface "vnet0"
        Port "vxlan0"
            Interface "vxlan0"
        Port "vnet1"
            Interface "vnet1"
        Port "ovsbr0"
            Interface "ovsbr0"
                type: internal
    ovs_version: "1.7.0"

另外一台机器上基本上完全相同,结果如下:

# ./ip/ip -d li show vxlan0
8: vxlan0:  mtu 1450 qdisc noqueue
state UNKNOWN mode DEFAULT
    link/ether 92:8b:0f:8b:31:f1 brd ff:ff:ff:ff:ff:ff
    vxlan id 42 group 239.1.1.1 local 10.16.43.215 dev eth0 port 32768
61000 ageing 300
# ifconfig vxlan0
vxlan0    Link encap:Ethernet  HWaddr 92:8B:0F:8B:31:F1
          inet6 addr: fe80::908b:fff:fe8b:31f1/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1450  Metric:1
          RX packets:752833 errors:0 dropped:0 overruns:0 frame:0
          TX packets:346770 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1128783737 (1.0 GiB)  TX bytes:22940562 (21.8 MiB)

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr E8:39:35:30:1D:1E
          inet addr:10.16.43.215  Bcast:10.16.47.255  Mask:255.255.248.0
          inet6 addr: 2620:52:0:102f:ea39:35ff:fe30:1d1e/64 Scope:Global
          inet6 addr: fe80::ea39:35ff:fe30:1d1e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1535775 errors:0 dropped:0 overruns:0 frame:0
          TX packets:346951 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1210625058 (1.1 GiB)  TX bytes:41681835 (39.7 MiB)
          Interrupt:17

# ovs-vsctl show
71f0f455-ccc8-4781-88b2-4b663dd48c5f
    Bridge "ovsbr0"
        Port "vnet1"
            Interface "vnet1"
        Port "ovsbr0"
            Interface "ovsbr0"
                type: internal
        Port "vnet0"
            Interface "vnet0"
        Port "vxlan0"
            Interface "vxlan0"
    ovs_version: "1.7.0"

      配置好了之后,你可以尝试用 tcpdump 在 eth0 上捕捉一下包试试,你会发现 L2 是直接封装到 UDP 包中的:

05:39:05.107906 IP 10.16.43.215.52908 > 10.16.43.214.otv: UDP, length
106
        0x0000:  ac16 2d05 143a e839 3530 1d1e 0800 4500
        0x0010:  0086 abd0 0000 4011 62ca 0a10 2bd7 0a10
        0x0020:  2bd6 ceac 2118 0072 0000 0800 0000 0000
        0x0030:  2a00 5254 00f7 e2e7 5254 0090 5117 0800
        0x0040:  4500 0054 0000 4000 4001 f152 c0a8 6402
        0x0050:  c0a8 6403 0800 073c 3e05 0009 ca8f 0f51
        0x0060:  0000 0000 1102 0900 0000 0000 1011 1213
        0x0070:  1415 1617 1819 1a1b 1c1d 1e1f 2021 2223
        0x0080:  2425 2627 2829 2a2b 2c2d 2e2f 3031 3233
        0x0090:  3435 3637
  评论这张
 
阅读(114)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017