OpenDaylight 部署及使用完全指南:从环境搭建到 SDN 实践

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 7Ubuntu 18.04 LTS / CentOS 7
CPU2 核4 核及以上
内存4GB8GB 及以上(避免内存溢出)
磁盘空间20GB50GB(预留日志 / 模块空间)
网络静态 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

  1. 下载 JDK 8 压缩包(需注册 Oracle 账号):Oracle JDK 8 下载地址(选择 jdk-8u381-linux-x64.tar.gz)。

  2. 解压到指定目录(推荐 /usr/local/java):

    # 创建目录
    sudo mkdir -p /usr/local/java
    # 解压压缩包(路径需替换为你的下载路径)
    sudo tar -zxvf ~/Downloads/jdk-8u381-linux-x64.tar.gz -C /usr/local/java/
    
  3. 配置环境变量(全局生效):

    # 编辑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
    
  4. 验证安装结果:

    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 控制器

  1. 解压到工作目录(如 /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
    
  2. 启动 ODL 控制器(首次启动需加载模块,耗时约 3-5 分钟):

    # 进入ODL启动目录
    cd /opt/odl/nitrogen/bin
    # 启动控制器(前台运行,便于查看日志;后台运行加 -d 参数)
    ./karaf
    
  3. 验证启动成功:

    • 若终端显示 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 界面

  1. 确保控制器所在服务器防火墙已开放 8181 端口(以 Ubuntu 为例):

    sudo ufw allow 8181/tcp
    sudo ufw reload
    
  2. 在本地浏览器输入地址:http://[ODL服务器IP]:8181/index.html例如:http://192.168.1.100:8181/index.html

  3. 登录认证:默认用户名 / 密码为 admin/admin(生产环境需修改,见 4.2 节)。

  4. 界面功能分区:

    • Topology:查看网络拓扑(交换机、主机连接关系)。
    • Flows:管理 OpenFlow 流表(添加、删除、修改流规则)。
    • Nodes:查看接入的交换机节点信息(DPID、端口、状态)。
    • Hosts:查看接入网络的主机(IP、MAC、连接端口)。

4.2 修改默认登录密码(安全优化)

默认密码存在安全风险,需及时修改:

  1. 在 ODL 命令行(opendaylight-user@root>)执行:
    # 进入Karaf配置目录
    cd /opt/odl/nitrogen/etc
    # 编辑users.properties文件
    vim users.properties
    
  2. 找到 admin=admin,admin 行,格式为 [用户名]=[密码],[角色],修改为新密码(如 admin=NewPass123!,admin)。
  3. 重启 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 验证拓扑接入与通信

  1. 在 ODL Web 界面查看拓扑:进入 Topology 页面,可看到 2 个交换机(图标为交换机)和 2 个主机(图标为电脑),且交换机已连接到 ODL(状态为 “在线”)。

  2. 在 Mininet 中测试主机通信:在 Mininet 命令行(mininet>)执行:

    # 主机h1 ping 主机h2
    h1 ping -c 3 h2
    

    若输出 3 packets transmitted, 3 received, 0% packet loss,说明 ODL 已自动下发二层转发规则,主机可正常通信(ODL 的 L2Switch 模块默认开启 “泛洪抑制” 与 “MAC 学习”)。

  3. 查看流表:在 ODL Web 界面进入 Flows 页面,可看到 ODL 自动生成的流表(匹配 MAC 地址,转发到指定端口),无需手动配置。

六、手动配置流表:实现流量控制

除了 ODL 自动生成流表,还可手动配置流规则,实现自定义流量控制(如 “禁止 h1 ping h2”)。

6.1 手动添加流表(Web 界面方式)

  1. 进入 ODL Web 界面 Flows 页面,点击 Add Flow
  2. 配置流表参数(以 “禁止 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(丢弃匹配的流量)。
  3. 点击 Submit 保存流表。

6.2 验证流表生效

在 Mininet 命令行执行 h1 ping h2,此时应显示 100% packet loss,说明流表已生效,ICMP 流量被丢弃。

七、常见问题排查与解决方案

在部署或使用过程中,可能遇到以下问题,可按步骤排查:

问题现象可能原因解决方案
Mininet 交换机无法接入 ODL1. 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 对接、流表配置等核心操作。若需进一步深入,可探索以下方向:

  1. 多控制器部署:搭建 ODL 集群(主从模式),实现高可用。
  2. 对接物理交换机:将华为、H3C 等物理交换机通过 OpenFlow 接入 ODL,替代虚拟拓扑。
  3. REST API 开发:通过 ODL 的 REST API(如 /restconf/config/opendaylight-inventory:nodes/)编写 Python/Java 脚本,实现自动化流表配置。
  4. SDN 应用开发:基于 ODL 的 Karaf 容器开发自定义模块(如流量监控、负载均衡)。

ODL 的学习核心在于 “理解控制层与数据层的交互逻辑”,建议结合 Wireshark 抓包(分析 OpenFlow 协议报文),加深对 SDN 原理的理解。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值