OVS 配置 VxLAN

                 HOST A
------------------------------------------
| zh-veth0(10.1.1.1) VM A |
| ---|---- |
| | |
| | |------------| |
| zh-veth1|--| zh-br-int | |
| |------------| |
-----------------| eth0 |-----------------
|(172.17.6.223)
| HOST B
| ------------------------------------------
| | zh-veth0(10.1.1.2) VM B |
| | ---|---- |
| | | |
| | | |------------| |
| | zh-veth1|--| zh-br-int | |
| | |------------| |
| -----------------| eth0 |-----------------
| |(172.17.6.249)
|---------------------------------------------------|

背景知识

网络地址空间: Linux network namespace(netns)

用于隔离同一台宿主机的不同网络配置,是Linux namespace的一个子系统.
root@ubuntu:~# ip netns add zh 将创建一个网络地址空间命名为zh.
网络地址空间在docker或者LXC 还有一些虚拟化软件里面被广泛使用.

OVS: Open Virtual Switch

用于在Linux上虚拟出交换机,用软件形式模拟交换机的工作,同时也支持openflow等控制协议.

VxLAN

有种overlay技术,本质为利用UDP封装二层协议,建立三层的隧道,此隧道转发二层协议。
利用VxLAN可以突破VLAN的4096个限制,实现同一个网断下不同租户的隔离.

实验

通过配置VxLAN, 使得vm A 与 vm B 能够互相通信

步骤
1. 建立虚拟交换机
2. 将eth0 挂载到虚拟交换机
3. 利用网络地址空间,模拟出VM网卡对
4. 为虚拟机配置IP
5. 建立HOST A与HOST B的VxLAN 隧道
步骤详细
1. 建立虚拟交换机
root@ubuntu:~# ovs-vsctl br-add zh-br-int
此处创建了一个名为zh-br-int的交换机,如上图所示 root@ubuntu:~# ovs-vsctl show
0979572b-2478-4f6c-9d48-82f9ec58da7c
Port zh-br-int
Interface zh-br-int
type: internal
Port "eth0"
Interface "eth0"
ovs_version: "1.4.6"
2. 将eth0挂载到虚拟交换机
root@ubuntu:~# ovs-vsctl add-port zh-br-int eth0 \
&& ifconfig eth0 0.0.0.0 && ip a add 172.17.6.223/16 brd + dev zh-br-int \
&& ip r add default via 172.17.0.1 将eth0挂载到交换机,以为着交换机直接与外部网络连接起来,这时候需要将原来的eth0的IP配置到虚拟交换机上,也就是 zh-br-int 这个接口,默认情况下,创建的交换机都会有一个与其相同命名的接口,用来对此交换机做配置,不然交换机是没有IP这个概念的.
除了配置IP外,还需要加上默认网关。
这里的命令需要一次性完成,不然挂载eth0到交换机会且配置eth0的过程会导致网络端口,除非你有两块网卡可以避免这种问题. 配置完后可以看到在网卡配置下面是这样的
root@ubuntu:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:5d:45:a7
inet6 addr: fe80::20c:29ff:fe5d:45a7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1043789006 errors:4 dropped:2648455 overruns:0 frame:0
TX packets:4136534 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:79136937123 (79.1 GB) TX bytes:1685730355 (1.6 GB)
Interrupt:19 Base address:0x2000 lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:2029312 errors:0 dropped:0 overruns:0 frame:0
TX packets:2029312 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1075915373 (1.0 GB) TX bytes:1075915373 (1.0 GB) zh-br-int Link encap:Ethernet HWaddr 00:0c:29:5d:45:a7
inet addr:172.17.6.223 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::20c:29ff:fe5d:45a7/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18748892 errors:0 dropped:12476 overruns:0 frame:0
TX packets:88498 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3315299018 (3.3 GB) TX bytes:18437372 (18.4 MB)
3. 利用网络地址空间,模拟出VM网卡对
root@ubuntu:~# ip netns add zh
root@ubuntu:~# ip netns
zh 创建了网络地址空间,这里可以看做,zh 就是虚拟机的网络,进入 zh 配置就是进行虚拟机的配置. root@ubuntu:~# ip link add zh-veth0 type veth peer name zh-veth1
root@ubuntu:~# ip link set veth0 netns zh 对应了图的两个接口,一个是 zh-veth0 是虚拟机的网络接口,一个 zh-veth1 的交换机的接口
这里将 zh-veth0 放入到了网络地址空间zh, 意味着在宿主机上是看不见这个网口的,他在虚拟机中与 zh-veth1 是可以看做一条网线接着的两个口. root@ubuntu:~# ovs-vsctl add-port br-int zh-veth1
root@ubuntu:~# ifconfig zh-veth1
zh-veth1 Link encap:Ethernet HWaddr c6:c6:9b:7f:bb:73
inet6 addr: fe80::c4c6:9bff:fe7f:bb73/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:79 errors:0 dropped:0 overruns:0 frame:0
TX packets:9775120 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:6669 (6.6 KB) TX bytes:1585140114 (1.5 GB) 这样就在本地虚拟交换机与VM之间建立了一条连接 root@ubuntu:~# ip netns exec zh ip link set zh-veth0 up 将VM中的zh-veth0置为UP root@ubuntu:~# ip netns exec zh ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
13: zh-veth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 5a:bb:cb:54:6c:2f brd ff:ff:ff:ff:ff:ff
inet 10.1.1.1/24 scope global zh-veth0
valid_lft forever preferred_lft forever
inet6 fe80::58bb:cbff:fe54:6c2f/64 scope link
valid_lft forever preferred_lft forever
4. 为虚拟机配置IP
root@ubuntu:~# ip netns exec zh ip addr add 10.1.1.1/24 dev zh-veth0
root@ubuntu:~# ip link set zh-veth1 up
命令 ip netns exec zh 这一串代表了进入zh 进行网络操作,可以看做是配置虚拟机 zh 的网路
这里给 VM A 配置 IP 地址为 10.1.1.1/24 , 这个地址不同于本地网路的 172.17.0.0/16 地址段,是一个完全私有的地址段,这也就是虚拟网络的虚拟局域网概念
5. 建立HOST A与HOST B的VxLAN 隧道
root@ubuntu:~# ovs-vsctl add-port zh-br-int zh-vxlan0 -- set interface zh-vxlan0 type=vxlan options:remote_ip=172.17.6.249

