openvswitch笔记

… 不定期更新

调试环境

1,编绎及运行程序

在正式阅读和调试openvswitch的代码前,先准备好环境。参考文档 Tutorials,考虑到网络问题,建议在本地镜像该网站,方法参见利用wget备份一个网站

** 代码
$ git clone https://github.com/openvswitch/ovs.git
** 源码编绎,可能会出现依赖错误,如`automake`等没安装,这时google一般都能解决,用apt源下载好即可
** 	link: https://docs.openvswitch.org/en/latest/intro/install/general/
$ cd ovs
$ ./boot.sh
$ ./configure
$ make -j4
** 如果后面没有改动文件结构,只加了一些调试信息,只需要再调用`make`即可
############################################################################################
** 以上是编绎过程,当程序都编绎好后,就可以利用`sandbox`搭建模拟的ovs环境,而不会对系统本身产生影响
$ cd ovs	** 进入主目录
$ make -j4	** 以得到所有二进制执行文件为准
$ ./tutorial/ovs-sandbox -s .
** 这样`sandbox`就建好了,如何确定环境无误呢?(博主的系统已经安装好ovs了,如何确认`sandbox`是在使用
** 源码编绎的执行文件呢)
$ ps -ef | grep ovs
xxxxxxx   1537 20111  0 11:18 pts/0    00:00:00 tmux a -t ovs
root      1722     1  0 Oct12 ?        00:00:00 ovsdb-server: monitoring pid 1723 (healthy)
root      1723  1722  0 Oct12 ?        00:00:04 ovsdb-server /etc/openvswitch/conf.db -vconsole:emer -vsyslog:err -vfile:info --remote=punix:/var/run/openvswitch/db.sock --private-key=db:Open_vSwitch,SSL,private_key --certificate=db:Open_vSwitch,SSL,certificate --bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert --no-chdir --log-file=/var/log/openvswitch/ovsdb-server.log --pidfile=/var/run/openvswitch/ovsdb-server.pid --detach --monitor
root      1821     1  0 Oct12 ?        00:00:00 ovs-vswitchd: monitoring pid 1822 (healthy)
root      1822  1821  0 Oct12 ?        00:03:24 ovs-vswitchd unix:/var/run/openvswitch/db.sock -vconsole:emer -vsyslog:err -vfile:info --mlockall --no-chdir --log-file=/var/log/openvswitch/ovs-vswitchd.log --pidfile=/var/run/openvswitch/ovs-vswitchd.pid --detach --monitor
xxxxxxx   2645 31695  0 11:20 pts/5    00:00:00 /bin/sh ./tutorial/ovs-sandbox -s .
xxxxxxx   2715     1  0 11:20 ?        00:00:00 ovsdb-server --detach --no-chdir --pidfile -vconsole:off --log-file -vsyslog:off --remote=punix:/home/xxxxxxx/docker-ovs/ovs/sandbox/db.sock --remote=db:Open_vSwitch,Open_vSwitch,manager_options
xxxxxxx   2719     1  0 11:20 ?        00:00:00 ovs-vswitchd --detach --no-chdir --pidfile -vconsole:off --log-file -vsyslog:off --enable-dummy=override -vvconn -vnetdev_dummy
xxxxxxx   2756 31542  0 11:20 pts/4    00:00:00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn ovs
** 可以看到有多个`ovs-vswitchd`,`ovsdb-server`进程运行,哪一个是`sandbox`中启动的进程?
** 	2719 和 2715
** 注意:OVS主要由两个service实现功能:`ovs-vswitchd`,`ovsdb-server`,它们都有`daemon`进程,由此
** 		很容易区分开来,`sandbox`中的进程是孤儿进程
$ lsof -p 2719
COMMAND    PID    USER   FD      TYPE             DEVICE SIZE/OFF    NODE NAME
ovs-vswit 2719 xxxxxxx  cwd       DIR                8,1     4096 1053020 /home/xxxxxxx/docker-ovs/ovs/sandbox
ovs-vswit 2719 xxxxxxx  rtd       DIR                8,1     4096       2 /
ovs-vswit 2719 xxxxxxx  txt       REG                8,1 14669744 1314212 /home/xxxxxxx/docker-ovs/ovs/vswitchd/ovs-vswitchd
... ...
ovs-vswit 2719 xxxxxxx    3w      REG                8,1      576 1053312 /home/xxxxxxx/docker-ovs/ovs/sandbox/ovs-vswitchd.log
... ...
ovs-vswit 2719 xxxxxxx   10uW     REG                8,1        5 1053313 /home/xxxxxxx/docker-ovs/ovs/sandbox/ovs-vswitchd.pid
ovs-vswit 2719 xxxxxxx   11w     FIFO               0,10      0t0 2249436 pipe
ovs-vswit 2719 xxxxxxx   12u     unix 0x0000000000000000      0t0 2247581 /home/xxxxxxx/docker-ovs/ovs/sandbox/ovs-vswitchd.2719.ctl type=STREAM
... ...
*** 可以看到进程是由源码编绎生成的文件执行而来的,这样仿真环境就建立好了

