Openstack二层网络的构建和使用

news2024/12/27 22:03:57

Openstack二层网络的构建和使用

一、实验目的

(1)了解网络层级、子网、动态地址、网关代理等概念并进行应用。
(2)了解OpenStack项目以及相关组件。
(3)了解 Neutron 二层网络的构建和使用。

二、实验原理或预习内容

(1)计算机网络基础理论知识
(2)软件定义网络基础知识及应用
(3)OpenStack云平台管理架构
(4)Neutron虚拟节点、服务代理等结构

三、实验环境

(1)硬件环境需求
个人PC设备或远程虚拟服务器一台。
(2)软件环境需求
Windows10系统,Ubuntu20.04虚拟机,python运行环境(包括Neutron相关依赖),集成式开发环境

四、实验内容

(1)任务概述
在使用Openstack任意实现版本的云平台上搭建二层网络,设置子网和路由,并将虚拟机连入网络。
步骤 主要内容
1.创建L2 network 在云平台创建二层网络demo-net
2.为L2 network创建子网 在二层网络上进行vlan划分以创建子网demo-subnet
3.新建虚拟机 建立虚拟机vm1和vm2并连接到子网
4.另建新的虚拟机 新建二层网络demo-net1,创捷vm3并连接到另一个子网。
5.虚拟机间连通实验以及对外访问实验。 创建路由,连接vm1和vm3分别所在的子网,进行虚拟机连通实验。设置路由连接子网与对外网络,进行虚拟机访问外部网络实验。
6.在L2网络上增加其他内容 创建自定义镜像、设置静态路由等进行网络请求重定向,或者对外提供web服务等。由学生自行设计。
(2)补充知识

1.权限控制

Openstack可以创建多个用户,为每个用户赋予权限,并进行访问控制。用户创建的资源(网络、实例、路由等)有私有、共享和公开三种访问限制。

2.虚拟网络

一个虚拟网络对应一组设备以及相关的安全组、元数据等参数。一个虚拟网络可以有多个子网,每个子网有自己的网络段号(对应Vlan段号)。默认情况下子网网关为其可用ip地址的第一个地址。

3.虚拟交换机(路由)

在dashboard中创建路由时会自动创建虚拟交换机。虚拟交换机只能连接虚拟网络,并且连接时会自动创建虚拟端口。
一个 Port 代表虚拟网络交换机(logical network switch)上的一个虚机交换端口(virtual switch port)。虚机的网卡(VIF - Virtual Interface)会被连接到 port 上。当虚机的 VIF 连接到Port 后,这个 vNIC 就会拥有 MAC 地址和 IP 地址。Port 的 IP 地址是从 subnet 中分配的。默认情况下虚拟交换机ip为虚拟网络的网关ip。

4.虚拟机

在openstack中可以使用镜像和其他配置设置创建虚拟机实例。虚拟机实例的状态包括正在创建、初始化、孵化、重启、运行、错误等状态。可以自行上传镜像并自定义系统启动脚本。

5.自动部署openstack

Openstack包含keystone、neutron、nova等多个组件。并依赖mysql和rabbitmq等服务。完全手工部署较为复杂。社区中推荐使用kolla或者devstack这类自动部署工具进行部署。这里以devstack为例,部署步骤如下:
1)使用VMware或Virtual Box等工具,创建虚拟机并安装Ubuntu 20.04LTS系统。虚拟机系统配置和虚拟机磁盘配置尽量设置高一点,创建时勾选虚拟机硬件虚拟化选项(最低配置为4核8线程,40GB硬盘空间)。
2)下载devstack
git clone https://opendev.org/openstack/devstack
3)创建local.conf文件
这一步的目的是为部署的devstack平台设置默认账户和密码

# 切换到devstack目录
cd devstack

# 创建配置文件
vim local.conf

# 添加以下内容到local.conf文件
[[local|localrc]]
ADMIN_PASSWORD=123456 # your_password
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD

