常见虚拟机管理工具
- 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
文章评论