袁党生博客

  • 主页
  • linux基础
  • SHELL
  • WEB
  • 负载
  • 企业级应用
  • 数据库
  • KVM
  • Docker
  • K8S
  • 监控
  • 存储
  • 博客搭建问题
  1. 首页
  2. KVM
  3. 正文

四、虚拟机管理软件

2020年4月29日 1297点热度 0人点赞 0条评论


常见虚拟机管理工具

  • kvm管理工具统计网站:
      https://www.linux-kvm.org/page/Management_Tools
  • kvm管理工具:
      kimchi:基于H5研发web GUI; virt-king;
      OpenStack: IaaS
      oVirt:红帽官方,在yum仓库中,需要指定ovirt仓库路径,使用yum命令安装即可使用
      Proxmox VE 中小企业虚拟化管理工具,是一个操作系统镜像,基于debian制作,使用web界面使用

kimchi

  • kimchi 项目托管在github上,需要去该网站进行下载
  • github下载地址:
      https://github.com/kimchi-project/kimchi/releases
  • kimchi是作为wok的插件运行,因此使用kimchi需要安装两个软件包(注意:两个软件包版本要一致)
    软件包链接地址
      kimchi软件包 https://github.com/kimchi-project/kimchi/releases/download/2.5.0/kimchi-2.5.0-0.el7.centos.noarch.rpm
      wok软件包 https://github.com/kimchi-project/kimchi/releases/download/2.5.0/wok-2.5.0-0.el7.centos.noarch.rpm
  • 安装注意事项:
      使用yum安装软件包,注意:软件包安装要启用epel源
        systemctl daemon-reload 启动守护进程
        systemctl start wokd 启动wokd服务,会监听本地所有网卡8001端口
      注意要关闭selinux,否则会出现错误
      使用浏览器登录地址:https://172.20.45.100:8001
      注意:172.20.45.100为本机地址,登录时使用https,用户名密码为系统用户名密码
      为kimchi提供物理桥相关的网络:

示例:

cd /etc/libvirt/qemu/networks/
vim br0.xml
<network>
    <name>br0</name>        
    <bridge name='br0'/>
    <forward mode='bridge'/>
</network>
virsh net-create ./br0.xml  创建物理桥

注意:小型测试环境中推荐使用kimchi,生产环境中推荐使用 proxmox VE

使用qemu-kvm管理vms

  • Qemu:
      处理器模拟器
      仿真各种IO设备
      将仿真设备连接至主机的物理设备
      提供用户命令行接口
      该命令默认不再PATN路径下,无法直接使用,可以通过软链接方式,把该命令链接到PATH路径下即可使用
        ln -sv /usr/libexec/qemu-kvm /usr/bin
  • qemu-kvm命令语法:
      qemu-kvm [options] [disk_image]
      选项有很多类别:
        标准选项、块设备相关选项、显示选项、网络选项、...

选项类别详解:

标准选项:
    -machine [type=]name:-machine help来获取列表,用于指定模拟的主机类型; 
    -cpu cpu:-cpu help来获取列表;用于指定要模拟的CPU型号;
    -smp n[,maxcpus=cpus][,cores=cores][,threads=threads][,sockets=sockets]:指明虚拟机上vcpu的数量及拓扑;
    -boot [order=drives][,once=drives][,menu=on|off] [,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_time][,strict=on|off]
        order:各设备的引导次序:c表示第一块硬盘,d表示第一个光驱设备;-boot order=dc,once=d
    -m megs:虚拟机的内存大小;
    -name NAME:当前虚拟机的名称,要惟一;

块设备相关的选项:
    -hda/-hdb file:指明IDE总线类型的磁盘映射文件路径;第0和第1个;
    -hdc/-hdd file:第2和第3个;

    -cdrom file:指定要使用光盘映像文件; 

    -drive [file=file][,if=type][,media=d][,index=i] [,cache=writethrough|writeback|none|directsync|unsafe][,format=f]:
        file=/PATH/TO/SOME_IMAGE_FILE:映像文件路径;
        if=TYPE:块设备总线类型,ide, scsi, sd, floppy, virtio,...
        media=TYPE:介质类型,cdrom和disk;
        index=i:设定同一类型设备多个设备的编号;
        cache=writethrough|writeback|none|directsync|unsafe:缓存方式;
        format=f:磁盘映像文件的格式;

     CentOS磁盘镜像文件下载:
         https://cloud.centos.org/centos/7/images/

显示选项:
     -display type:显示的类型,sdl, curses, none和vnc;
    -nographic:不使用图形接口; 
    -vga [std|cirrus|vmware|qxl|xenfb|none]:模拟出的显卡的型号;
    -vnc display[,option[,option[,...]]]]:启动一个vnc server来显示虚拟机接口; 让qemu进程监听一个vnc接口; 
        display:
            (1) HOST:N
                在HOST主机的第N个桌面号输出vnc;
                    5900+N
            (2) unix:/PATH/TO/SOCK_FILE
            (3) none

        options:
            password:连接此服务所需要的密码;

    -monitor stdio:在标准输出上显示monitor界面;
        Ctrl-a, c:在console和monitor之间切换;
        Ctrl-a, h

