Docker 节点在 ODL 控制下的 OVS 网桥连接
来源:互联网 发布:mac共享windows文件夹 编辑:程序博客网 时间:2024/05/21 19:36
Docker 节点在 ODL 控制下的 OVS 网桥连接
成文时间
2017年2月15日软件配置
ODL:Boron SR2
OVS:2.6.1
Docker:1.13.1作者信息
白威挺版权说明
本文版权归作者所有,欢迎加入讨论,转载注明出处
目录
- Docker 节点在 ODL 控制下的 OVS 网桥连接
- 目录
- Docker 的安装
- 在 Windows 上安装
- 在 Linux 上安装
- Container 连接 OVS
- OVS 与 ODL 连接并下发流表
- 使用 RESTful API 查看流表
Docker 的安装
这里分为主要的两种情况,在 Windows 系统(本文以 Windows 10 为例)上安装和在 Linux 系统(本文以 Ubuntu 为例)上安装。
在 Windows 上安装
下载 Windows 版 Docker,直接安装即可。但是要注意当前操作系统版本及 Hyper-V 特征是否启用。Docker 目前在桌面级 Windows 上只支持 Windows 10 专业版以上系统,并且需要开启 Hyper-V。详细信息参见在 Windows 上安装 Docker。
在 Windows Server 2016 上安装 Docker
请参见 MSDN 上关于该问题的专题文档。请注意,在 Windows Server 2016 上的 Docker 只支持 Windows 容器,不支持 Linux 容器。而 Windows 10 上可以安装 Linux 容器,也可以使用 Windows 容器(需要转换模式)。
在 Linux 上安装
第一步,保证在root
用户权限下执行命令。
第二步,建立存储点。执行如下命令:
apt-get install -y --no-install-recommends \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
第三步,添加 Docker GPG 公钥到本地。执行如下命令:
curl -fsSL https://apt.dockerproject.org/gpg | sudo apt-key add -
确认公钥是58118E89F3A912897C070ADBF76221572C52609D
,然后执行添加命令:
apt-key fingerprint 58118E89F3A912897C070ADBF76221572C52609D
第四步,添加稳定版储存地址。执行如下命令:
add-apt-repository \ "deb https://apt.dockerproject.org/repo/ \ ubuntu-$(lsb_release -cs) \ main"
第五步,更新系统系统软件目录。执行如下命令:
apt-get update
第六步,安装最新版本 Docker 引擎。执行如下命令:
apt-get -y install docker-engine
第七步,确认已经安装完毕。执行命令:
docker run hello-world
安装特定版本的 Docker
先执行如下命令:apt-cache madison docker-engine
系统将会输出一系列版本信息,选择合适的版本输入如下命令:
apt-get -y install docker-engine=<VERSION_STRING>
Container 连接 OVS
首先建立一个网桥:
ovs-vsctl add-br br0
随后启动两个 Ubuntu 14.04 容器(启动两个不同的shell
):
docker run --net=none --privileged=true -it ubuntu:14.04 bash
你将会得到类似这样的shell
:
root@52204b2d75b4:/#
记住返回的ID号(本例是52204b2d75b4
)在返回的shell
中执行如下命令:
ifconfig
应该会返回一个本地环回端口lo
。在最新版的 Docker 中已经包含了 ovs-docker 工具,执行如下命令:
ovs-docker add-port br0 eth0 52204b2d75b4
给52204b2d75b4
添加一个eth0
端口,同时将eth0
连接到br0
上。两个 Container 上都要执行这样的操作。再在容器中执行ifconfig
命令,查看添加的eth0
端口。目前eth0
上没有 IP 地址,我们添加一个:
ifconfig eth0 172.66.66.1/24
另一个容器设为172.66.66.3/24
。将本地br0
网桥设置为172.66.66.2/24
:
ip addr add 172.66.66.2/24 dev br0
然后容器互ping
,应该是能够ping
通,这便完成了容器与 OVS 的连接。
OVS 与 ODL 连接并下发流表
首先启动 ODL:
cd /usr/opendaylight/distribution-karaf-0.4.2-Beryllium-SR2/bin ./karaf
然后登陆 WEB 页面 http://127.0.0.1:8181/index.html,进入拓扑查看界面。默认账户密码均为 admin
将网桥 br0 连接到 ODL 控制器,执行命令
ovs-vsctl set-controller br0 tcp:127.0.0.1:6633
然后容器互ping
,发现不能ping
通,因为在 OVS 连接 ODL 后就从 L2 Switch 变为了 Open Flow 交换机,在交换机内没有流表,而 Open Flow 的默认动作就是drop
,必然不能互相ping
通。
在 ODL 的node
界面中查看node connectors
,观察端口编号和 Node 编号(本例中是openflow:33868190936130),本例中两个 container 链接到br0
的编号为 1 和 2 的两个端口。
下面在br0
添加一条单向流表:
ovs-ofctl add-flow br0 priority=12,in_port=1,actions=output:2
现在继续容器互ping
,发现不能ping
通,因为无法返回消息。再添加一条单向流表:
ovs-ofctl add-flow br0 priority=12,in_port=2,actions=output:1
现在继续容器互ping
,发现成功ping
通。
使用 RESTful API 查看流表
在 FireFox 浏览器中安装HttpRequester。然后在url
框中输入:
http://127.0.0.1:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:33868190936130/flow-node-inventory:table/0
使用GET
模式,单击Submit
则可以在右侧输出栏中看到目前交换机内的流表信息。在本例中如下:
{ "flow-node-inventory:table": [ { "id": 0, "opendaylight-flow-table-statistics:flow-table-statistics": { "active-flows": 2, "packets-looked-up": 80, "packets-matched": 68 }, "flow": [ { "id": "#UF$TABLE*0-2", "idle-timeout": 0, "cookie": 0, "flags": "NO_BYT_COUNTS", "hard-timeout": 0, "instructions": { "instruction": [ { "order": 0, "apply-actions": { "action": [ { "order": 0, "output-action": { "output-node-connector": "1", "max-length": 0 } } ] } } ] }, "opendaylight-flow-statistics:flow-statistics": { "duration": { "nanosecond": 479000000, "second": 1134 }, "byte-count": 2898, "packet-count": 53 }, "priority": 12, "table_id": 0, "match": { "in-port": "openflow:33868190936130:2" } }, { "id": "#UF$TABLE*0-3", "idle-timeout": 0, "cookie": 0, "flags": "NO_BYT_COUNTS", "hard-timeout": 0, "instructions": { "instruction": [ { "order": 0, "apply-actions": { "action": [ { "order": 0, "output-action": { "output-node-connector": "2", "max-length": 0 } } ] } } ] }, "opendaylight-flow-statistics:flow-statistics": { "duration": { "nanosecond": 731000000, "second": 1014 }, "byte-count": 1218, "packet-count": 13 }, "priority": 12, "table_id": 0, "match": { "in-port": "openflow:33868190936130:1" } } ] } ]}
可以发现和添加的流表信息一致。
- Docker 节点在 ODL 控制下的 OVS 网桥连接
- SDN 下用ODL实现QoS保障(4)-OVS与ODL交互
- SDN 下用ODL实现QoS保障(3)-OVS相关命令介绍
- OVS网桥建立和连接管理
- 在Ubuntu下安装ovs-dpdk
- Patch 构建OVS网桥和OVS网桥相连的网络
- ovs+dpdk-docker实践
- MPICH2下利用machinefile选项控制进程在各节点的分布
- docker下搭建三个节点
- 在openstack compute节点中配置Docker遇到的问题
- OpenStack在计算节点安装Docker遇到的问题
- 如何用postman控制ODL设置端口的QoS, 并下发流表到交换机做限速配置
- OVS : 构建网桥和网桥相连的网络
- OVS 网桥的Patch端口学习笔记
- docker-py在suse下的安装
- Docker 在 CentOS 下的安装、使用
- Docker 在 openSUSE 下的安装、使用
- 在docker下创建自己的image
- php插入mysql数据返回id
- 文件上传一
- Linux实现进度条小程序
- Java简介
- 8086汇编7:跳转指令
- Docker 节点在 ODL 控制下的 OVS 网桥连接
- tomcat——简单的Web服务器和Servlet容器
- 数学基础 -- 基础定义(集合、实数集、映射、函数)
- CQOI2014 排序机械臂--splay膜版题
- php查询mysql分页查询返回数组
- 欢迎使用CSDN-markdown编辑器
- C++语法(二)
- php分页查询mysql结果base64处理
- 本地通知(UILocalNotification) - 隔几分钟或者几个小时进行一次通知