2,安装镜像并使用容器 --> Faucet

为了建立网络拓扑,首先需要一些网络节点,最方便的莫过于docker了,其它的虚拟化,甚至是物理机都行。这里参考官方文档 OVS Faucet Tutorial

$ git clone https://github.com/faucetsdn/faucet.git
$ cd faucet
** 接下来是创建容器,同样是国内网络问题,下载速度可能会极慢,甚至失败。
$ ln -s Dockerfile.faucet Dockerfile
$ docker build -t faucet/faucet .
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
faucet/faucet       latest              4be032d13566        12 hours ago        215MB
faucet/python3      4.0.0               301fd7e94942        2 months ago        58.4MB

** 接下来是运行该镜像
** 先在faucet目录下新建文件夹,这是给容器使用的,容器本身在后台运行,其交互都由这个文件夹来完成
$ cd faucet
$ mkdir inst
$ docker run -d --name faucet --restart=always \
		-v $(pwd)/inst/:/etc/faucet/ \
		-v $(pwd)/inst/:/var/log/faucet/ \
		-p 6653:6653 -p 9302:9302 \
		faucet/faucet
5cbebce29c44bde9ef8d4242826ec7d6c6996641c137283c8c678f9cb368b5a3
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
5cbebce29c44        faucet/faucet       "/usr/local/bin/entr…"   4 seconds ago       Up 2 seconds        0.0.0.0:6653->6653/tcp, 0.0.0.0:9302->9302/tcp   faucet
** 在后面的调试中需要更改容器的配置,一般需要重启容器
$ docker restart faucet
faucet

根据官方说明文档在实际环境中运行

1, OVS Faucet Tutorial

这一篇主要是使用sandboxfaucet容器结合起来介绍OVS在Layer2和Layer3上的特性,是一篇很好的入门文档,下面是博主在自己的机器上实际操作的过程,以及一些粗浅的理解。
注意:该官方文档应该有一段时间了,博主下载的版本在实际操作过程中与该文档并不完全一致,这里以博主所用版本为准

** OVS版本信息
$ cd ovs
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
$ git log
commit 53c0bd5de496f54f9ce85ace4b67b3dee59b0ed3
Author: Ilya Maximets <i.maximets@ovn.org>
Date:   Wed Oct 9 16:23:31 2019 +0200
... ...

$ ./vswitchd/ovs-vswitchd --version
ovs-vswitchd (Open vSwitch) 2.12.90
** faucet版本信息
$ cd faucet
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
$ git log
commit a05e8c93a3143668e8368e9def70e5fce06c62e1
Merge: 072cb9c bfb0669
Author: Brad Cowie <brad@wand.net.nz>
Date:   Mon Oct 7 14:56:39 2019 +1300
... ...
** 宿主机信息
$ uname -a
Linux docker 4.4.0-157-generic #185-Ubuntu SMP Tue Jul 23 09:17:01 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.6 LTS
Release:        16.04
Codename:       xenial

1)前言

OVSFaucet都准备好后,就可以开始了。下面的内容主要包括三个方面:

  • Switch: Layer 2
  • Routing: Layer 3
  • ACLs: Access Control rules

每一步都会讨论下面三个部分

  • Faucet
    这是网络节点,主要通过faucet.yaml来进行配置,尔后重启容器即可。
  • The OpenFlow subsystem in Open vSwitch
    这个部分是OpenFlow协议,OVS遵守这个协议,在这里体现为openflow table,即所谓流表。主要用到下面这些工具:
    • ovs-vsctl用来管理BRIDGE设备的,在这里用来创建网桥(OVS下的网桥,与linux下的网桥设备不一样,但其在TCP/IP协议栈上的位置是一样的)
    • ovs-ofctl用来查看流表配置
    • ovs-appctl它与守护进程 ovs-vswitchd可以进行通信,在这里的作用就是制造数据包发送出去
  • Open vSwitch datapath这个指的是OVS底层数据流的走向,术语叫datapath。一般而言指这两种:Linux kernel 和 DPDK。讨论这个的原因在于对OVS而言,datapath的"长度"是决定它性能的主导因素。

2)Layer 2, Switching

这里用到的网络拓扑如下图所示
交换机网络拓扑示意图

1> 环境的配置
  • container的配置
** 先根据上面的方法建立起容器<faucet>
$ cd faucet/inst
$ vim faucet.yaml
dps:
    switch-1:
        dp_id: 0x1
        timeout: 3600
        arp_neighbor_timeout: 1200
        interfaces:
            1:
                native_vlan: 100
            2:
                native_vlan: 100
            3:
                native_vlan: 100
            4:
                native_vlan: 200
            5:
                native_vlan: 200
vlans:
    100:
    200:
** 重启容器,这里的配置会被容器读取并作用于容器内部,作用就是配置interfaces
$ docker restart faucet
faucet
** 容器重启并读取该配置后,如若成功,应该能看到以下log
$ cat faucet.log
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值