admin管理员组文章数量:1630193
… 不定期更新
文章目录
- 调试环境
-
- 1,编绎及运行程序
- 2,安装镜像并使用容器 --> Faucet
- 根据官方说明文档在实际环境中运行
-
- 1, [OVS Faucet Tutorial](https://docs.openvswitch/en/latest/tutorials/faucet/)
-
- 1)前言
- 2)Layer 2, Switching
-
- 1> 环境的配置
- 2> 在跟踪数据流前,对流表及相应的工具做一些了解
- 3> 跟踪数据流
- 3)Layer 2, Routing
-
- 1> 环境的配置
- 2> 跟踪数据流
- 代码目录(暂定)
调试环境
1,编绎及运行程序
在正式阅读和调试openvswitch的代码前,先准备好环境。参考文档 Tutorials,考虑到网络问题,建议在本地镜像该网站,方法参见利用wget备份一个网站
** 代码
$ git clone https://github/openvswitch/ovs.git
** 源码编绎,可能会出现依赖错误,如`automake`等没安装,这时google一般都能解决,用apt源下载好即可
** link: https://docs.openvswitch/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/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
这一篇主要是使用sandbox
和faucet
容器结合起来介绍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>
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.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)前言
当OVS
和Faucet
都准备好后,就可以开始了。下面的内容主要包括三个方面:
Switch
: Layer 2Routing
: Layer 3ACLs
: 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
...
本文标签: 笔记openvswitch
版权声明:本文标题:openvswitch笔记 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1729027384a1183410.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论