




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目六构建KVM虚拟机网络与服务构建KVM虚拟机网络《云网络技术项目教程》项目描述为提高服务器资源利用率,降低IT运维成本,采用KVM虚拟化技术构建虚拟机集群。在集群中构建虚拟化网络,实现虚拟机的内外网络互联。绑定多网卡提高网络节点的可用性,配置DHCP服务为虚拟机分配IP地址,部署负载均衡服务实现WEB服务的高可用,配置防火墙和安全组规则加固网络安全。
项目6任务思维导图如图6-1所示。图6-1项目6任务思维导图构建KVM虚拟机网络【知识目标】(1)掌握KVM(Kernel-basedVirtualMachine,基于内核的虚拟机)虚拟化的特点。(2)掌握KVM虚拟化的实现方式。(1)能够安装管理KVM虚拟机。(2)能够配置多网卡绑定提高网络可用性。(3)能够配置KVM虚拟机集群的内外网互联。【技能目标】【网络拓扑】任务6-1的网络拓扑如图6-2所示。图6-2任务6-1网络拓扑必备知识1.KVM虚拟化KVM是一种基于Linux内核的虚拟化技术,它允许在一台物理主机上创建和管理多个虚拟机。KVM利用了Linux内核的虚拟化功能,将物理服务器划分为多个独立的虚拟机,每个虚拟机都可以运行自己的操作系统和应用程序。通过在Linux内核中加载KVM模块,将其转变为一个虚拟化层,提供对硬件的直接访问和管理能力,使虚拟机可以与物理硬件之间进行直接的交互。每个虚拟机都被视为一个独立的进程,并且具有自己的虚拟CPU、内存、磁盘和网络设备等,KVM虚拟化的主要特点包括以下几种。(1)硬件支持KVM依赖于处理器的虚拟化扩展,使虚拟机可以直接访问物理硬件,并获得接近本地性能的性能,通过直接访问硬件和优化的虚拟化技术,KVM可以实现较低的虚拟化开销。(2)完整的虚拟化KVM提供了完全虚拟化的能力,可以运行几乎所有的操作系统,包括Windows、Linux、Unix等。(3)灵活性和可扩展性KVM可以根据需要动态分配和管理虚拟机的资源,如CPU、内存和存储等,允许虚拟机在不同的物理主机之间进行迁移,以实现负载均衡和故障恢复。(4)安全性和隔离性由于每个虚拟机都是独立的进程,它们之间是完全隔离的。这提供了更高的安全性,可以防止一个虚拟机中的应用程序影响其他虚拟机或主机系统。必备知识2.KVM虚拟化实现方式在服务器上虚拟出计算机的过程如图6-3所示,首先在服务器硬件上安装Linux操作系统,KVM内核模块就自动被安装了,通过KVM内核可以对CPU和内存进行虚拟化,提供给客户机(虚拟机)使用,实现磁盘和网卡等IO(输入输出)设备的虚拟化,需要借助QEMU(QuickEmulator,快速仿真器)实现,虚拟了CPU、内存、磁盘、网卡等设备后,就可以在客户机(虚拟机)上安装操作系统了各种应用了。图6-3任务6-1服务器虚拟计算机过程必备知识3.使用KVM和QEMU方法QEMU是一款开源工具,在安装KVM虚拟机时,直接安装到Linux操作系统上,使用相关命令虚拟磁盘和网卡等IO设备。KVM是Linux操作系统的内核,用户安装了Linux后就安装KVM内核模块,但用户是无法直接管理KVM的,需要在Linux上安装libvirt工具实现对KVM的相关管理,如图6-4所示,安装了libvirt工具后,还需要使用virsh命令行、virt-manager等工具对libvirt进行操作,间接的管理KVM内核模块。图6-4任务6-1使用KVM内核模块创建KVM虚拟机1.配置服务器网络环境首先使用CentOS8.ova模板机创建三台名称为node1、node2、node3的服务器,在node1上再添加两块网卡。三台服务器的网卡及IP地址配置如表6-1所示。表6-1网卡地址及所属网络服务器名称网卡名称
连接到网络网络模式IP地址node1ens160VMnet1仅主机ens192lan1区段自定义网络不配置IP地址ens256lan1区段自定义网络不配置IP地址ens161VMnet8nat不配置IP地址node2ens160VMnet1仅主机ens192lan1区段自定义网络不配置IP地址node3ens160VMnet1仅主机ens192lan1区段自定义网络不配置IP地址其中node1、node2、node3的ens160网卡用于登录管理主机,在node1上将ens192和ens256绑定,与node2和node3的ens192网卡用于跨主机之间的网络通信,node1的ens161用于内部网络与外部网络互联,也就是说,node2和node3的虚拟机访问外部网络流量需要经过node1服务器的ens161网卡。将node1服务器的ens192、ens256网卡、node2服务器的ens192网卡、node3服务器的ens192网卡设置为lan1区段。方法是首先在每台服务器的“虚拟机设置”对话框中单击“LAN区段(S)…”按钮,添加一个lan区段,名称为lan1,然后服务器中的每块网卡设置为lan1区段,设置node1服务器网卡的lan1区段如图6-5所示。图6-5任务6-1node1服务器的网卡lan区段设置配置完成后,查看node1服务器的网卡和IP地址配置,如图6-6所示。图6-6任务6-1node1服务器网卡配置查看node2服务器的网卡和IP地址配置,如图6-7所示。图6-7任务6-1node2服务器网卡配置查看node3服务器的网卡和IP地址配置,如图6-8所示。图6-8任务6-1node3服务器网卡配置创建KVM虚拟机2.在服务器上安装KVM虚拟机(1)检查基础环境在node2和node3安装KVM虚拟机的过程是一致的,所以这里以node2服务器节点为例,讲解安装KVM虚拟机的过程,node3服务器的虚拟机安装参照node2完成。①检查服务器是否开启了硬件虚拟化支持由于KVM虚拟化是需要硬件虚拟化辅助实现的,所以查看服务器是否开启了硬件虚拟化的支持,方法是使用egrep抓取/proc/cpuinfo信息,命令如下。[root@node2~]#egrep'(vmx|svm)'/proc/cpuinfo结果如图6-9所示。图6-9任务6-1查看硬件是否开启了cpu虚拟化支持在结果中发现了vmx的信息,说明硬件已经开启了虚拟化支持,如果没有此信息,首先在计算机的BIOS(basicinputoutputsystem,基本输入输出系统)中开启CPU的虚拟化,然后在VMware中开启每个节点的CPU虚拟化,如图6-10所示。图6-10任务6-1VMware中开启节点的CPU虚拟化②检查内核是否加载了KVM模块使用lsmod|grepkvm命令可以查看内核是否加载了kvm模块,结果如图6-11所示。图6-11任务6-1查看内核是否加载了KVM模块从结果中可以看到,内核中已经加载了KVM虚拟化内核模块。(2)安装管理程序管理KVM内核模块需要安装libvirt程序,模拟虚拟磁盘和网卡的程序是qemu,安装和运维虚拟机需要使用virt-manager工具,首先安装这3个软件。[root@node2~]#yuminstalllibvirtqemu-kvmvirt-manager-y使用virt-manager或命令行通过libvirt程序创建管理虚拟机,启动libvirt并设置开机自启动的命令如下。[root@node2~]#systemctlstartlibvirtd&&systemctlenablelibvirtd(3)启动virt-manager图形安装界面①安装gui(GraphicalUserInterface,图形用户接口)图像界面在node2服务器上,需要安装CentOS的图形化界面,支持virt-manager的启动,命令如下。[root@node2~]#yumgroupinstall"ServerwithGUI"-y安装完成后,重启启动node2,使用SecureCRT再次登录。②windows主机安装Xming软件在CentOS上运行virt-manager软件时,需要在windows上安装Xming软件提供图形化支持,首先在windows上启动Xming安装程序,如图6-12所示。图6-12任务6-1启动Xming安装程序安装时,不用修改默认的选项,每个步骤直接点击“Next”按钮,将Xming安装到Windows上,安装完成后,启动Xming,在“任务栏”的右下角会看到Xming软件启动图标,等待virt-manager的连接。③设置secureCRT转发X11数据包在secureCRT的“选项”中选择“会话”选项,选中“端口转发”下的“远程/X11”选项,选中转发“X11数据包(F)”和“强制X11鉴权(N)”,单击“确定”按钮,如图6-13所示。图6-13任务6-1开启X11数据转发④启动virt-manager管理程序在node2上启动virt-manager软件,命令如下。[root@node2~]#virt-manager启动完成后,在windows上会启动virt-manager的图形化界面,如图6-14所示。图6-14任务6-1virt-manager图形安装界面创建KVM虚拟机3.创建centos6虚拟机(1)上传centos6.5安装文件选择CentOS6.5的原因是占用的资源比较少,将CentOS-6.5的镜像文件上传到libvirt镜像文件默认目录/var/lib/libvirt/images,如下所示。[root@node2images]#lsCentOS-6.5.iso(2)使用virt-manager创建VM1虚拟机在virt-manager启动页面,单击“创建虚拟机”图标,如图6-15所示。图6-15任务6-1创建虚拟机弹出“生成新虚拟机”对话框,如图6-16所示。图6-16任务6-1选择安装操作系统方式图6-17任务6-1选择操作系统镜像文件选择默认的“本地安装介质(ISO映像或者光驱)(L)”安装操作操作系统,单击“前进”按钮。在“生成虚拟机5的步骤2”对话框中选择“浏览”按钮,如图6-17所示。图6-18任务6-1选择安装文件在弹出的对话框中,选择/var/lib/libvirt/images目录下的默认安装文件CentOS6.5.iso文件,单击“选择卷”按钮,如图6-18所示。图6-19任务6-1导入系统文件和版本选择后,在“生成虚拟机5的步骤2”对话框中就会显示镜像文件的名称,在对话框的下方,选择安装操作系统版本,一般情况下,会根据选择的镜像自动识别,如图6-19所示。图6-20任务6-1选择内存大小和CPU核数在弹出的“生成虚拟机5的步骤3”中选择内存大小为1024M,CPU核心数为1,单击“前进”按钮,如图6-20所示。图6-21任务6-1选择虚拟磁盘空间在弹出的“生成虚拟机5的步骤4”中选择默认的为虚拟机创建9G磁盘镜像,单击“前进”按钮,如图6-21所示。图6-22任务6-1修改虚拟机名称与选择网络在弹出的“生成虚拟机5的步骤5”中修改虚拟机的名称为vm1,在“选择网络”选项,选择默认的“虚拟网络‘default’:NAT”,如图6-22所示。单击“完成按钮”后,弹出安装虚拟机操作系统的界面,如图6-23所示,需要注意的是这里的对话框是针对vm1这个虚拟机的,和virt-manager启动后的管理界面是两个对话框,也就是说这个界面是vm1虚拟机的控制台,在控制台可以对虚拟机进行各种详细的操作,而virt-manager主要用来安装和克隆虚拟机等操作。图6-23任务6-1安装CentOS6.5操作系统图6-24任务6-1安装成功界面安装CentOS6.5的过程与项目3中制作CentOS8模板机的过程基本一致,这里不再赘述,具体操作在微课视频中讲解,需要注意的有两点,一在配置网络时,将网卡设置为默认启动。二是root用户的密码要求6位,这里设置为000000。安装成功的界面如图6-24所示。图6-25任务6-1登录vm1虚拟机单击“重新引导”按钮进入操作系统登录页面,输入用户名root,密码000000后登录操作系统,查看IP地址,如图6-25所示。图6-26任务6-1登录vm2虚拟机图6-25任务6-1登录vm1虚拟机管理KVM虚拟机1.使用virt-manager管理虚拟机(1)在virt-manager主界面管理虚拟机使用virt-manager创建虚拟机后,可以对虚拟机进行管理,在虚拟机名称列表中,右键单击“VM1”,在弹出的菜单中,可以对虚拟机进行暂停、关机、重启、克隆、迁移、删除、打开控制台等操作,在克隆虚拟机时,需要将虚拟机关机,如图6-27所示。图6-27任务6-1鼠标右键管理虚拟机(2)控制台管理虚拟机点击virt-manager启动页面的“打开”图标或者右键单击虚拟机后,在弹出菜单出选择“打开”都可以进入虚拟机的控制台,在虚拟机控制台中,可以登录虚拟机操作系统、添加虚拟机硬件、拍摄快照等操作,如图6-28所示。图6-28任务6-1虚拟机控制台后续在网络配置中,会使用到“显示虚拟机硬件详情”图标,修改网卡所连接的网桥信息。管理KVM虚拟机2.使用命令行管理虚拟机(1)虚拟机域管理在服务器上,使用virsh命令可以更加细致的管理虚拟机,每个虚拟机被称为一个域。可以使用virsh--help查看管理虚拟的所有命令。查看当前所有虚拟机的命令如下。[root@node2~]#virshlist--all结果如图6-29所示。图6-29任务6-1查看所有虚拟机如果只查看正在启动的虚拟机可以去掉--all选项,使用virshshutdown命令关闭虚拟机,关闭vm1虚拟机的命令如下。[root@node2~]#virshshutdownvm1如果使用shutdown关闭虚拟机没有生效,可以使用virshdestroy命令强制关闭虚拟机,强制关闭虚拟机vm1的命令如下。[root@node2~]#virshdestroyvm1关闭后,再使用virshlist命令已经不能看到虚拟机了,使用virshlist--all查看运行和关闭的虚拟机,结果如图6-30所示。图6-30任务6-1关闭虚拟机后再次查看使用virshstart命令开启关闭的虚拟机,如打开vm1的命令如下。[root@node2~]#virshstartvm1使用virshlist命令查看启动的虚拟机,可以发现vm1已经启动了,如图6-31所示。图6-31任务6-1开启vm1后查看虚拟机(2)虚拟机网络管理使用virshdomiflist可以显示服务器上的虚拟网卡信息,如查看vm1的虚拟网卡信息命令如下。[root@node2~]#virshdomiflistvm1结果如图6-32所示。图6-32任务6-1vm1的虚拟网卡说明在node2服务器上的vnet12与虚拟机中的网卡eth0是成对出现的,即虚拟机与外部通信流量先到达vnet0,使用ethtool命令可以查看vnet0的类型为tap虚拟网卡,如图6-33所示。图6-33任务6-1查看虚拟网卡vnet0的类型在node2服务器上使用iplink查看当前的网卡链接,如图6-34所示。图6-34任务6-1node2服务器网卡信息发现在node2服务器上新建立了3张网卡,分别是virbr0、birbr0-nic、vnet0,其中vnet0就是与vm1虚拟机的通信网卡了。查看网卡IP地址时,发现virbr0配置了IP地址/24,如图6-35所示,这时由于libvirt程序配置了DHCP分配功能,为virbr0虚拟网桥和虚拟机vm1分配了相应的IP地址。接下来分析三张网卡之间的关系,在node2服务器上安装bridge-utils网桥工具,查看当前的网桥信息,如图6-36所示。图6-35任务6-1virbr0的IP地址图6-36任务6-1查看网桥信息从结果中发现virbr0是qemu工具建立的虚拟网桥,连接到了tap网卡vnet0上,再通过vnet0与虚拟机vm1进行通信,virbr0-nic虚拟网卡也绑定到了virbr0上,暂时没有连接其他设备,处于关闭状态。在node3服务器上,同样可以查看网桥和连接的网卡信息,如图6-37所示。图6-37任务6-1node3网桥信息绑定多网卡提高网络可用性1.配置网络节点的双网卡绑定根据任务拓扑所示,在网络服务器上需要将ens192和ens256两块网卡绑定在一块,为node2和node3上的虚拟机提供高可靠的网络服务,配置过程如下。(1)加载bonding模块在绑定多张网卡时,需要使用Linux内核模块bonding,所以首先加载它,命令如下。[root@node1~]#modprobe--first-timebonding加载完成后,查看内核模块是否加载,命令如下。[root@node1~]#lsmod|grepbonding结果如图6-38所示。图6-38任务6-1查看内核加载bonding模块从结果中发现,bonding模块已经被加载成功。(2)配置绑定网卡首先进入到网络配置文件目录,在目录下创建文件ifcfg-bond1,打开文件输入以下内容。DEVICE=bond1BOOTPROTO=staticONBOOT=yesUSERCTL=noBONDING_OPTS="mode=1miimon=100"其中USERCTL=no指定只有root用户或具有特权的用户才能对绑定接口进行操作和配置。BONDING_OPTS是绑定网卡的重要选项,miimon=100指明每个接口检查链路状态的时间是100毫秒,也就是说加入到bond1的多网卡需要经过100毫秒进行链路状态检查。mode指定的是数据发送与接收的模式,常见的bonding模式包括负载均衡模式、主备模式,两种模式的解释如下。①负载均衡模式mode=0是负载均衡模式,表示多块网卡同时收发数据,作用是增加了带宽,实现了负载均衡。②主备模式mode=1是主备模式,只有一块网卡收发数据,另一块网卡做备份,实现了网卡备份。(2)将ens192和ens256加入绑定网卡bond1在ens192和ens256配置文件的末尾加上以下配置。MASTER=bond1SLAVE=yes第一行配置指明bond1网卡是本网卡的主网卡,第二行配置指明本网卡是从网卡,配置完成后重启网络管理和网络链接。绑定多网卡提高网络可用性2.测试双网卡绑定(1)查看配置效果①查看网卡信息首先在node1服务器上使用iplink命令查看网卡信息,如图6-39所示。图6-39任务6-1查看node1网卡配置从结果中发现,新增加了一块网卡bond1,而且ens192和ens256的主网卡已经设置成bond1了。②查看负载均衡配置信息查看/proc/net/bonding/bond1文件可以观察网卡绑定配置信息,如图6-40所示。图6-40任务6-1网卡负载均衡绑定信息从结果中发现,网卡绑定模式是(active-backup)主备模式,当前的主网卡是ens192,网卡ens256作为备份网卡。(2)测试效果①配置网卡临时IP地址由于本任务是不需要为绑定网卡bond1配置IP地址的,所以为bond1配置临时IP地址,用于测试,测试完成后,删除临时IP地址。配置bond1的IP地址为/24,命令如下。[root@node1~]#ipaddradd/24devbond1在node2服务器上,配置ens192的临时IP地址为/24,命令如下。[root@node2~]#ipaddradd/24devens192②测试node2与node1服务器上的bond1连通性在测试之前,首先在node1上分别抓取ens192和ens256的网卡icmp协议流量,命令如下。[root@node1~]#tcpdump-iens192-picmp[root@node1~]#tcpdump-iens256-picmp在node2服务器上测试与bond1的连通性,结果如图6-41所示。图6-41任务6-1测试node2与node1服务器网卡bond1连通性从结果中发现,已经能够正常通信。查看ens192抓取数据的流量,如图6-42所示。图6-42任务6-1ens192网卡的数据流量查看ens256抓取数据的流量,如图6-43所示。图6-43任务6-1ens256网卡的数据流量从抓取流量的结果可以发现,2块网卡中只有ens192承载了node2服务器到node1服务器的测试流量,说明网卡将ens192和ens256绑定成bond1的操作成功了,主备模式已经生效,测试完成后将node1服务器上bond0的临时IP地址和node2服务器上ens192的临时IP地址删除,命令如下。[root@node1~]#ipaddrdel/24devbond1[root@node2~]#ipaddrdel/24devens192桥接KVM虚拟机到自定义网络1.配置服务器node2和node3在node2服务器上创建了vm1虚拟机,在node3服务器上创建了vm2虚拟机,需要将vm1和vm2连接到集群网络之中,配置步骤如下。(1)配置node2的虚拟网桥并且绑定网卡①创建虚拟网桥br2在node2服务器的网络配置目录,创建虚拟网桥文件ifcfg-br2,在br2中输入以下内容。TYPE=BridgeNAME=br2DEVICE=br2ONBOOT=yes②创建ifcfg-ens192.10子接口创建ens192网卡的子接口ens192.10,封装vlan标记为10,在网络配置目录下创建ifcfg-ens192.10文件,在文件中输入以下内容。VLAN=yesTYPE=VLANPHYSDEV=ens192VLAN_ID=10NAME=ens192.10DEVICE=ens192.10ONBOOT=yesBRIDGE=br2其中最后一行配置指明将此网卡绑定到br2网桥上,保存后,重启网络管理程序和链接。③绑定虚拟网卡到br2网桥将node2上连接vm1的虚拟网卡绑定到br2网桥上,在虚拟机vm1的控制台下,选择左侧“NIC”网卡,在“网络源”处选择指定共享设备名称,在“网桥名称”文本框中输入br2,单击“应用”按钮,如图6-44所示。图6-44任务6-1绑定虚拟网卡到br2网桥绑定完成后,重启虚拟机vm1,重启完成,查看node2服务器上的网桥配置,结果如图6-45所示。需要说明的是虚拟网卡是在虚拟机启动时,由qemu创建的,所以虚拟网卡的名称是有可能变化的,但不会影响虚拟机与外部通信。图6-45任务6-1node2服务器虚拟网桥信息从结果可以看出,br2已经成功绑定了ens192.10和vnet0虚拟网卡。(2)配置node3的虚拟网桥并且绑定网卡①创建虚拟网桥br3在node2服务器的网络配置目录,创建虚拟网桥文件ifcfg-br3,在br2中输入以下内容。TYPE=BridgeNAME=br3DEVICE=br3ONBOOT=yes②创建ifcfg-ens192.10子接口创建ens192网卡的子接口ens192.10,封装vlan标记为10,在网络配置目录下创建ifcfg-ens192.10文件,在文件中输入以下内容。VLAN=yesTYPE=VLANPHYSDEV=ens192VLAN_ID=10NAME=ens192.10DEVICE=ens192.10ONBOOT=yesBRIDGE=br3其中最后一行配置指明将此网卡绑定到br3网桥上,保存后,重启网络管理程序和链接。③绑定虚拟机网卡到br3网桥将node3上连接vm2的虚拟网卡绑定到br3网桥上,在虚拟机vm2的控制台下,选择左侧“NIC”网卡,在“网络源”处选择指定共享设备名称,在“网桥名称”文本框中输入br3,单击“应用”按钮,如图6-46所示。图6-46任务6-1绑定虚拟机网卡到网桥br3绑定完成后,重启虚拟机vm2,重启完成,查看node3服务器上的网桥配置,结果如图6-47所示。图6-47任务6-1node2服务器虚拟网桥信息从结果可以看出,br3已经成功绑定了ens192.10和vnet1虚拟网卡。绑定多网卡提高网络可用性2.配置网络节点node1(1)创建网桥br1并绑定bond1.10在node1服务器的网络配置目录下,创建ifcfg-br1文件,在文件中输入以下内容。TYPE=BridgeNAME=br1DEVICE=br1ONBOOT=yes然后创建ifcfg-bond1.10文件,将该网卡配置成bond1的子接口,封装vlan标记为10,在文件中输入以下内容。VLAN=yesTYPE=VLANPHYSDEV=bond1VLAN_ID=10NAME=bond1.10DEVICE=bond1.10ONBOOT=yesBRIDGE=br1其中PHYSDEV=bond1指明物理网卡是bond1网卡,最后一行配置BRIDGE=br1指定该网卡绑定到br1虚拟网桥上,配置完成后重启网络管理程序和链接,查看网桥配置如图6-48所示。图6-48任务6-1br1网桥绑定bond1.10网卡(2)创建虚拟路由r1和虚拟网桥brout①创建brout虚拟网桥在网络配置目录下,创建ifcfg-brout文件,在文件中输入以下内容。TYPE=BridgeNAME=broutDEVICE=broutONBOOT=yes②创建虚拟路由和veth虚拟网卡在node1服务器上创建虚拟路由器r1,为虚拟机提供网关和路由转发服务,r1通过brout连接到ens161网卡,实现与外界互联,配置如下。[root@node1~]#ipnetnsaddr1#添加名称空间r1[root@node1~]#iplinkaddveth1typevethpeernameveth11#添加成对虚拟网卡[root@node1~]#iplinksetveth11up#启动虚拟网卡veth11[root@node1~]#iplinksetveth1netnsr1#移动虚拟网卡veth1到r1下[root@node1~]#ipnetnsexecr1iplinksetveth1up#启动veth1[root@node1~]#iplinkaddvethbr1typevethpeernamevethbr11#添加成对网卡[root@node1~]#iplinksetvethbr11up#启动vethbr11[root@node1~]#iplinksetvethbr1netnsr1#移动vethbr1到r1下[root@node1~]#ipnetnsexecr1iplinksetvethbr1up#启动vethbr1[root@node1~]#brctladdifbr1veth11#网桥br1绑定veth11[root@node1~]#brctladdifbroutvethbr11#网桥brout绑定vethbr11[root@node1~]#brctladdifbroutens161#网桥brout绑定ens161③创建虚拟路由的IP地址和网关配置虚拟路由r1连接内部网络的网卡IP地址为/24,为虚拟机提供网关,配置连接外部网络的网卡IP地址为0/24,将网关设置为vmnet8网络的网关地址,配置如下。[root@node1~]#ipnetnsexecr1bash#进入虚拟路由r1[root@node1~]#ipaddradd/24devveth1#设置内网IP地址[root@node1~]#ipaddradd0/24devvethbr1#设置外网IP地址[root@node1~]#routeadddefaultgw#设置默认路由(网关)(3)配置Iptables规则实现内外网络互联虚拟机的数据到达路由器r1后,路由器需要将进行源地址转换,实现虚拟机访问外部网络,当外部主机访问虚拟机时,需要在路由器的外部网络接口上增加IP地址,然后配置Iptables目的地址转换实现外部主机访问内部网络的虚拟机,配置如下。[root@node1~]#ipnetnsexecr1bash进入虚拟路由r1[root@node1~]#iptables-tnat-APOSTROUTING-s/24-jSNAT--to0#将来自/24网络的源地址转换为0[root@node1~]#ipaddradd1/24devvethbr1在外部网络接口添加IP地址[root@node1~]#iptables-tnat-APREROUTING-d0-jDNAT--to#配置外部主机访问0时,跳转到上[root@node1~]#iptables-tnat-APREROUTING-d1-jDNAT--to#配置外部主机访问1时,跳转到上配置完成后,使用iptables-save保存。(4)开启虚拟路由r1的路由转发功能。在r1名称空间下,首先进入/etc/sysctl.conf文件,在文件的最后一行加入如下配置。net.ipv4.ip_forward=1然后在命令行执行以下命令,使配置生效。[root@node1~]#sysctl-p绑定多网卡提高网络可用性3.测试虚拟机的内外网互联(1)配置临时测试IP地址在vm1虚拟机控制台中,设置eth0的临时IP地址为/24,如图6-49所示。图6-49任务6-1设置vm1的eth0临时IP地址在vm2虚拟机控制台中,设置eth0的临时IP地址为/24,如图6-50所示。图6-50任务6-1设置vm2的eth0临时IP地址(2)测试内部网络连通性在vm1虚拟机控制台上测试与vm2的连通性,结果如图6-51所示。图6-51任务6-1测试vm1与vm2的连通性从结果中发现,node2服务器上的虚拟机vm1和node3服务器上的vm2已经能够正常通信了。(3)测试内部虚拟机访问外部网络在vm1虚拟机控制台上首先配置默认网关为,然后测试与外部网络主机的连通性,配置及测试结果如图6-52所示。图6-52任务6-1测试vm1与vm2的连通性从结果中发现,node2服务器上的虚拟机vm1和已经可以和外部主机正常通信了,同理可以为node3服务器上vm2配置网关,与外部主机通信。(4)测试外部主机访问内部虚拟机在测试前,首先在node2服务器上抓取vnet0虚拟网卡的数据流量,命令如下。[root@node2~]#tcpdump-t-nn-ivnet0-picmp然后在windows主机测试与0的连通性,结果如图6-53所示。图6-53任务6-1测试windows主机与虚拟路由器出口的连通性从结果发现,windows主机已经能够和0正常通信,再查看node2服务器上的抓包流量,结果如图6-54所示。图6-54任务6-1查看node2上的vnet0流量从结果看出,数据已经到达了node2服务器的vnet0虚拟网卡,说明外部主机已经能够访问内部的虚拟机了。也可以在windows上使用SecureCRT工具登陆0,实现登陆node2服务器上的vm1虚拟机,如图6-55所示。图6-55任务6-1登陆node2服务器的vm1虚拟机项目六构建KVM虚拟机网络与服务构建KVM虚拟机网络服务《云网络技术项目教程》构建KVM虚拟机网络服务【知识目标】(1)掌握常用的负载均衡技术。(2)掌握南北向和东西向流量的区别。(3)掌握防火墙与安全组的区别。(1)能够配置DHCP服务为虚拟机分配IP地址。(2)能够配置负载均衡服务提高网络的可用性。(3)能够配置虚拟防火墙和安全组加固虚拟网络。【技能目标】【网络拓扑】任务6-2的网络拓扑如图6-56所示。图6-56任务6-2网络拓扑必备知识1.常用的负载均衡技术(1)Nginx服务Nginx是一个高性能的开源反向代理服务器,同时也可以作为负载均衡器使用。Nginx支持基于轮询、最小连接数、IP哈希等多种负载均衡算法,并可以通过简单的配置实现负载均衡功能。Nginx除了负载均衡功能外,还可以作为Web服务器、反向代理服务器和缓存服务器使用,具有较强的灵活性和可扩展性。(2)LVS(LinuxVirtualServer)服务LVS是一个基于Linux内核的负载均衡解决方案,它通过网络地址转换(NAT)、直接路由(DR)、IP隧道等技术来实现负载均衡。LVS可以将来自客户端的请求分发到后端的多个服务器上,并支持传输层和应用层的负载均衡。LVS适合用于构建高性能的负载均衡集群,但需要一定的Linux系统和网络知识来配置和管理。(3)HAProxy服务HAProxy是一款高性能的、开源的负载均衡器和代理服务器软件,提供各类服务的性能优化和安全保障。HAProxy支持多种负载均衡算法,包括轮询、加权轮询、最少连接数等,并具有灵活的配置选项和丰富的监控功能。是构建高性能负载均衡架构的重要组件之一。(4)F5负载均衡F5是一款商业的应用交付控制器,提供高级的负载均衡、安全防护等功能。可以实现丰富的负载均衡策略和定制化配置,适用于大型企业和复杂的网络环境。必备知识2.南北向和东西向流量(1)南北向流量指进出数据中心或进出网络边界的流量,例如用户通过互联网访问数据中心中的应用程序或服务产生的流量,以及数据中心中的应用程序或服务向外部发送的流量,都属于南北向流量。在虚拟化环境中,南北向流量指虚拟机、容器与外部网络的通信流量。(2)东西向流量指数据中心内部或云平台内部虚拟机、容器之间相互通信产生的流量。这样的通信可能发生在同一台物理服务器上,也可能发生在不同的物理服务器之间。必备知识3.防火墙和安全组防火墙通常用于管理南北向流量,通过设置规则允许或拒绝外部网络与内部网络之间的通信。在云环境中,云服务提供商通常会提供边界防火墙功能,用于管理进出云平台的流量。安全组在虚拟化环境中通常用于管理东西向流量,可以控制虚拟机、容器之间的通信。安全组提供了针对内部通信的微观级别的访问控制,基于实例级别设置不同的安全规则,实现了细粒度的流量控制。防火墙应用对象是虚拟路由,保护路由上连接的子网。如在虚拟路由上定义多条Iptables规则允许外部网络通过ssh协议访问租户网络的22端口,但不可以使用telnet协议访问租户网络的23端口。安全组保护的是虚拟机实例,可以在宿主机上配置ebtables规则控制进出虚拟机的虚拟网卡流量,例如只允许web服务器访问本机的3306数据库端口,而禁止其它流量。必备知识4.ebtables工具ebtables是一个在Linux系统上运行的工具,用于在数据链路层对以太网帧进行过滤和操作。ebtables提供了一组规则和命令,允许您根据源MAC地址、目标MAC地址、协议类型等条件对网络流量进行过滤,以下是ebtables的一些主要特性和用途。(1)过滤功能ebtables允许设置过滤规则,根据源MAC地址、目标MAC地址、协议类型等条件来限制网络流量,Filter是ebtables默认的表格,它有三条链,如果网桥自身做了可以上网的主机,可以在input和output链上指明网桥过滤规则,一般仅作为网桥进行数据转发时,在forward链上进行配置。使用ebtables--help可以查看具体选项和参数。(2)网桥管理ebtables可以用于管理Linux系统上的网桥设备。它支持添加和删除网桥、配置网桥参数,以及设置网桥之间的流量转发规则等。(3)虚拟化环境中的网络隔离在虚拟化环境中,ebtables可以用于隔离虚拟机之间的网络流量,提供额外的网络安全层。(4)NAT转换ebtables支持对以太网帧进行NAT转换,可以实现类似于iptables的网络地址转换功能。(5)监控和日志记录ebtables可以用于捕获特定类型的网络流量,并将其记录到日志文件中,以便进一步分析和监控网络活动。配置DHCP服务为虚拟机分配IP地址1.配置服务器网络环境首先使用CentOS8.ova模板机创建两台名称为node1、node2的服务器,在node1上再添加一块网卡。三台服务器的网卡及IP地址配置如表6-2所示。
表6-2网卡地址及所属网络服务器名称网卡名称
连接到网络网络模式IP地址node1ens160VMnet1仅主机ens192lan1区段自定义网络不配置IP地址ens256VMnet8nat不配置IP地址node2ens160VMnet1仅主机ens192lan1区段自定义网络不配置IP地址其中node1、node2的ens160网卡用于登录管理主机,在node1的ens192与node2的ens192网卡用于跨主机的网络通信,node1的ens256用于内部网络与外部网络互联,node2上的虚拟机访问外部网络流量需要经过node1服务器的ens256网卡。配置完成后,查看node1服务器的网卡和IP地址配置,如图6-57所示。图6-57任务6-2node1网卡及IP地址配置查看node2服务器的网卡和IP地址配置,如图6-58所示。图6-58任务6-2node2网卡及IP地址配置配置DHCP服务为虚拟机分配IP地址2.配置计算节点node2虚拟机和网络(1)创建3台虚拟机安装任务6-1创建KVM虚拟机的方法,在node2服务器上,创建3台虚拟机,名称分别为vm1、vm2、vm3,创建完成后,进入vm1虚拟机的控制台,如图6-59所示。图6-59任务6-2登录KVM虚拟机vm1登录vm2虚拟机的控制台,如图6-60所示。图6-60任务6-2登录KVM虚拟机vm2登录vm3虚拟机的控制台,如图6-61所示。图6-61任务6-2登录KVM虚拟机vm3以上安装vm2和vm3虚拟机时,也可以采用克隆的方式完成,使用virt-manager界面或者命令行的方式都能实现,但启动后需要对网卡和计算机名等信息进行修改。(2)虚拟机网卡连接虚拟网桥br1①创建虚拟网桥br1在node2服务器的网络配置目录,建立文件ifcfg-br1,在文件中输入以下内容。TYPE=BridgeNAME=br1DEVICE=br1ONBOOT=yes以上配置创建了网桥br1。②创建ens192网卡子接口ens192.10在网络配置目录下创建ifcfg-ens192.10文件,在文件中输入以下内容。VLAN=yesTYPE=VLANPHYSDEV=ens192VLAN_ID=10NAME=ens192.10DEVICE=ens192.10ONBOOT=yesBRIDGE=br1以上配置创建了ens192网卡的子接口ens192.10,封装vlan标记为10,连接到br1网桥,保存文件后重启网络管理程序和链接。③将虚拟机接入网桥br1在vm1、vm2、vm3的控制台上,将网卡连接到虚拟网桥br1,连接完成后,安装网桥工具bridge-utils,查看node2节点的网桥信息,如图6-62所示。图6-62任务6-2虚拟网桥br1连接网卡从结果中可以看出,br1连接着3块虚拟网卡,分别是vnet9、vnet12、vnet14,这三块虚拟网卡是vm1、vm2、vm3连接外部的网卡,那如何确定和虚拟机的对应关系呢,由于在启动虚拟机时,虚拟网卡是随机创建的,但编号按照顺序依次递增,由于首先重启的是vm1,然后是vm2和vm3,所以vm1对应的虚拟网卡是vnet9,vm2对应的虚拟网卡是vnet12,vm3对应的虚拟网卡是vnet14。配置DHCP服务为虚拟机分配IP地址3.node1网络节点配置DHCP服务(1)创建虚拟网桥br1并连接虚拟网卡ens192.10①创建虚拟网桥br1在网络节点node1服务器上,进入网络配置目录,创建ifcfg-br1文件,输入以下内容,创建网桥br1。TYPE=BridgeNAME=br1DEVICE=br1ONBOOT=yes②创建ens192网卡子接口ens192.10在网络配置目录下创建ifcfg-ens192.10文件,在文件中输入以下内容。VLAN=yesTYPE=VLANPHYSDEV=ens192VLAN_ID=10NAME=ens192.10DEVICE=ens192.10ONBOOT=yesBRIDGE=br1以上配置在node1服务器上创建了ens192网卡的子接口ens192.10,封装vlan标记为10,连接到br1网桥,保存文件后重启网络管理程序和链接。(2)创建名称空间为vlan10用户分配IP地址,首先创建网络名称空间,然后接入br1网桥上。再在名称空间下安装dhcp服务。创建网络名称空间dhcp,连接到网桥br1的配置如下。[root@node1~]#ipnetnsadddhcp#创建网络名称空间dhcp[root@node1~]#iplinkaddv1typevethpeernamev11#增加成对veth网卡[root@node1~]#iplinksetv11up#启动网卡v11[root@node1~]#iplinksetv1netnsdhcp#将v1移动到名称空间dhcp[root@node1~]#ipnetnsexecdhcpiplinksetv1up#启动v1[root@node1~]#brctladdifbr1v11#将v11绑定到网桥br1上(3)安装配置dhcp服务①安装dhcp-server服务在名称空间安装dhcp-server服务,方法如下。[root@node1~]#ipnetnsexecdhcpbash#进入名称空间dhcp[root@node1~]#yuminstalldhcp-server-y#安装dhcp服务②配置dhcp服务首先为网卡v1配置一个/24网络的IP地址,因为dhcp分配网络时,要监听属于分配网络的网络接口,这里将v1接口配置为,配置如下。[root@node1~]#ipaddradd/24devv1然后打开dhcp服务的配置文件/etc/dhcp/dhcpd.conf,输入以下内容。subnetnetmask{#定义分配的网络地址
range00;#分配的IP地址范围
optionsubnet-mask;#分配的子网掩码
optionrouters;#分配的网关
optiondomain-name-servers;#分配的DNS服务器}其中网关在后续任务中配置在虚拟路由器r1上。③启动dhcp服务,虚拟机获取IP地址为隔离各名称空间的进程,需要使用dhcp服务的/usr/sbin/dhcpd命令直接启动dhcp服务,在后边加上配置文件即可,如果使用systemctl启动将无法有效的隔离各名称空间的应用进程,启动dhcp命令如下。[root@node1~]#/usr/sbin/dhcpd-cf/etc/dhcp/dhcpd.conf启动dhcp服务后,在vm1虚拟机上使用servicenetworkrestart重启网卡,查看IP地址,如图6-63所示。图6-63任务6-2虚拟机vm1成功获取IP地址在vm2虚拟机上使用servicenetworkrestart重启网卡,查看IP地址,如图6-64所示。图6-64任务6-2虚拟机vm2成功获取IP地址在vm3虚拟机上使用servicenetworkrestart重启网卡,查看IP地址,如图6-65所示。图6-65任务6-2虚拟机vm3成功获取IP地址配置防火墙和安全组加固虚拟网络1.配置虚拟机内外网互联(1)创建连接虚拟路由r1和虚拟交换机brout在node1服务器上,创建虚拟机连接外部网络的虚拟路由r1和虚拟机交换机brout,将虚拟路由连接到虚拟网桥br1和虚拟网桥brout上,将虚拟网桥brout连接到ens256上。①创建虚拟网桥brout进入网络配置目录,创建ifcfg-brout文件,输入以下内容,创建网桥brout。TYPE=BridgeNAME=broutDEVICE=broutONBOOT=yes配置完成后,重启网络管理和链接。②创建虚拟路由r1创建虚拟路由r1,连接到虚拟网桥br1和brout,配置如下。[root@node1~]#ipnetnsaddr1#创建网络名称空间r1[root@node1~]#iplinkaddv3typevethpeernamev33#创建成对虚拟网卡[root@node1~]#iplinksetv33up#启动v33[root@node1~]#iplinksetv3netnsr1#移动v3到r1名称空间[root@node1~]#ipnetnsexecr1iplinksetv3up#启动v3网卡[root@node1~]#iplinkaddvbr1typevethpeernamevbr11#创建成对虚拟网卡[root@node1~]#iplinksetvbr11up#启动vbr11[root@node1~]#iplinksetvbr1netnsr1#移动vbr1到r1名称空间[root@node1~]#ipnetnsexecr1iplinksetvbr1up#启动vbr1[root@node1~]#ipnetnsexecr1ipaddradd/24devv3#设置vlan10用户的网关v3的IP地址[root@node1~]#ipnetnsexecr1ipaddradd0/24devvbr1#设置连接到外部网络虚拟网卡vbr1的IP地址[root@node1~]#brctladdifbr1v33#将v33绑定到虚拟网桥br1[root@node1~]#brctladdifbroutvbr11#将vbr11绑定到虚拟网桥brout[root@node1~]#brctladdifbroutens256#将ens256绑定到虚拟网桥brout配置完成后,检查虚拟网桥和绑定网卡信息,如图6-66所示。图6-66任务6-2node1服务器的网桥及网卡绑定信息(2)配置虚拟路由r1实现内外网互访①开启防火墙路由转发功能[root@node1~]#ipnetnsexecr1bash进入虚拟路由r1在/etc/sysctl.conf中加入以下配置。net.ipv4.ip_forward=1然后在命令行执行以下命令,使配置生效。[root@node1~]#sysctl-p②添加到达外部网络的路由在r1名称空间下,配置默认路由,指向vmnet8网络的网关地址,配置如下。[root@node1~]#routeadddefaultgw③配置snat规则实现内部虚拟机访问外部主机当虚拟机访问外部主机流量到达r1后,需要配置Iptalbes源地址转换规则,将源地址转换成0,实现访问外部主机,配置如下。[root@node1~]#iptables-tnat-APOSTROUTING-s/24-jSNAT--to0#将来自/24网络的源地址转换为0配置完成后,在虚拟机vm1的控制台上访问,结果如图6-67所示。
图6-67任务6-2虚拟机vm1访问从结果发现,虚拟机vm1已经能够访问。能够访问域名的原因是vm1通过dhcp服务器配置了DNS地址,所以能够解析域名。(2)配置DNAT实现外部主机访问虚拟机①增加路由出口IP地址虚拟路由器r1完成外部出口到虚拟机的映射,需要在出口上增加1个IP地址为1/24,配置如下。[root@node1~]#ipaddradd1/24devvbr1#接口添加IP地址[root@node1~]#ipaddradd2/24devvbr1#接口添加IP地址②配置Iptalbes目的地址转换规则虚拟机vm1和虚拟机vm2是两台web服务器,需要进行远程管理维护,所以需要实现访问路由器的22端口时,跳转到两台虚拟机的22端口,配置如下。[root@node1~]#iptables-tnat-APREROUTING-d0-ptcp--dport22-jDNAT--to:22#当外部主机访问0的22端口时,跳转到vm1虚拟机的22端口[root@node1~]#iptables-tnat-APREROUTING-d1-ptcp--dport22-jDNAT--to:22#当外部主机访问1的22端口时,跳转到vm2虚拟机的22端口[root@node1~]#iptables-tnat-APREROUTING-d2-ptcp--dport22-jDNAT--to:22配置结束后,在windows上,使用SecureCRT工具使用ssh协议访问0的22端口时,即可以登陆到虚拟机vm1,如图6-68所示。图6-68任务6-2远程登陆到虚拟机vm1使用SecureCRT工具使用ssh协议访问1的22端口时,可以登陆到虚拟机vm2,如图6-69所示。图6-69任务6-2远程登陆到虚拟机vm2使用SecureCRT工具使用ssh协议访问2的22端口时,可以登陆到虚拟机vm2,如图6-70所示。图6-70任务6-2远程登陆到虚拟机vm3在三台虚拟机上上传阿里云的centos6.5网络yum源,如下所示。[root@vm1yum.repos.d]#lsCentOS-Base.repo[root@vm2yum.repos.d]#lsCentOS-Base.repo[root@vm3yum.repos.d]#lsCentOS-Base.repo在vm3上安装数据库mysql-server,用于测试后续配置,如下所示。[root@vm3~]#yuminstallmysql-server-y启动数据库,如下所示。[root@vm3~]#servicemysqldstart配置防火墙和安全组加固虚拟网络2.配置防火墙规则实现vm3的访问控制防火墙主要用来控制每个子网与外部网络的通信流量和不同子网之间的通信流量。在本任务中,虚拟机vm3部署公司的重要数据库,不可以与外部进行网络通信,但在虚拟路由器r1配置snat规则时,/24网络的主机都可以访问外部网络,需要在r1上配置Iptables过滤规则将vm3去往外部的流量禁止掉。流经路由器的数据需要经过三个链,分别是PREROUTING、FORWARD、POSTROUTING,snat源地址转换配置在POSTROUTING链上,filter表的规则可以作用在INPUT链、FORWARD链、OUTPUT链上,所以可以在FORWARD链上配置filter表的规则,禁止掉来自vm3地址的流量,配置如下。[root@node1~]#iptables-AFORWARD-s-jDROP配置完成后,查看vm3与外部网络的连通性时,结果如图6-71所示,发现虚拟机vm3已经无法访问外部网络了。图6-71任务6-2虚拟机vm3已经无法访问外部主机使用使用SecureCRT工具也无法登录登录到vm3虚拟机,如图6-72所示。图6-72任务6-2外部主机无法登录vm3虚拟机配置防火墙和安全组加固虚拟网络3.配置安全组规则实现内部主机访问控制(1)配置ebtables安全组规则虚拟机和vm1和vm2部署的是动态网站,只需要访问公司的vm3服务器的数据库,同时虚拟机vm3需要开放内部用户的远程管理功能,禁止到其他的访问流量,在每个子网内部使用ebtables安全组规则实现访问控制,配置如下。[root@node2~]#ebtables-tfilter-AFORWARD-pipv4-ovnet24--ip-prototcp--ip-dport22-jACCEPT#虚拟机vm3连接在vnet24接口,-o指从外界到达虚拟机的流量,使用-i指虚拟机到达该接口的流量。此条配置在filter表的FORWARD链中添加了一条针对ipv4的规则,接受tcp协议目标22端口数据。[root@node2~]#ebtables-tfilter-AFORWARD-pipv4-ovnet24--ip-prototcp--ip-dport3306-jACCEPT#此条配置在filter表的FORWARD链中添加了一条针对ipv4的规则,接受tcp协议目标3306端
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆公共运输职业学院《小学教师专业阅读导引(一)》2023-2024学年第二学期期末试卷
- 忻州师范学院《幼儿园手工与环创》2023-2024学年第二学期期末试卷
- 郑州工程技术学院《公共风险管理》2023-2024学年第二学期期末试卷
- 华南师范大学《UML理论及实践》2023-2024学年第二学期期末试卷
- 南通大学杏林学院《社会统计与数据分析》2023-2024学年第二学期期末试卷
- 玉柴职业技术学院《幼儿园游戏》2023-2024学年第二学期期末试卷
- 中国石油大学(北京)《中国建筑史(Ⅰ)》2023-2024学年第二学期期末试卷
- 江西制造职业技术学院《园林建筑速写》2023-2024学年第二学期期末试卷
- 江西建设职业技术学院《建筑力学一》2023-2024学年第二学期期末试卷
- 哈尔滨应用职业技术学院《项目评估》2023-2024学年第二学期期末试卷
- 2025年河南质量工程职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年江西生物科技职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2024-2025学年第二学期学校全面工作计划
- 2025年中国spa行业市场全景分析及投资前景展望报告
- GB 45187-2024坠落防护动力升降防坠落装置
- 2024年青岛港湾职业技术学院高职单招数学历年参考题库含答案解析
- 《信息技术(拓展模块)》高职全套教学课件
- 环保行业环保管理制度环保责任落实制度
- 2025年山东菏投建设集团招聘笔试参考题库含答案解析
- 市政质量员继续教育考试题库集(含答案)
- 售后工程师述职报告
评论
0/150
提交评论