KVM虚拟机:Kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后起就作为一模块被包含在 Linux 内核中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM已成为学术界的主流VMM之一。深信服的超融合HCI便是基于KVM的云计算平台解决方案。
KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术),是基于硬件的完全虚拟化。而Xen早期版本则是基于软件模拟的Para-Virtualization,新版本也是基于硬件支持的完全虚拟化。但Xen本身有自己的进程调度器,存储管理模块等,所以相对来说,代码较为庞大。
图 KVM发展简史
我们首先来了解下Libvirt的概念。Libvirt是用于管理虚拟化平台的开源的API,后台程序和管理工具。它可以用于管理KVM、Xen、VMware ESX,QEMU和其他虚拟化技术。libvirt是提供了一个方便的方式来管理虚拟机和其他虚拟化功能的软件的集合,如存储和网络接口管理。这些软件包括一个API库,一个守护进程(Libvirtd),和一个命令行实用程序(virsh)。
那么在KVM虚拟机环境中,网络连接是如何实现的?Libvirt虚拟网络使用虚拟网络交换机的概念。虚拟网络交换机是在主机物理服务器上运行的软件结构,虚拟机(客户机)通过它连接到该物理主机。客户机的网络流量通过这个交换机被引导:
Linux主机物理服务器将虚拟网络交换机表示为网络接口。当libvirtd守护进程(libvirtd)首次安装并启动时,表示为虚拟网络交换机的默认网络接口是virbr0。
我们知道,计算、存储、网络是IT三大基础设施要素,网络是现代计算机系统不可或缺的一部分。QEMU对虚机提供了丰富的网络支持,常见的几种网络模式如下:
1) 基于网桥(Bridge)的虚拟网络。 2) 基于NAT(Network Address Translation)的虚拟网络。 3) QEMU内部的用户模式网络(Host-Only等),是一种隔离模式。 我们这里只探讨比较常用的桥接网络模式。
桥接(Bridge)网络模式 桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,相当于物理网卡和虚拟网卡同时连到一台交换机上,处于同一个局域网,虚拟交换机这里就相当于一台物理交换机,两网卡设置同一网段。这样在这个网桥之内的所有虚机在网桥内部可以互相通讯,另外还可以通过网桥中的物理网卡接口跟外界通讯。 下面我们来验证下这种桥接网络模式。
1)添加网桥“br0” #注: 在创建桥接网卡前,暂时先启动NetworkManager服务.为了方便我们使用nmcli服务。 # service NetworkManager start nmcli c add type bridge autoconnect yes con-name br0 ifname br0
2)为“br0”创建ip地址 nmcli c modify br0 ipv4.addresses 192.168.18.65/20 ipv4.method manual 注:此处的地址为本地IP地址。cat /etc/sysconfig/network-scripts/ifcfg-eth0
3)为“br0”创建网关和DNS nmcli c modify br0 ipv4.gateway 192.168.16.1 nmcli c modify br0 ipv4.dns 192.168.16.1 注:此处的网关也是自己实际的网关。cat /etc/sysconfig/network-scripts/ifcfg-eth0
4)添加网卡eth1与br0连通 cd /etc/sysconfig/network-scripts mv ifcfg-eth0 bak-ifcfg-eth0 nmcli c add type bridge-slave autoconnect yes con-name eth0 ifname eth0 master br0 注:如果出现UUID冲突的问题,删除创建的再重新执行一次添加 nmcli c delete eth0 nmcli c add type bridge-slave autoconnect yes con-name eth0 ifname eth0 master br0 注:删除网卡的命令nmcli c delete eth0
5)重启网卡服务 systemctl restart network 注:如果重启网卡失败,根据提示journalctl -xe,查看日志。 注:重启网卡成功后,你会发现原本的IP地址已经在网桥br0上,eth0变为空。如果没有,则再重启一次网卡,到成功为止。
6)查看网桥 brctl show
7)测试一下网桥模式的网络连接 1.创建虚拟机 我们使用测试镜像cirros-0.3.4-x86_64-disk.img。查看镜像信息: cd /data qemu-img info cirros-0.3.4-x86_64-disk.img 使用这个小的测试磁盘映像文件(已经有安装好的系统)创建虚拟机: # mkdir -p /data/vm1/ # cp /data/cirros-0.3.4-x86_64-disk.img /data/vm1/cirros1.img # virt-install -n "cirros1" -r 512 --vcpus=2 --disk path=/data/vm1/cirros1.img --network bridge=br0 --import & 注:稍等几分钟,等它创建完成… 2.访问虚拟机 在创建好虚拟机后,可以通过 xl console <domain_name>或者 xl console <domain_id>来进入到虚拟机。 查看虚拟机详细信息: virsh dominfo cirros1 访问: xl console cirros1 a、测试虚机内访问外部服务。 b、测试外部访问虚机。 在使用桥接模式时,所有虚拟机都好像与主机物理服务器在同一个子网内。同一物理网络中的所有其他物理机器都可以访问这些虚拟机。桥接操作处于OSI网络模型的第2层。
所以,当我们要在局域网使用虚拟机,用来做服务器对局域网其他客户机提供服务时,例如FTP,SSH,HTTP等,那么可以选择使用桥接网络模式。
本文作者傅先全:深信服教学教研中心副主任,深信服云计算认证专家(SCCE-C),产业教育中心资深讲师,曾任职于中国电信集团、华晟经世教育集团,分别担任云平台资深架构师、IT课程总监及名师团金牌讲师、多所高校特聘专家讲师;十余年云计算、大数据行业从业经验,在企业信息化建设、企业项目管理、云平台架构设计等方面有较强的实战经验;研究方向为云计算、大数据技术等,具有丰富的知识转换以及课程交付经验;同时,在院校学科建设、人才培养、项目科研、职业技能人才认证等方面具有丰富的产教融合体系建设与组织经验。 |