OpenDaylight 部署及使用完全指南:从环境搭建到 SDN 实践
OpenDaylight(ODL)作为最主流的开源 SDN 控制器之一,凭借模块化架构、多协议支持及活跃的社区生态,成为企业级 SDN 部署与开发者学习的首选工具。本文将从环境准备→控制器部署→网络拓扑对接→基础功能验证四个维度,提供 step-by-step 实操教程,兼顾新手入门与工程化实践需求。
一、前置知识与环境要求
在开始部署前,需明确 ODL 的运行依赖与硬件 / 软件规格,避免因环境不兼容导致部署失败。
1.1 核心概念速览
- SDN 架构:ODL 作为控制层核心,负责转发策略制定,通过 OpenFlow/NetConf 等协议与数据层(交换机)通信,实现 “控制与转发分离”。
- ODL 版本选择:目前稳定版为 Carbon(2017)、Nitrogen(2018)、Oxygen(2019),推荐新手选择 Nitrogen(兼容性强、文档完善),本文以该版本为例。
- 依赖组件:ODL 基于 Java 开发,需 JDK 8(注意:JDK 9 + 不兼容旧版本 ODL),网络环境需支持 IPv4/IPv6,且关闭防火墙避免端口拦截。
1.2 环境规格要求
| 类型 | 最低配置 | 推荐配置 |
|---|---|---|
| 操作系统 | Ubuntu 16.04 LTS / CentOS 7 | Ubuntu 18.04 LTS / CentOS 7 |
| CPU | 2 核 | 4 核及以上 |
| 内存 | 4GB | 8GB 及以上(避免内存溢出) |
| 磁盘空间 | 20GB | 50GB(预留日志 / 模块空间) |
| 网络 | 静态 IP(避免 IP 动态变化) | 双网卡(管理 / 数据分离) |
二、环境准备:JDK 安装与配置
ODL 运行依赖 JDK 8,需先完成 JDK 安装并配置环境变量,步骤如下(以 Ubuntu 18.04 为例):
2.1 卸载系统自带 OpenJDK(可选)
若系统预装 OpenJDK,可能与 ODL 冲突,需先卸载:
# 查看已安装的Java版本
java -version
# 若显示OpenJDK,执行卸载(以openjdk-11为例)
sudo apt-get remove openjdk-11-* -y
2.2 安装 Oracle JDK 8
-
下载 JDK 8 压缩包(需注册 Oracle 账号):Oracle JDK 8 下载地址(选择
jdk-8u381-linux-x64.tar.gz)。 -
解压到指定目录(推荐
/usr/local/java):# 创建目录 sudo mkdir -p /usr/local/java # 解压压缩包(路径需替换为你的下载路径) sudo tar -zxvf ~/Downloads/jdk-8u381-linux-x64.tar.gz -C /usr/local/java/ -
配置环境变量(全局生效):
# 编辑profile文件 sudo vim /etc/profile # 在文件末尾添加以下内容(注意JDK路径与版本匹配) export JAVA_HOME=/usr/local/java/jdk1.8.0_381 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH # 生效环境变量 source /etc/profile -
验证安装结果:
java -version javac -version若输出以下内容,说明 JDK 配置成功:
java version "1.8.0_381" Java(TM) SE Runtime Environment (build 1.8.0_381-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.381-b09, mixed mode)
三、OpenDaylight 控制器部署
ODL 提供两种部署方式:压缩包解压(推荐新手)、源码编译(适合二次开发),本文重点讲解压缩包部署。官网下载地址:https://docs.opendaylight.org/
3.1 下载 ODL Nitrogen 版本
从 ODL 官网下载稳定版压缩包,或通过 wget 直接下载(需注意版本链接有效性):
# 下载Nitrogen版本(2018年稳定版)
wget https://nexus.opendaylight.org/content/repositories/public/org/opendaylight/integration/distribution-karaf/0.7.3-Carbon/distribution-karaf-0.7.3-Carbon.tar.gz
# 若链接失效,可从ODL归档库查找:https://archive.opendaylight.org/
3.2 解压并启动 ODL 控制器
-
解压到工作目录(如
/opt/odl):# 创建目录 sudo mkdir -p /opt/odl # 解压 sudo tar -zxvf distribution-karaf-0.7.3-Carbon.tar.gz -C /opt/odl/ # 简化目录名(可选) sudo mv /opt/odl/distribution-karaf-0.7.3-Carbon /opt/odl/nitrogen -
启动 ODL 控制器(首次启动需加载模块,耗时约 3-5 分钟):
# 进入ODL启动目录 cd /opt/odl/nitrogen/bin # 启动控制器(前台运行,便于查看日志;后台运行加 -d 参数) ./karaf -
验证启动成功:
- 若终端显示
opendaylight-user@root>命令行提示符,说明控制器启动成功。 - 查看 ODL 监听端口(默认 8181 为 REST API 端口,6633 为 OpenFlow 端口):
bash
若输出netstat -tuln | grep -E "8181|6633"tcp6 0 0 :::8181 :::* LISTEN和tcp6 0 0 :::6633 :::* LISTEN,则端口正常。
- 若终端显示
3.3 安装 ODL 核心功能模块
ODL 采用模块化设计,默认仅加载基础模块,需手动安装 SDN 核心功能模块(如 OpenFlow、RESTCONF、拓扑管理等):在 opendaylight-user@root> 命令行中执行:
# 安装核心模块(涵盖OpenFlow 1.3、REST API、拓扑可视化等)
feature:install odl-restconf odl-l2switch-switch-ui odl-openflowplugin-flow-services-ui odl-mdsal-apidocs odl-dluxapps-applications
- 模块说明:
odl-restconf:提供 REST API 接口,用于外部系统调用 ODL。odl-l2switch-switch-ui:二层交换机管理 UI。odl-openflowplugin-flow-services-ui:OpenFlow 流表管理 UI。odl-dluxapps-applications:ODL Web 管理界面(可视化拓扑、流表)。
安装完成后,可通过 feature:list | grep odl- 查看已安装模块。
四、ODL Web 界面与基础配置
ODL 提供 Web 管理界面(DLUX),可直观查看拓扑、配置流表,无需纯命令行操作。
4.1 访问 ODL Web 界面
-
确保控制器所在服务器防火墙已开放 8181 端口(以 Ubuntu 为例):
sudo ufw allow 8181/tcp sudo ufw reload -
在本地浏览器输入地址:
http://[ODL服务器IP]:8181/index.html例如:http://192.168.1.100:8181/index.html -
登录认证:默认用户名 / 密码为
admin/admin(生产环境需修改,见 4.2 节)。 -
界面功能分区:
- Topology:查看网络拓扑(交换机、主机连接关系)。
- Flows:管理 OpenFlow 流表(添加、删除、修改流规则)。
- Nodes:查看接入的交换机节点信息(DPID、端口、状态)。
- Hosts:查看接入网络的主机(IP、MAC、连接端口)。
4.2 修改默认登录密码(安全优化)
默认密码存在安全风险,需及时修改:
- 在 ODL 命令行(
opendaylight-user@root>)执行:# 进入Karaf配置目录 cd /opt/odl/nitrogen/etc # 编辑users.properties文件 vim users.properties - 找到
admin=admin,admin行,格式为[用户名]=[密码],[角色],修改为新密码(如admin=NewPass123!,admin)。 - 重启 ODL 控制器生效:
# 退出当前Karaf会话(按Ctrl+D) ./bin/karaf stop ./bin/karaf # 重新启动
五、对接 Mininet 模拟网络:验证 ODL 功能
为验证 ODL 的 SDN 控制能力,我们使用 Mininet(轻量级网络模拟器)创建虚拟拓扑,并将其接入 ODL 控制器,实现 “控制器管理虚拟交换机”。
5.1 安装 Mininet(Ubuntu 环境)
# 安装依赖
sudo apt-get update
sudo apt-get install mininet -y
# 验证安装(启动简单拓扑)
sudo mn --test pingall
若输出 *** Results: 0% dropped (2/2 received),说明 Mininet 安装成功。
5.2 创建 Mininet 拓扑并接入 ODL
通过 Mininet 命令创建 “1 个控制器(ODL)+ 2 个交换机 + 2 个主机” 的拓扑,并将交换机连接到 ODL:
# 命令格式:sudo mn --controller=remote,ip=[ODL_IP],port=6633 --switch=ovsk,protocols=OpenFlow13 --topo=linear,2
sudo mn --controller=remote,ip=192.168.1.100,port=6633 --switch=ovsk,protocols=OpenFlow13 --topo=linear,2
- 参数说明:
--controller=remote:指定远程控制器(ODL),ip 为 ODL 服务器 IP,port 为 OpenFlow 端口(6633)。--switch=ovsk,protocols=OpenFlow13:使用 Open vSwitch(OVS)作为虚拟交换机,协议为 OpenFlow 1.3。--topo=linear,2:线性拓扑,2 个交换机(每个交换机连接 1 个主机,共 2 个主机)。
5.3 验证拓扑接入与通信
-
在 ODL Web 界面查看拓扑:进入
Topology页面,可看到 2 个交换机(图标为交换机)和 2 个主机(图标为电脑),且交换机已连接到 ODL(状态为 “在线”)。 -
在 Mininet 中测试主机通信:在 Mininet 命令行(
mininet>)执行:# 主机h1 ping 主机h2 h1 ping -c 3 h2若输出
3 packets transmitted, 3 received, 0% packet loss,说明 ODL 已自动下发二层转发规则,主机可正常通信(ODL 的 L2Switch 模块默认开启 “泛洪抑制” 与 “MAC 学习”)。 -
查看流表:在 ODL Web 界面进入
Flows页面,可看到 ODL 自动生成的流表(匹配 MAC 地址,转发到指定端口),无需手动配置。
六、手动配置流表:实现流量控制
除了 ODL 自动生成流表,还可手动配置流规则,实现自定义流量控制(如 “禁止 h1 ping h2”)。
6.1 手动添加流表(Web 界面方式)
- 进入 ODL Web 界面
Flows页面,点击Add Flow。 - 配置流表参数(以 “禁止 h1→h2 的 ICMP 流量” 为例):
- Node:选择交换机(如
openflow:1,即第一个交换机)。 - Table ID:流表 ID,默认 0。
- Priority:优先级(数值越大越优先),设为 1000。
- Match Fields(匹配条件):
Ether Type:选择IPv4(ICMP 基于 IPv4)。IP Protocol:选择ICMP(协议类型为 ICMP)。Source IP:输入 h1 的 IP(如10.0.0.1)。Destination IP:输入 h2 的 IP(如10.0.0.2)。
- Actions(动作):选择
Drop(丢弃匹配的流量)。
- Node:选择交换机(如
- 点击
Submit保存流表。
6.2 验证流表生效
在 Mininet 命令行执行 h1 ping h2,此时应显示 100% packet loss,说明流表已生效,ICMP 流量被丢弃。
七、常见问题排查与解决方案
在部署或使用过程中,可能遇到以下问题,可按步骤排查:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| Mininet 交换机无法接入 ODL | 1. ODL OpenFlow 端口(6633)未开放;2. 协议不匹配(如 ODL 用 1.3,交换机用 1.0) | 1. 开放 6633 端口:sudo ufw allow 6633;2. Mininet 启动时指定协议:--switch=ovsk,protocols=OpenFlow13 |
| ODL Web 界面无法访问 | 1. 8181 端口未开放;2. odl-restconf模块未安装 | 1. 开放 8181 端口;2. 安装模块:feature:install odl-restconf |
| 主机通信失败(ping 不通) | 1. 流表配置错误;2. L2Switch 模块未安装 | 1. 检查流表是否有 Drop 规则;2. 安装模块:feature:install odl-l2switch-switch-ui |
| ODL 启动报错 “OutOfMemoryError” | 内存不足(低于 4GB) | 1. 增加服务器内存;2. 修改 JVM 参数:在 /opt/odl/nitrogen/bin/setenv 中增大 -Xmx(如 -Xmx4g) |
八、总结与进阶方向
本文完成了 ODL 从部署到功能验证的全流程,涵盖环境准备、控制器启动、Mininet 对接、流表配置等核心操作。若需进一步深入,可探索以下方向:
- 多控制器部署:搭建 ODL 集群(主从模式),实现高可用。
- 对接物理交换机:将华为、H3C 等物理交换机通过 OpenFlow 接入 ODL,替代虚拟拓扑。
- REST API 开发:通过 ODL 的 REST API(如
/restconf/config/opendaylight-inventory:nodes/)编写 Python/Java 脚本,实现自动化流表配置。 - SDN 应用开发:基于 ODL 的 Karaf 容器开发自定义模块(如流量监控、负载均衡)。
ODL 的学习核心在于 “理解控制层与数据层的交互逻辑”,建议结合 Wireshark 抓包(分析 OpenFlow 协议报文),加深对 SDN 原理的理解。

6036

被折叠的 条评论
为什么被折叠?



