作为一名云网络测试人员,经常需要在不同资源池中进行网络功能的验证。因各资源池的差异,可能存在部分资源池没有公网访问也没有内网YUM源的情况,导致测试需要的部分工具无法下载,影响测试执行。为解决这一问题,我们基于Openstack资源池中提供的镜像制作包含网络测试工具的镜像,用于辅助网络测试。
1. 准备离线软件包
首先明确对网络测试工具的虚机,比如常见的nc, iperf, tcpdump等命令,还有利用编辑文件如vim等命令。根据自身的需求明确需要准备的命令工具的离线包。假设测试基于CentOS7.6镜像进行,且测试中需要如下测试工具。
iperf3 tcpdump sshpass nc vim wget expect vsftpd ftp traceroute dos2unix zip keepalived ipvsadm lrzsz nginx gcc bind-utils dnsperf
我们首先可以在任何能够访问公网或者存在内网YUM源的环境中使用CentOS7.6标准镜像创建一台虚机,然后执行如下命令将上述命令工具的离线包下载到本地某个目录,例如:/root/rpm。
yum install --downloadonly --downloaddir=/root/rpm epel-release iperf3 tcpdump sshpass nc vim wget expect vsftpd ftp traceroute dos2unix zip keepalived ipvsadm lrzsz nginx gcc bind-utils dnsperf
然后将上述/root/rpm目录中所有文件打包备用,假设压缩后的文件名称为 rpm.x86.zip。
zip -r rpm.x86.zip /root/rpm/*.rpm
2. 创建基础虚机
考虑到Openstack上创建虚机可以使用本地存储和远端存储两种方式,这里简单列出两种用命令行创建虚机的方式。根据测试需要创建出虚机并设置密码并验证登陆正常后关机备用。
2.1 使用计算节点本地存储创建
openstack server create --flavor "<虚机的规格>" --image "<创建虚机的镜像名称,假设为CentOS7.6>" --security-group "<虚机的安全组>" --availability-zone "<虚机的可用域>" --network "<虚机所在的网络即VPC>" "<虚机的名称>"
2.2 使用远端存储创建
nova boot --flavor "<虚机的规格>" --block-device id=<创建虚机的镜像ID>,source=image,dest=volume,size="<虚机的系统磁盘大小>",shutdown=remove,bootindex=0 --nic port-id=<创建虚机的PortID> --availability-zone "<虚机的可用域>" --security-groups "<虚机的安全组>" "<虚机的名称>
3. 计算节点操作
接下来,我们需要将第一步中准备的测试工具包传入第二步创建的虚机中。为了在没有公网资源的测试环境中实现这一目的,我们需要借道虚机所在的计算节点。
首先,在虚机所在的计算节点安装libguestfs-tools工具。并将测试工具包rpm.x86.zip传入该计算节点。
yum install libguestfs-tools -y
然后,将虚机映射到计算节点某个空目录,假定名称为/mnt。将软件包拷贝到该目录。
export LIBGUESTFS_BACKEND=direct
guestmount -d <虚机的ID> -i --rw /mnt
cp rpm.x86.zip /mnt
umount /mnt
4. 虚机转换为镜像
将第二步创建的虚机开机,在根目录下将能看到第三步中传入的工具包rpm.x86.zip。解压该工具包并本地安装相关RPM包后再次关机。
unzip rpm.x86.zip
cd rpm
rpm -ivh *.rpm --nodeps --force
至此,我们在没有公网和本地YUM源的环境中得到了一个包含测试需要的工具包的虚机了。距离我们的目标不远了,最后需要将该虚机转换为镜像,这样便可以实现用该镜像创建包含测试工具的虚机进行相关网络测试了。
根据前述虚机创建的方式的不同,创建镜像的方式有所差异。因目的镜像(假定名称为CentOS7.6Tools)为公用,需要使用管理员权限进行创建。
4.1 使用本地存储虚机创建镜像
openstack server image create --name CentOS7.6Tools --wait "<第二步创建的虚机ID>"
openstack image set --protected --public CentOS7.6Tools
4.2 使用远端存储虚机创建镜像
(1)在cinder中找到该虚机的卷ID
cinder list | grep "<虚机ID>"
(2)虚机卷创建镜像并设置其可用性
cinder reset-state --state available "<虚机的卷ID>"
cinder upload-to-image "<虚机的卷ID>" CentOS7.6Tools --force True
openstack image set --protected --public CentOS7.6Tools
5 结语
至此,一个基于CentOS7.6标准镜像创建的包含网络测试工具的镜像在Openstack中创建完成。网络测试在没有公网的环境中可以顺畅地执行了。