网络选项:
    -net nic[,vlan=n][,macaddr=mac][,model=type][,name=str][,addr=str][,vectors=v]
        为虚拟机创建一个网络接口,并将其添加至指定的VLAN;
        model=type:指明模拟出的网卡的型号,ne2k_pci,i82551,i82557b,i82559er,rtl8139,e1000,pcnet,virtio;
            -net nic,model=?
        macaddr=mac:指明mac地址;52:54:00:

    -net tap[,vlan=n][,name=str][,fd=h][,fds=x:y:...:z][,ifname=name][,script=file][,downscript=dfile]:
        通过物理的TAP网络接口连接至vlan n;
        script=file:启动虚拟机时要执行的脚本,默认为/etc/qemu-ifup
        downscript=dfile:关闭虚拟机时要执行的脚本,/etc/qemu-ifdown
        ifname=NAME:自定义接口名称;

        /etc/qemu-ifup

            #!/bin/bash
            #
            bridge=br0

            if [ -n "$1" ];then
                ip link set $1 up
                sleep 1
                brctl addif $bridge $1
                [ $? -eq 0 ] && exit 0 || exit 1
            else
                echo "Error: no interface specified."
                exit 2
            fi  

    其它选项:
        -daemonize:以守护进程运行;

示例1:

~]#  qemu-kvm -name c2 -smp 2,maxcpus=4,sockets=2,cores=2 -m 128 -drive file=/images/kvm/cos-i386.qcow2,if=virtio -vnc  :1 -daemonize -net nic,model=e1000,macaddr=52:54:00:00:00:11 -net tap,script=/etc/qemu-ifup

示例2:

~]# qemu-kvm -name winxp -smp 1,maxcpus=2,sockets=1,cores=2 -m 1024 -drive file=/data/vms/winxp.qcow2,media=disk,cache=writeback,format=qcow2 file=/tmp/winxp.iso,media=cdrom -boot order=dc,once=d -vnc :1 -net nic,model=rtl8139,macaddr=52:54:00:00:aa:11 -net tap,ifname=tap1,script=/etc/qemu-ifup -daemonize
  • 半虚拟化:virtio
      建议:Network IO, Disk IO使用virtio,性能会有显著提升;
  • dnsmasq:
      listen-address=192.168.1.132,127.0.0.1
      dhcp-range=192.168.1.50,192.168.1.150,48h
      dhcp-option=3,192.168.0.1

综合实验:基于kvm虚拟化实现分布式部署lamp

