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网络极不稳定,安装过程很坎坷。眼看时间来不及了,找了安装成功的同学要了系统镜像才得以顺利实验,而真正的实验内容并不复杂。