4)开始安装
在devstack目录下执行脚本
./stack.sh(由于安装时间较长,建议配合screen和tee使用,避免虚拟机挂起导致的安装失败和系统错误。)
启动安装后首先会要求为几个服务设置密码。之后是漫长的下载组件和安装配置过程。GitHub网络你懂的,顺利的话大约需要30-60分钟。
5)出错重试
安装过程中如果出错(报Error等),需要中断安装进程,然后执行devstack下的clean.sh和unstack.sh脚本进行清理。之后方可再次尝试安装。
6)启动dashboard
若部署完成,会得到success信息。并得到dashboard和keystone的地址。
使用浏览器打开dashboard,账号密码之前已在local.conf中设置。
在这里插入图片描述
7)补充
a. 某些博客的指导要求创建新的系统用户stack再进行安装。实际上这是个可选项,可以跳过。
b. devstack有很多社区版本(pike、queens等),但直接拉取master的版本就行,官方已经适配ubuntu20.04。若运行stack.sh后提示add FORCE=yes,说明你的系统版本与devstack版本不符,可以使用以下命令强制运行,但不保证成功。
FORCE=yes ./stack.sh
c. 添加admin-source并使用source指令包含环境的目的是为了在shell中访问openstack组件,只使用dashboard的话不需要这一步骤。
d. 安装时若出现报错 “connection timeout”或者443错误等,并且与下载依赖相关,说明可能是网络环境问题,可以挂载VPN或更换国内镜像源解决。某些依赖也可以自己通过包管理工具下载。
e. 部署时出现报错“no module named pip”或“unable to install pip”等报错。
这是因为devstack尝试安装pip3导致的错误。首先应当重装pip3。
apt-get purge python3-pip
apt-get install -y python3-pip
然后找到devstack/tools/install_pip.py文件,搜索找到install_get_pip这个函数的调用,将其注释掉。
f. 部署时出现报错 “failed to create symbolic link /var/run/ovn/openswitch, File exists”。
一般是由于出错重试之前没有执行清理脚本,找到/var/run/ovn/openswitch(应该是一个链接)并删除即可。
g. 部署时出现报错“ERROR /opt/stack/devstack/lib/neutron_plugins/ovn_agent:174 Socke”
这是由于openvswitch和ovn工具的路径冲突,首先打开目标文件:
vim devstack/lib/neutron_plugins/ovn_agent
找到大约在114行的这样一句:
OVS_RUNDIR= O V S P R E F I X / v a r / r u n / o p e n v s w i t c h 修改为: O V S R U N D I R = OVS_PREFIX/var/run/openvswitch 修改为: OVS_RUNDIR= OVSPREFIX/var/run/openvswitch修改为:OVSRUNDIR=OVS_PREFIX/var/run/ovn
然后删除ovn目录:
sudo rm -rf /var/run/ovn/
执行stack的清理脚本,重启系统后进行重新部署。

五、实验步骤

1.创建二层网络(L2 network)

在构建完毕云平台和正常启动所有物理节点后,一个大二层网络便已创建完毕。用户需要做的是基于该网络划分自己的 vlan,即建立一个 L2 network。举例来说,用户 (例如 demo 用户)可以在自己的 project 下创建网络(L2 network),该网络就是在大二层的基础上划分出来的,是一个隔离的二层网段。这类似于物理网络世界中的虚拟 LAN (VLAN)。 每一个新的L2 network被建立时会被分配一个段 ID,该段 ID 标识一个广播域。这个 ID 是被随机分配的,除非使用管理员身份在管理员菜单中手动指定该 ID。

2.为新建的二层网络创建子网

子网是一组 IPv4 或 IPv6 地址以及与其有关联的配置。它是一个地址池,OpenStack 可 从中向虚拟机(VM)分配 IP 地址。每个子网指定为一个无类别域间路由(Classless Inter-Domain Routing)范围,必须与一个网络相关联。除了子网之外,租户还可以指定一个网关、一个域 名系统(DNS)名称服务器列表,以及一组主机路由。这个子网上的 VM 实例随后会自动继承 该配置。
子网DNS服务器视自己的网络环境配置。一般可为8.8.8.8或114.114.114.114(电信DNS)。

3.新建虚拟机

在项目->计算->实例处新建2个实例。
使用openstack自带的cirros镜像,创建新卷选择否(否则可能因为虚拟机外存管理的原因导致创建失败)。
实例类型任意选择,这里选择性能适中的cirros256。
为实例选择刚才创建的子网络。
创建完毕后等待实例孵化和初始化完成。
实例正常运行后,可以通过控制台访问实例。

4.另建新的的虚拟机

创建新的网络与实例vm3,步骤与之前类似。这里使用openstack初始创建的shared网络。完成后拓扑图如下:
在这里插入图片描述

5.虚拟机间连通实验