实验环境需求:
拓扑图:
![](http://www.yuandangsheng.top/wp-content/uploads/2023/04/综合实验拓扑图.png)
    三台虚拟机,两个网络,两台虚拟桥,一个物理桥,一台跳板机(堡垒机)
    宿主机充当物理桥,两个网卡
        物理桥网卡1:172.20.124.
        物理桥网卡2如果为桥接模式,则可以直接连接网卡;如果为仅主机模式,则需要进行SANT源地址转换
    apache服务器
        分别连接物理桥br0和mynet1网络
        物理桥br0网卡172.20.124.
        mynet1网卡192.168.10
    fpm服务器
        分别连接mynet1和mynet2网络
        mynet1网卡192.168.10.
        mynet2网卡192.168.11.
    数据库服务器
        连接mynet2网络
        mynet2网卡192.168.11.
    mynet1网络地址范围:192.168.10.20--192.168.10.100
    mynet2网络地址范围:192.168.11.20--192.168.11.100

kvm虚拟环境搭建过程:
创建网络:
    使用系统default默认网络xml文件创建mynet1网络和mynet2网络
    cp  default.xml  mynet1.xm{l,2}
    vim mynet1.xml
    <network>
      <name>mynet1</name>      网络名称
      <uuid>066afb36-d94c-4c7c-b839-83d2668fdcab</uuid>  uuid删除或者手动更改
      <forward mode='nat'/>
      <bridge name='mybr1' stp='on' delay='0'/>  关联到网络的桥名称
      <mac address='52:54:00:90:f7:df'/>
      <ip address='192.168.10.100' netmask='255.255.255.0'>  定义桥的地址
        <dhcp>
          <range start='192.168.10.20' end='192.168.10.100'/>  定义网络地址范围
        </dhcp>
      </ip>
    </network>
    mynet2.xml文件也用类似方法创建

创建虚拟机:
    从网络下载qcow2磁盘镜像文件,直接进行系统安装
    下载地址:http://cloud.centos.org/centos/7/images/
    注意:磁盘镜像解压后为raw格式的文件
    创建存放三个系统磁盘镜像文件的目录,并把磁盘镜像分别复制到对应的目录中
    mkdir  -pv  /vm/c{1,2,3}
    cp centos7.raw  /vm/c{1,2,3}/
    需要安装工具包对磁盘镜像文件系统的密码进行初始化设置为123(可自定义)
    yum install libguestfs-tools
    cd /vm/c1/       进入对应目录下执行以下命令
    virt-customize -a CentOS-7-x86_64-GenericCloud-1703.qcow2 –root-password password:123
使用virt-manager命令开启图形界面安装虚拟机操作系统
系统安装后先配置好yum,安装需要软件包,注意调整好系统时间,可以使用ntp服务器(172.20.0.1)进行同步
安装完系统以后,开始进行amp部署
部署完成,测试wordpress访问正常,开始设置防火墙规则

防火墙配置:
各服务器ip地址:
    数据库服务器:
        192.168.11.66
    Fpm服务器:
        192.168.10.48
        192.168.11.83
    http服务器:
        172.20.124.67
        192.168.10.21
    跳板机:
        172.20.124.131
        192.168.10.22
        192.168.11.43
    物理桥br0:
        172.20.124.132
    连接外网:
        172.20.121.77
注意:
(1)使用连接追踪功能设置防火墙要弄清楚谁访问谁,即数据流的方向
如:外网访问http服务,在http服务器设置规则,目标为本机80端口
如:http服务器向fpm服务器请求动态资源,在http服务器上,目标端口为fpm服务器的9000端口,在fpm服务器上,目标端口为本机9000端口
如:Fpm服务器向数据库服务器请求数据,在fpm服务器上,目标端口为数据库服务器的3306端口,在数据库服务器上,目标端口为本机的3306端口
(2)要牢记客户端访问服务器端时,目标端口是确定的,源端口是随机生成的

http服务器防火墙配置:
    br0物理桥ip:172.20.124.132      
    Fpm服务器ip:192.168.10.48   
    跳板机ip:192.168.10.22  
    1 设置外网能访问本机的80端口
        iptables -A INPUT -d 172.20.124.67 -p tcp -m multiport --dports 80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
    2 向fpm服务器请求动态资源
    向fpm服务器9000端口转发数据(出方向)
        iptables -A OUTPUT -s 192.168.10.21 -d 192.168.10.48 -p tcp --dport 9000 -m state --state NEW,ESTABLISHED -j ACCEPT           注意:该规则范围小,应放在OUTPUT第一条
        iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
    3 设置跳板机:  22端口
    允许跳板机访问,拒绝其他主机访问
        iptables -I INPUT 2 -s 192.168.10.22 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    放行ESTABLISHED状态主机
        iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
    通过设置通用规则设置白名单(即拒绝所有主机访问)
        iptables -A INPUT -j REJECT
        iptables -A OUTPUT -j REJECT 

Fpm服务器防火墙配置:
    跳板机ip:192.168.10.22
    http服务器ip:192.168.10.21
    数据库服务器ip:192.168.11.66
    1 允许http服务器访问本机动态资源
    允许http服务器向本机9000端口发送数据(进方向)
        iptables -A INPUT -s 192.168.10.21 -d 192.168.10.48 -p tcp --dport 9000 -m state --state NEW,ESTABLISHED -j ACCEPT
    2 设置本机访问数据库服务器
    向数据库服务器3306端口发送请求(进方向)
        iptables -A OUTPUT -s 192.168.11.83 -d 192.168.11.66 -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT 
        iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
    3 设置跳板机访问
    允许跳板机访问通过22端口远程连接本机
        iptables -I INPUT 2 -s 192.168.10.22 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    放行ESTABLISHED状态主机
        iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
    使用通用规则设置白名单(拒绝所有主机访问)
        iptables -A INPUT -j REJECT
        iptables -A OUTPUT -j REJECT

数据库服务器防火墙配置:
    跳板机ip:192.168.11.43
    Fpm服务器ip:192.168.11.83
    1 fpm服务器设置
    允许fpm服务器访问本机3306端口(进方向)
        iptables -A INPUT -s 192.168.11.83 -d 192.168.11.66 -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT 
    2 跳板机设置
    只允许跳板机访问本机22端口
        iptables -A INPUT -s 192.168.11.43 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    放行ESTABLISHED状态主机
        iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
    使用通用规则设置白名单(拒绝所有主机)
        iptables -A INPUT -j REJECT
        iptables -A OUTPUT -j REJECT

跳板机防火墙配置:
    出方向:
    允许向数据库服务器发送连接22端口请求
        iptables -A OUTPUT -s 192.168.11.43 -d 192.168.11.66 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    允许向http服务器发送连接22端口请求
        iptables -A OUTPUT -s 192.168.10.22 -d 192.168.10.21 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    允许向fpm服务器发送连接22端口请求
        iptables -A OUTPUT -s 192.168.10.22 -d 192.168.10.48 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    放行ESTABLISHED状态主机
        iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
    只允许通过br0访问本机的22端口远程
        iptables -I INPUT 2 -s 172.20.124.132 -d 172.20.124.131 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
    放行ESTABLISHED状态主机
        iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT
    使用通用规则设置白名单(拒绝所有主机)
        iptables -A INPUT -j REJECT
        iptables -A OUTPUT -j REJECT
标签: 暂无
最后更新:2023年4月29日

袁党生

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 linux学习. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

豫ICP备18039507号-1