HOST B 上面的配置与 HOST A相同,只不过VM 的IP需要配置为对端的,并且VxLAN隧道的remote_ip也不一样.

结果

我们在 VM B 上面启动一个 HTTP Server

root@ubuntu:~# ip netns exec zh python -m SimpleHTTPServer

在 VM A 上利用 curl 访问

root@ubuntu:~# ip netns exec zh curl 10.1.1.2:8000

在 VM B 上看到日志
10.1.1.1 - - [24/Sep/2015 18:06:10] "GET / HTTP/1.1" 200 -
10.1.1.1 - - [24/Sep/2015 18:08:29] "GET / HTTP/1.1" 200 -
10.1.1.1 - - [24/Sep/2015 18:08:34] "GET / HTTP/1.1" 200 -
10.1.1.1 - - [25/Sep/2015 15:03:06] "GET / HTTP/1.1" 200 -

[原] 利用 OVS 建立 VxLAN 虚拟网络实验的更多相关文章

  1. 理解 neutron(15):Neutron Linux Bridge + VLAN/VXLAN 虚拟网络

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  2. Open vSwitch系列实验(三):Open vSwitch的VxLAN隧道网络实验

    1 实验目的 该实验通过Open vSwitch构建Overlay的VxLAN网络,更直观的展现VxLAN的优势.在实验过程中,可以了解如何建立VxLAN隧道并进行配置,并实现相同网段和不同网段之间的 ...

  3. 虚拟网络学习笔记之一:VXLAN

    1. 什么是虚拟网络? 答:从架构角度考虑,我们可以采用与服务器虚拟化引入Hypervisor的方式一样,引入Nypervisor或者叫“虚拟网络管理平台”实现虚拟网络.虚拟网络必须像虚拟机一样,脱离 ...

  4. 【Network】OVS、VXLAN/GRE、OVN等 实现 Docker/Kubernetes 网络的多租户隔离

    多租户隔离 DragonFlow与OVN | SDNLAB | 专注网络创新技术 Neutron社区每周记(6.25~7.6)| OVS将加入Linux基金会?OVN或抛弃ovsdb? | Unite ...

  5. [转载]OpenStack OVS GRE/VXLAN网络

      学习或者使用OpenStack普遍有这样的现象:50%的时间花费在了网络部分:30%的时间花费在了存储方面:20%的时间花费在了计算方面.OpenStack网络是不得不逾越的鸿沟,接下来我们一起尝 ...

  6. 在mininet上基于ovs,ovx,pox搭建三点虚拟网络

    本次试验基于mininet平台,在平台中利用ovs新建1个交换机,以pox为控制器,ovx作为中间层实现虚拟化. 基础请参照http://ovx.onlab.us/getting-started/tu ...

  7. 软件定义网络实验记录④--Open vSwitch 实验——Mininet 中使用 OVS 命令

    一.实验目的 Mininet 安装之后,会连带安装 Open vSwitch,可以直接通过 Python 脚本调用 Open vSwitch 命令,从而直接控制 Open vSwitch,通过实验了解 ...

  8. 探索 OpenStack 之(8):Neutron 深入探索之 OVS + GRE 之 完整网络流程 篇

    前两篇博文分别研究了Compute节点和Neutron节点内部的网络架构.本文通过一些典型流程案例来分析具体网络流程过程. 0. 环境 同 学习OpenStack之(7):Neutron 深入学习之 ...

  9. 利用 VMWare 搭建随机拓扑网络

    这篇文章是计算机网络上机实验课的作业. 实验任务:利用 VMWare 搭建一个由 5 个主机组成的随机拓扑的网络.要求该网络中至少有 2 个子网,两个路由器 .实验的网络拓扑图如下: 网络中有两个路由 ...