1)公网对外连通
openstack已经初始创建了对外公网public。但此时它尚未通过网桥取得对外的NAT代换服务,因此无法对外访问。回到ubuntu上执行以下命令:
ifconfig br-ex 172.24.4.1/24
iptables -t nat -I POSTROUTING -s 172.24.4.0/24 -j MASQUERADE
iptables -I FORWARD -s 172.24.4.0/24 -j ACCEPT
iptables -I FORWARD -d 172.24.4.0/24 -j ACCEPT
其中172.24.4.1是public的ip地址。
2)新建路由
拖过拓扑或者网络新建路由。连接之前创建的两个子网以及对外公网public。
新建路由时选择外部网络public,并为路由增加到两个子网的连接。
3)使用vm1尝试ping vm2、vm3、外部网址

6.在L2网络上增加其他内容

自定义实例镜像并通过控制台访问控制结点ftp服务器。

六、实验过程描述和运行结果截图

1.创建二层网络(L2 network)

创建xhm-net网络
在这里插入图片描述
查看新建网络xhm-net的段ID:
在这里插入图片描述

2.为新建的二层网络创建子网

创建子网xhm-subnet:
在这里插入图片描述
在这里插入图片描述
查看新建子网的信息。创建的子网类似于使用一台交换机分出了一个VLAN:
在这里插入图片描述

3.新建虚拟机

在项目->计算->实例处新建2个实例。

在这里插入图片描述
使用openstack自带的cirros镜像,创建新卷选择否(否则可能因为虚拟机外存管理的原因导致创建失败)。
在这里插入图片描述
实例类型任意选择,这里选择性能适中的cirros256。
在这里插入图片描述
为实例选择刚才创建子网络xhm-subnet。
在这里插入图片描述
创建完毕后等待实例孵化和初始化完成:
在这里插入图片描述
等待实例正常运行:
在这里插入图片描述
可以通过控制台访问实例:
在这里插入图片描述
在这里插入图片描述

4.另建新的的虚拟机

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.虚拟机间连通实验

1)公网对外连通
openstack已经初始创建了对外公网public。但此时它尚未通过网桥取得对外的NAT代换服务,因此无法对外访问。回到ubuntu上执行以下命令:
ifconfig br-ex 172.24.4.1/24
iptables -t nat -I POSTROUTING -s 172.24.4.0/24 -j MASQUERADE
iptables -I FORWARD -s 172.24.4.0/24 -j ACCEPT
iptables -I FORWARD -d 172.24.4.0/24 -j ACCEPT
其中172.24.4.1是public的ip地址。
在这里插入图片描述
2)新建路由
拖过拓扑或者网络新建路由。连接之前创建的两个子网以及对外公网public。
新建路由时选择外部网络public。
在这里插入图片描述
为路由增加到两个子网的连接:
在这里插入图片描述
在这里插入图片描述
现在网络拓扑图如下:
在这里插入图片描述
3)使用vm1尝试ping vm2、vm3、外部网址
在这里插入图片描述

6.在L2网络上增加其他内容

(1) 自定义镜像

在这里插入图片描述

(2)自定义镜像的实例
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3) 启动实例
在这里插入图片描述
在这里插入图片描述
(4)服务端(控制结点):
sudo apt-get install vsftpd
cp vsftpd.conf vsftpd.conf.bak
sudo vim /etc/vsftpd.conf # 配置文件
sudo useradd -d /home/ftp -s /bin/bash ftpuser
sudo passwd ftpuser # 密码:123456
sudo mkdir /home/ftp
sudo chown ftpuser:ftpuser /home/ftp
sudo chmod 555 /home/ftp
sudo mkdir /home/ftp/Down
sudo chown ftpuser:ftpuser /home/ftp/Down #修改其用户组和拥有者为ftpuser
sudo mkdir /home/ftp/Up
sudo chown ftpuser:ftpuser /home/ftp/Up
sudo chmod 555 /home/ftp/Down #修改 Down 目录下文件仅仅能下载
sudo chmod 777 /home/ftp/Up #修改 Up 目录下能下载、上传、删除
sudo vim /etc/vsftpd.chroot_list # 添加ftpuser
sudo service vsftpd restart
touch /home/ftp/Down/testDown.txt
touch /home/ftp/Up/testUp.txt

在这里插入图片描述
(5)客户端(计算实例):
sudo apt-get install lftp
lftp ftpuser@192.168.38.131 # 控制结点ip
get Down/testDown.txt
get Up/testUp.txt
在这里插入图片描述

七、实验结论与体会

与老师所给实验报告模板中所说的“推荐配置”不同,虚拟机系统配置和虚拟机磁盘配置尽量设置高一点,创建时勾选虚拟机硬件虚拟化选项(最低配置为4核8线程,50GB硬盘空间,否则无法实验!)。
由于GitHub网络极不稳定,安装过程很坎坷。眼看时间来不及了,找了安装成功的同学要了系统镜像才得以顺利实验,而真正的实验内容并不复杂。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2050375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何确定vtk .h文件所在的库名字

问题 例如使用class vtkSTLReader,头文件包含#include <vtkSTLReader.h>,库使用哪个&#xff1f; 解决 1.在vs2019解决方案资源管理器中搜索vtkSTLReader.cxx&#xff0c;显示project为IOGeometry即为库名 2.在所在的CMakeLists.txt追加库名 3.在cmake重新Configure、G…

JWT中的Token

1.JWT是什么&#xff1f; jwt&#xff08;json web token的缩写&#xff09;是一个开放标准&#xff08;rfc7519&#xff09;&#xff0c;它定义了一种紧凑的、自包含的方式&#xff0c;用于在各方之间以json对象安全地传输信息&#xff0c;此信息可以验证和信任&#xff0c;因…

如果大模型有信仰,那一定是“规模法则”

规模&#xff08;scale&#xff09;是除去时间、空间之外另一个重要的维度。规模缩放&#xff08;Scaling&#xff09;的过程中隐藏着世界非线性本质奥秘背后的共性——规模法则。结合伯努瓦曼德布洛特 Benoit Mandelbrot的《大自然的分形几何》、杰弗里韦斯特 Geoffery West 的…

面试官:Java虚拟机是什么,Java虚拟机的内存模型是什么样子的?

哈喽&#xff01;大家好&#xff0c;我是小奇&#xff0c;一个专给面试官添堵的撑序员 小奇打算以轻松幽默的对话方式来分享一些技术&#xff0c;如果你觉得通过小奇的文章学到了东西&#xff0c;那就给小奇一个赞吧 文章持续更新&#xff0c;可以微信搜索【小奇JAVA面试】第一…

EmguCV学习笔记 VB.Net 2.S 特别示例

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 教程VB.net版本请访问&#xff1a;EmguCV学习笔记 VB.Net 目录-CSDN博客 教程C#版本请访问&#xff1a;EmguCV学习笔记 C# 目录-CSD…

el-image 图片预览时 与 el-table (或avue-crud) 样式冲突 的解决

问题: 解决 <style scoped> ::v-deep(.el-table__cell) {position: static !important; } </style> 后效果

SD-WAN视频汇聚网关,帮助企业省去公网服务器费用与流量费用,低成本、高可靠建设视频汇聚与管控平台,助力视频企业级智能应用

在介绍方案之前&#xff0c;我们先算一笔账&#xff0c;传统的B端项目大多数的场景是&#xff1a; 1、多个分布在不同区域&#xff0c;不同网络的现场需要进行视频设备的统一汇聚管理&#xff1b; 2、多种不同类型厂家和型号的设备需要接入&#xff1b; 3、需要接入各种设备的实…

ARM 裸机与 Linux 驱动对比及 Linux 内核入门

目录 ARM裸机代码和驱动的区别 Linux系统组成 内核五大功能 设备驱动分类 内核类型 驱动模块 驱动模块示例 Makefile配置 命令 编码辅助工具 内核中的打印函数 printk 函数 修改打印级别 ​编辑 打印级别含义 驱动多文件编译 示例 模块传递参数 命令行传递参数…

Keepalived知识点整理

Keepalived知识点整理 高可用集群 keeaplived高可用集群集群类型系统可用性实现高可用VRRP:Virtual Router Redundancy ProtocolVRRP相关术语 keepalived简介keeplived架构配置文件组成部分配置文件主要部分的解释说明: 环境配置ka1ka2realserver1realserver2 实验1:实验2独立日…

jetson循环输入密码登录不进GUI桌面环境

大概安装了pip, opencv, nvidia-jetpack&#xff0c;添加了环境变量&#xff0c;重启后&#xff0c;Jetson orin nano 登录不进去GUI桌面系统&#xff0c;输入密码后&#xff0c;又出现登录界面要求输入密码&#xff0c;如此循环&#xff0c;没有其他报错。 注意到在启动界面有…