随机推荐

  1. Android UI体验之全屏沉浸式透明状态栏效果

    前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...

  2. 修改eclipse皮肤

    习惯了vim黑色背景的程序猿们想必用eclipse时会倍感的不适应吧,不过没关系,因为eclipse的皮肤是可以自己定制的! 下面是我电脑上的eclipse界面,看到这个是不是找回了vim的感觉呢? ...

  3. Mac上MySQL忘记root密码且没有权限的处理办法&workbench的一些tips (转)

    忘记Root密码肿么办 Mac上安装MySQL就不多说了,去mysql的官网上下载最新的mysql包以及workbench,先安装哪个影响都不大.如果你是第一次安装,在mysql安装完成之后,会弹出来 ...

  4. 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案

    相信很多小伙伴都在android开发中遇到调用jni的各种巨坑,因为我们不得不在很多地方用到第三方库so文件,然而第三方官方通常都只会给出ADT环境下的集成方式,而谷歌亲儿子android studi ...

  5. MementoPattern(备忘录模式)

    /** * 备忘录模式 * @author TMAC-J * 用于存储bean的状态 */ public class MementoPattern { public class Memento{ pr ...

  6. Spark Streaming+Kafka

    Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...

  7. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  8. JQuery插件定义

    一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery.我曾经也是这样的人 ...

  9. 分享一个与ABP配套使用的代码生成器源码

    点这里进入ABP系列文章总目录 分享一个与ABP配套使用的代码生成器源码 真对不起关注我博客的朋友, 因最近工作很忙, 很久没有更新博客了.以前答应把自用的代码生成器源码共享出来, 也一直没有时间整理 ...

  10. ABP框架实践基础篇之开发UI层

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 说明 其实最开始写的,就是这个ABP框架实践基础篇.在写这篇博客之前,又回头复习了一下ABP框架的理论,如果你还没学习,请查看AB ...