天地伟业入职智鼎测评题库:EQT情商测验、IQCAT思维能力自适应测验

天地伟业智鼎题库EQT情商测验 情商测验采用关键事件法提取和概括人们在社会生活中发生的情景了解作答者在面对典型的工作、生活情景时最可能采取的做法&#xff0c;考察作答者的情绪觉察、情绪调节、自我激励、同理心、社交技能这5种重要的情绪智力&#xff0c;在销售人员和管理…

与人打交道的七个绝招

与人打交道的七个绝招&#xff0c;学会了让你混得风生水起&#xff01; 一、跟强者打交道&#xff0c;别绕圈子。就事论事&#xff0c;直奔主题&#xff1b; 二、跟没钱的人打交道&#xff0c;就直接告诉他能挣多少钱&#xff1b; 三、跟小人打交道&#xff0c;越虚假越好&…

i.MX6裸机开发(2):LED灯——汇编实现

本章主要包括两部分&#xff0c;第一部分讲解i.MX6ULL的GPIO配置方法以及常用寄存器介绍&#xff0c; i.MX6ULL的GPIO配置方法与单片机稍有不同&#xff0c;我们将详细介绍这部分内容。 第二部分讲解具体的实现代码以及程序的编译下载。 学习重点&#xff1a; 掌握i.MX6ULL GP…

YOLOV8网络结构|搞懂Backbone-Conv

参数量计算: (输入通道*w)*(输出通道*w)*k^2+(输出通道*w)*2 w是模型缩放里面的width - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2 输出通道c2=64,k=3,s=2 P1/2 特征图变小一半 先定义算子层 再搭一个forward前向传播 class Conv(nn.Module):"""Standard convo…

《Techporters架构搭建》-Day06 国际化

什么是国际化&#xff1f; 国际化&#xff0c;也叫i18n&#xff0c;为什么叫i18n呢&#xff1f; "i18n"是国际化&#xff08;internationalization&#xff09;的缩写&#xff0c;数字18代表了国际化这个单词中间的字母数量。类似这样的缩写还有k8s&#xff08;kube…

Ubuntu离线安装库并解决依赖关系

&#xff08;1&#xff09;起因 安装插件出现库未找到的错误 configure: error: curses library is required but not found.&#xff08;2&#xff09;解决方法 手动到Ubuntu的库发布网页下载 http://packages.ubuntu.com/ 选择系统对应架构的版本下载&#xff0c;然后上传…

AI语言大模型商业价值深度解析

点击蓝字 关注我 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;特别是深度学习算法的进步&#xff0c;AI语言大模型在自然语言处理领域的表现日益突出。国内外多种语言大模型如&#xff1a;OpenAi 的 ChatGpt&#xff0c;阿里通义千问&#xff0c;百度文心…

计算机网络之TCP序号,确认序号和报文传输时间

开篇提示 本篇适合于了解基础知识&#xff0c;进行扩展提高的使用&#xff0c;附带考研习题以及解析。 TCP序号和确认序号的区别 TCP首部中有序号和确认序号&#xff0c;他们都是4个字节&#xff08;4B&#xff09;&#xff0c;且在数据传输中有很重要的意义&#xff0c;那么两…

在Net8.0中使用 MQTTnet 开源库实现 MQTT 应用程序开发(实践)

1. 介绍 MQTTnet 是一个强大的开源 MQTT 客户端库&#xff0c;适用于 C# 平台。它提供了丰富的功能和灵活的 API&#xff0c;可以轻松地构建基于 MQTT 协议的应用程序。本文将逐步学习如何使用 MQTTnet 库创建 MQTT 客户端&#xff0c;并实现基本的发布、订阅功能。 简介 什么…

无缝融入,即刻智能[二]:Dify-LLM平台(聊天智能助手、AI工作流)快速使用指南,42K+星标见证专属智能方案

无缝融入,即刻智能[二]:Dify-LLM平台(聊天智能助手、AI工作流)快速使用指南,42K+星标见证专属智能方案 1.快速创建应用 你可以通过 3 种方式在 Dify 的工作室内创建应用: 基于应用模板创建(新手推荐) 创建一个空白应用 通过 DSL 文件(本地 / 在线)创建应用 从模板创建…