Proxmox-VE-学习指南-全-

Proxmox VE 学习指南(全)

原文:annas-archive.org/md5/de7fd7745792bc490bf3b6d0f1f7c96c

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

“有一种双重性正在震撼世界,那就是抽象的双重性。国家和军队、公司和社区的命运都依赖于它。所有对立的阶层——地主与农民、工人和资本家——既敬畏又畏惧这种无情的抽象化世界,他们的命运也依赖于此。除了一个阶层:黑客阶层。”**“虚拟才是黑客的真正领域。黑客正是在虚拟中创造了对现实的各种新表现。对黑客来说,那些被视为现实的东西总是部分的、有限的,甚至可能是虚假的。对黑客来说,总是有现实中表达出来的虚拟盈余,这种盈余代表着可能性。这是一个无穷无尽的领域,存在着尚未成为现实的东西,它虽不现实,但它可能是。黑客就是将虚拟释放到现实中,表达现实的差异。”
-- 麦肯齐·沃克,《黑客宣言》

不久前,写这本书可能需要三台计算机才能高效地进行。虚拟化的出现使得写作不再需要拖着沉重的设备。虚拟化减少了劳动和能量的消耗,并在本书的写作和制作过程中最大化了生产力和自由支配时间。

抽象使我们摆脱了物质的束缚,取而代之的是怀旧的特权——拖拉机喂养的边缘条、暗房化学品、印刷机和排版托盘、满溢的装满美元符号的钱袋,当然,还有狭小的服务器房间。

通过服务器虚拟化,将计算资源从物理系统中抽象出来,彻底颠覆了数据中心,并极大地打破了系统工程师和管理员的传统而重复的工作方式,带来了效率、节约、成本降低、安全系统以及简单的自动化部署,完成那些重复的任务。

自 2008 年 1.0 版本发布以来,Proxmox VE 一直是这一快速革命的先锋——它是首个支持虚拟机和容器的虚拟化管理程序。

在 4.2 版本正在开发的同时,随着行业对容器革命的兴趣逐渐升温,Proxmox VE 依然提供一种开源的企业级虚拟化解决方案,并享有顶级支持,广泛受到国际上的喜爱——即便是在竞争品牌争相推出容器解决方案的同时。

本书包含了适合有经验的 Linux 用户的入门概念和最佳实践技巧,帮助他们利用 Proxmox VE 的前沿虚拟化策略和技术。

本书探讨了两种互补的虚拟化技术——容器和虚拟机的优势,帮助你做好准备,能够在虚拟化数据中心时做出明智且深思熟虑的选择。

本书内容

第一章,Proxmox VE 基础,概述了 Proxmox VE 的功能和特点,并简要对比了虚拟机与容器的异同。

第二章,安装 Proxmox VE,在讲解了 Proxmox VE 的硬件要求并讨论了最小和最佳硬件规格后,详细介绍了 Proxmox VE 的安装过程。

第三章,创建容器,首先介绍了容器及其用途,然后提供了创建容器的详细步骤,包括选择并下载操作系统或虚拟设备模板。

第四章,创建虚拟机,首先详细讲解了虚拟机与其他类型虚拟化的功能差异,并建议了可能的使用案例以及完全虚拟化的固有优缺点。接着,介绍了为 Microsoft Windows Server 和 Fedora Server 创建和配置虚拟机的过程。

第五章,使用虚拟磁盘,对比并分析了虚拟硬盘选项,包括磁盘镜像类型、虚拟总线/接口以及缓存类型。

第六章,使用 Proxmox VE 进行网络配置,对比了 Proxmox VE 提供的常见虚拟以太网适配器选项,并阐明了每个选项的使用场景。

第七章,安全配置 Proxmox VE,列举了针对虚拟化数据中心的一般安全威胁的缓解策略,特别是针对 Proxmox VE 主机和虚拟机的安全策略。

本书所需的设备

使用本书中的示例需要一台 64 位机器来托管 Proxmox 4.1,并满足至少推荐的最低硬件要求:

  • CPU:64 位(Intel EMT64 或 AMD64)

  • 支持 Intel VT/AMD-V 的 CPU/主板(用于 KVM 完全虚拟化支持)

  • 至少 1 GB 的内存

  • 硬盘

  • 一个与 RedHat Enterprise Linux 兼容的网络接口卡(NIC)

这并不是一个理想的配置——更高效的配置可以在 第二章,安装 Proxmox VE 中找到。

除了托管 Proxmox VE 的机器,还假设具有宽带互联网连接,并且 Proxmox VE 主机所在的局域网内有一台远程工作站,配备现代支持 JavaScript 的网页浏览器,并安装了 sshsftp 客户端。

本书适用人群

本书面向那些希望利用虚拟机和容器的潜力来更高效地管理服务器、合理利用资源(包括能源消耗、硬件利用率及物理空间)的服务器和系统管理员与工程师。

规范

本书中包含了多种文本样式,用于区分不同类型的信息。以下是一些这些样式的示例及其含义说明。

文本中的代码词汇、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟网址、用户输入以及 Twitter 账户显示如下:“我们可以使用qm create命令来创建一个 Proxmox VE 虚拟机。”

任何命令行输入或输出都如下所示:

-ostype win8 \
-sockets 1

新术语重要单词用粗体显示。您在屏幕上看到的词语,例如在菜单或对话框中,呈现如下形式:“通过按 i 键或导航到安装 Fedora 23来继续安装。”

注释

警告或重要备注以类似这样的框显示。

提示

提示和技巧以如下形式显示。

读者反馈

我们始终欢迎读者反馈。告诉我们您对本书的看法——您喜欢或不喜欢的地方。读者反馈对我们非常重要,因为它帮助我们开发出您能从中获得最大收益的书籍。

若要向我们提供一般反馈,只需通过电子邮件 <feedback@packtpub.com> 联系我们,并在邮件主题中提到书名。

如果您在某个主题上拥有专业知识,并且有兴趣撰写或为书籍贡献内容,请参见我们的作者指南:www.packtpub.com/authors

客户支持

现在您已经是 Packt 书籍的骄傲拥有者,我们为您准备了多个方式帮助您充分利用您的购买。

下载示例代码

您可以从您的账户下载本书的示例代码文件,网址为www.packtpub.com。如果您从其他地方购买了此书,您可以访问www.packtpub.com/support并注册,将文件直接发送给您。

您可以按照以下步骤下载代码文件:

  1. 使用您的电子邮件地址和密码登录或注册我们的官方网站。

  2. 将鼠标指针悬停在顶部的支持选项卡上。

  3. 点击代码下载与勘误表

  4. 搜索框中输入书名。

  5. 选择您想下载代码文件的书籍。

  6. 从下拉菜单中选择您购买此书的地点。

  7. 点击代码下载

下载文件后,请确保使用最新版本的工具解压或提取文件夹:

  • WinRAR / 7-Zip for Windows

  • Zipeg / iZip / UnRarX for Mac

  • 7-Zip / PeaZip for Linux

下载本书的彩色图片

我们还为您提供了一份 PDF 文件,其中包含了本书中使用的截图/图表的彩色图片。彩色图片将帮助您更好地理解输出结果的变化。您可以从www.packtpub.com/sites/default/files/downloads/LearningProxmoxVE_ColorImages.pdf下载此文件。

勘误表

尽管我们已经尽力确保内容的准确性,但错误还是难免发生。如果您在我们的书籍中发现错误——可能是文本或代码中的错误——我们将非常感激您能报告给我们。这样,您不仅能帮助其他读者避免困惑,还能帮助我们改进后续版本。如果您发现任何勘误,请通过访问www.packtpub.com/submit-errata,选择您的书籍,点击勘误提交表单链接,并填写勘误详情。一旦您的勘误得到验证,我们将接受您的提交,并将勘误上传到我们的网站或添加到该书籍的勘误列表中。

要查看之前提交的勘误,请访问www.packtpub.com/books/content/support,并在搜索框中输入书名。所需的信息将出现在勘误部分。

盗版

网络上的版权材料盗版问题是所有媒体面临的一个持续性问题。在 Packt,我们非常重视版权和许可的保护。如果您在互联网上遇到任何形式的我们作品的非法复制品,请立即提供网址或网站名称,以便我们采取相应措施。

请通过<copyright@packtpub.com>联系我们,并提供涉嫌盗版材料的链接。

感谢您帮助保护我们的作者和我们为您提供有价值内容的能力。

问题

如果您对本书的任何方面有问题,可以通过<questions@packtpub.com>联系我们,我们会尽力解决问题。

第一章:Proxmox VE 基础

Proxmox 虚拟环境PVE)是一个成熟、完整、得到良好支持的企业级虚拟化环境,适用于服务器。它是一个开源工具——基于 Debian GNU/Linux 发行版——通过精心设计的 web 界面或命令行界面,管理容器、虚拟机、存储、虚拟化网络以及高可用性集群。

注意

开发人员在 2008 年发布了 Proxmox VE 的第一个稳定版本;四年后并经过八次版本更新,ZDNet 的 Ken Hess 大胆而又相当理性地宣布 Proxmox VE 为 Proxmox:终极虚拟化管理程序 (www.zdnet.com/article/proxmox-the-ultimate-hypervisor/)。四年后,PVE 已更新至 4.1 版本,至少在 90,000 个主机上使用,并且在 140 个国家拥有超过 500 家商业客户;其基于 web 的管理界面本身已翻译成 19 种语言。

本章探讨了 PVE 虚拟化管理程序特性的基础技术:LXCKVMQEMU。为此,我们将开发对虚拟机、容器及其适当使用的基本理解。

本章将涵盖以下主题:

  • Proxmox VE 简介

  • 使用 PVE 进行虚拟化和容器化

  • Proxmox VE 虚拟机、KVM 和 QEMU

  • 使用 PVE 和 LXC 进行容器化

Proxmox VE 简介

使用 Proxmox VE,Proxmox Server Solutions GmbH (www.proxmox.com/en/about) 为我们提供了一个企业级的、开源的 类型 2 虚拟化管理程序。稍后,您将了解一些使 Proxmox VE 成为强大企业候选项的功能。

  • Proxmox VE 的许可证非常有意地选择了 GNU Affero 通用公共许可证(V3) (www.gnu.org/licenses/agpl-3.0.html)。在许多可用的自由和开源兼容许可证中,这是一个重要的选择,因为它“专门设计用于确保在网络服务器软件的情况下与社区的合作”。

  • PVE 主要通过集成的 web 界面、命令行本地管理或通过 SSH 进行管理。因此,您无需单独设置管理服务器及相关开销。通过这种方式,Proxmox VE 与 VMware 等供应商的替代企业虚拟化解决方案有了显著的区别。

  • Proxmox VE 实例/节点可以被纳入到 PVE 集群中,并通过统一的 web 界面进行集中管理。

  • Proxmox VE 提供了实时迁移——即将虚拟机或容器从一个集群节点迁移到另一个节点,而不会中断服务。这是 PVE 的一项独特功能,在竞争产品中并不常见。

功能 Proxmox VE VMware vSphere
硬件要求 灵活 严格遵守硬件兼容列表(HCL)
集成管理界面 基于 Web 和 Shell(浏览器和 SSH) 否。需要额外费用的专用管理服务器
简单的订阅结构 是的;基于每年高级支持票数和 CPU 插槽数量 不是
高可用性 是的 是的
虚拟机实时迁移 是的 是的
支持容器 是的 不是
虚拟机操作系统支持 Windows 和 Linux Windows、Linux 和 Unix
社区支持 是的 不是
虚拟机快照 是的 是的

对比 Proxmox VE 和 VMware vSphere 的特性

注意

有关完整的功能目录,请参见 Proxmox VE 数据表:www.proxmox.com/images/download/pve/docs/Proxmox-VE-Datasheet.pdf

和它的竞争对手一样,PVE 也是一个虚拟机监控程序:典型的虚拟机监控程序是创建、运行、配置和管理虚拟机的软件,依据管理员或工程师的选择。

PVE 被称为类型 2 虚拟机监控程序,因为虚拟化层是建立在操作系统之上的。

作为一个类型 2 虚拟机监控程序,Proxmox VE 是建立在 Debian 项目上的。Debian 是一个以可靠性、安全性以及一个繁荣且致力于贡献的开发者社区而著称的 GNU/Linux 发行版。

Proxmox VE 简介

类型 2 虚拟机监控程序,如 PVE,直接在操作系统上运行。在 Proxmox VE 的情况下,操作系统是 Debian;自 PVE 4.0 发布以来,底层操作系统一直是 Debian "Jessie"。

相比之下,类型 I 虚拟机监控程序(如 VMware 的 ESXi)直接运行在裸机上,而不需要操作系统的中介。它没有超出虚拟化管理和物理硬件管理的功能。

Proxmox VE 简介

类型 I 虚拟机监控程序直接运行在硬件上,而不需要操作系统的中介。

注意

基于 Debian 的 GNU/Linux 发行版无疑是最受欢迎的桌面 GNU/Linux 发行版之一。

一个将 Debian 与其他竞争发行版区分开的特点是其发布政策:Debian 只有在其开发社区能够确保其稳定性安全性可用性时才会发布。

Debian 并不像其他一些发行版那样区分长期支持版本和常规版本。

相反,所有 Debian 版本在发布后的第一年都会收到强有力的支持和关键更新。(自 2007 年以来,Debian 每两年发布一次主要版本。Debian 8,Jessie,在 2015 年基本按时发布。)

Proxmox VE 对 Debian 的依赖证明了其对这些价值的承诺:在发布周期中,稳定性、安全性和可用性得到了保障,同时也能够支持尖端的功能。

PVE 通过三种开源技术提供其虚拟化功能,所有功能都通过统一的基于 Web 的界面进行管理:

  • LXC

  • KVM

  • QEMU

要理解这一基础如何为 Proxmox VE 服务,我们首先需要清楚理解虚拟化(或更具体地说,硬件虚拟化)与容器化(操作系统虚拟化)之间的关系。随着讨论的深入,它们各自的使用场景应该变得更加清晰。

使用 Proxmox VE 进行虚拟化

最终,容器化可以理解为一种虚拟化。然而,在此,我们首先通过对比虚拟机和容器的特点,概念上区分两者。

简单来说,虚拟化是一种技术,通过它我们可以提供功能齐全的计算资源,而不需要考虑资源的物理组织、位置或相对位置。

虚拟化技术使我们能够将一台物理计算机的资源与多个执行环境共享和分配。若没有上下文,虚拟化是一个模糊的术语。它涵盖了通过名为虚拟机管理程序的软件实现解决方案,将存储、网络、服务器、桌面环境甚至应用程序等资源从其具体硬件需求中抽象出来。

因此,虚拟化为我们提供了更多的灵活性、更多的功能,并且对我们的预算产生了显著的正面影响,这些通常仅通过我们现有的资源便可实现。

就 PVE 而言,虚拟化最常指将一个离散计算系统的所有方面从其硬件中抽象出来。在这个背景下,虚拟化是指创建一个虚拟机或 VM,它拥有自己的操作系统和应用程序。

虚拟机可以最初理解为一台具有与物理机器相同功能的计算机。同样,它也可以像物理硬件机器一样通过网络进行集成和通信。换句话说,从虚拟机内部,我们将无法感知与物理计算机的区别。

此外,虚拟机并没有与其物理对应物相同的物理占地面积。它依赖的硬件实际上是通过借用安装在物理机器上的主机硬件资源的软件提供的(或称裸金属)。

然而,虚拟机的软件组件,从应用程序到操作系统,与主机机器的组件是明显分开的。这个优势在分配物理空间用于资源时得以体现。

例如,我们可以有一台运行着 Web 服务器、数据库服务器、防火墙和日志管理系统的 PVE 服务器——这些都是作为离散的虚拟机存在。与其消耗四台物理机器的物理空间、资源和维护劳力,我们只需为单一的 Proxmox VE 服务器腾出物理空间,并根据需要配置合适的虚拟局域网。

在一篇名为将服务器虚拟化投入实际的白皮书中,AMD 很好地阐述了虚拟化对企业和开发人员的好处 (www.amd.com/Documents/32951B_Virtual_WP.pdf):

虚拟化的前五大商业好处:

提高服务器利用率

提高服务水平

简化管理和提升安全性

降低硬件成本

减少设施成本

使用开发和测试环境进行虚拟化的好处:

降低资本和空间需求

降低电力和冷却成本

通过更短的测试周期提高效率

更快的上市时间

另外,让我们增加可移植性和封装性:独特的能力可以在不中断服务的情况下从一个 PVE 主机迁移实时虚拟机。

Proxmox VE 通过两种自由开源技术的组合使虚拟机的创建和控制成为可能:基于内核的虚拟机(或者KVM)和(Quick Emulator (QEMU))。这些工具的集成称为KVM-QEMU

KVM

自 2007 年 2 月起,KVM 已成为 Linux 内核的一个重要部分。该内核模块允许 GNU/Linux 用户和管理员利用架构的硬件虚拟化扩展;对于我们的目的,这些扩展是 AMD 的AMD-V和 Intel 的VT-X,适用于 x86_64 架构。

要充分利用 Proxmox VE 的功能集,因此建议在支持 x86_64 架构且具有集成虚拟化扩展的 CPU 的机器上安装。有关 KVM 支持的完整 AMD 和 Intel 处理器列表,请访问 Intel 的 ark.intel.com/Products/VirtualizationTechnology 或 AMD 的 support.amd.com/en-us/kb-articles/Pages/GPU120AMDRVICPUsHyperVWin8.aspx

QEMU

QEMU 提供了一个仿真和虚拟化接口,用户可以通过脚本或其他方式进行控制。

QEMU

可视化 KVM 和 QEMU 之间的关系

没有 Proxmox VE,我们基本上可以通过命令行定义硬件、创建虚拟磁盘,并启动和停止使用 QEMU 的虚拟化服务器。

或者,我们可以依赖于 QEMU 的各种 GUI 前端之一(各平台可用的 GUI 列表详见 wiki.qemu.org/Links#GUI_Front_Ends)。

当然,只有在你对 PVE 后台虚拟机定义过程感兴趣时,使用这些解决方案才是高效的。Proxmox VE 管理虚拟机本身通过其 API 管理 QEMU。

注意

从命令行管理 QEMU 可能会很繁琐。以下是一个从在 x86 Intel 机器上运行 Ubuntu 的 Raspberry Pi 架构的 Debian 重制版 Raspbian 的脚本中提取的行。当我们看到从 Proxmox VE 的管理界面管理虚拟机是多么简单时,我们会真诚地欣赏相对简单性:qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2 panic=1" -hda ./$raspbian_img -hdb swap

如果您熟悉 QEMU 的仿真功能,可能需要注意的是,尽管它依赖于 QEMU,但我们不能通过 Proxmox VE 提供的工具和功能管理 仿真。从 Debian 提供的 bash shell 可能可以。但是,无法通过 PVE 的管理界面控制仿真。

使用 Proxmox VE 的 OS 虚拟化

容器 是另一种虚拟化类型。与 OS 虚拟化 同义,容器最近经历了复兴。与虚拟机相比,容器与主机操作系统共享操作系统组件,如库和二进制文件;而虚拟机则不会。

使用 Proxmox VE 的 OS 虚拟化

用图示对比虚拟机和容器

提示

容器的优势

这种安排可能使容器运行更轻便,并且占用更少的主机硬件资源。对于许多作者、专家和用户来说,容器在速度和效率方面也提供了显著优势。(然而,需要指出的是,随着内存和更强大的 CPU 等资源变得更便宜,这种优势将会减弱。)

从 Proxmox VE 4.0 版本开始,Proxmox VE 容器由 LXC 实现(在之前的 PVE 版本中是通过 OpenVZ 实现的)。LXC 是为 Proxmox VE 的最终利益服务的第三种基本技术。与 KVM 和 QEMU 类似,LXC(或 Linux 容器)是一种开源技术。它允许主机运行和管理员管理多个操作系统实例,作为单个物理主机上的隔离容器。因此,概念上,容器非常明确地代表一类虚拟化,而不是相对的概念。然而,对于理解 PVE,保持虚拟机和容器之间的清晰区分是有帮助的。

使用 Proxmox VE 的理想实现取决于我们区分并选择虚拟机解决方案和容器解决方案。

由于 Proxmox VE 容器与主机操作系统共享组件,在效率方面具有优势,本文将指导您在预期的客户机可以完全实现为 Debian Jessie 作为我们的 hypervisor 操作系统的情况下创建容器。

当我们的目标是运行微软 Windows 操作系统的客机时,Proxmox VE 容器便不再适用。在这种情况下,我们转而创建虚拟机。我们必须依赖虚拟机,因为 Debian 与 Linux 容器共享的操作系统组件是微软 Windows 操作系统无法使用的组件。

总结

在本章中,我们已熟悉为 Proxmox VE 提供基础功能的三种开源技术:LXC、KVM 和 QEMU,它们分别用于容器化和虚拟化。

在此过程中,我们理解到容器虽然是一种虚拟化方式,但其特性使它们与虚拟机有所不同。

这些差异在我们决定依赖哪种技术来为 Proxmox VE 提供虚拟服务器解决方案时将至关重要。

下一章将指导你完成首次 Proxmox VE 服务器的安装和配置。它将介绍 Proxmox VE 的硬件规格和安装方法,最后还会提供一份完整的 Proxmox 安装程序操作指南。

让我们继续前进,准备好我们的第一个 PVE 实例,我们将用它来托管容器和虚拟机。

第二章:安装 Proxmox VE

本章是安装 Proxmox VE 到物理机的指南。完成本章后,您将拥有一个可供探索、实验,甚至可能用于生产的 PVE 服务器,具体取决于您的硬件配置。

在此过程中,本章将解释如何确定计算机硬件是否满足 PVE 的最小或最佳要求。本章还帮助我们确定配置是否最大化利用了 Intel 或 AMD 的虚拟化技术。最后,它将概述Proxmox 安装程序的预期,并解释如何启动并最终完成 Proxmox VE 系统的新安装和配置。

本章按顺序组织,从安装准备到启动新服务器:

  • Proxmox VE 的硬件要求与推荐配置

  • 下载 Proxmox VE

  • 确保启用了硬件虚拟化(或嵌套虚拟化)

  • 准备 Proxmox VE 安装程序

  • 完成 Proxmox VE 安装程序

注意事项

裸金属一词,在上一章中简要介绍,指的是没有安装操作系统或任何其他软件的物理计算机系统。

Proxmox VE 的硬件要求与推荐配置

在开始安装前,请确保您的硬件至少符合 PVE 的最低硬件要求。

官方维基提供了用于评估和生产场景的推荐规格(www.proxmox.com/en/proxmox-ve/requirements)。

然而,用于评估的规格有点模糊且相当有限;它们仅供测试使用。你会发现,按照这些要求可以帮助你熟悉安装过程和基于 Web 的管理界面。你甚至可以尝试运行一个单独的、最小的虚拟机和容器。然而,如果你的目标和需求更为实质化,你很可能会因为这些规格而迅速感到沮丧

以下是 Proxmox VE 维基页面推荐的配置(pve.proxmox.com/wiki/Installation#Minimum_requirements.2C_for_evaluation)用于 PVE(版本 4.1)最基本的测试:

组件 推荐配置
CPU 64 位(Intel EMT64 或 AMD64)
主板 支持 Intel VT/AMD-V 的 CPU/主板(用于 KVM 完全虚拟化支持)
内存 最少 1 GB RAM
存储 1 个硬盘驱动器
网络接口 单个 NIC

这个模糊且最小化的建议适合那些仅仅学习如何操作 PVE 基于 Web 的管理界面的人;或许仅仅创建虚拟机或 LXC 容器就足够了。尽管规格比较模糊,但它们提供了足够的信息,表明基于这些规格的机器不足以支持学习本教程中的内容。

另一方面,如果你打算完全虚拟化你的数据中心,使用 Wiki 上的生产服务器规格作为基准肯定是明智的;围绕这些规格构建的几台机器可以提供资源,不仅能跟随本教程学习,还能练习配置高可用集群。当你熟悉了 PVE,它们将准备好投入生产环境。

对于生产硬件,PVE Wiki 推荐至少使用双插槽或四插槽服务器(pve.proxmox.com/wiki/Installation#Recommended_system_requirements):

组件 推荐
CPU 64 位 Intel EMT64 或 AMD64。
主板 支持 Intel VT/AMD-V 的 CPU/主板(支持 KVM 完全虚拟化)。
存储 配备电池保护写缓存(BBU)或闪存保护的硬件 RAID(不支持软件 RAID)。高速硬盘:15k 转/分 SAS,Raid10 获得最佳效果。
内存 8 GB 内存不错,更多则更好(尽可能增加)。
网络接口卡 两个千兆网卡(用于绑定)—根据你首选的存储技术和集群设置,添加额外的网卡。
额外需求 隔离硬件(仅用于高可用性)。

如果你希望完全投入到本教程中,虽然教程没有涉及构建高可用系统或将 PVE 节点加入集群,但可以考虑以下配置:一台简单的 Intel 单六核或八核 CPU 配置,支持 Intel 虚拟化扩展的主板,以及一块 1 TB 硬盘(因此我们会限制使用 EXT3 或 EXT4 文件系统)。此外,你至少需要 8 GB 内存和一张与 Red Hat Enterprise Linux 兼容的网卡。

以下表格列出了构建机器所需的零件清单,这些机器不仅适合学习 Proxmox VE,还能在小型企业中投入使用:

组件 描述
CPU Intel Xeon E5-2620 v3 六核(6 核)2.40 GHz 处理器,Socket FCLGA2011(关于该处理器的更多信息请访问ark.intel.com/products/83352/Intel-Xeon-Processor-E5-2620-v3-15M-Cache-2_40-GHz)。
主板 Supermicro ATX DDR4 LGA 2011 主板 X10SRL-F-O (查看规格:www.supermicro.com/products/motherboard/xeon/c600/x10srl-f.cfm)。如需更多处理能力,请考虑 Supermicro 的 ATX X10DAL-I,它支持两个 Xeon CPU (www.supermicro.com/products/motherboard/Xeon/C600/X10DAL-i.cfm)。
RAM Crucial 32 GB DDR4-2133 LRDIMM (CT6228561)。 (了解更多关于此产品的信息:www.crucial.com/usa/en/x10srl-f/CT6228561。)
存储 1 TB Western Digital VelociRaptor WD1000DHTZ (www.wdc.com/wdproducts/library/SpecSheet/ENG/2879-701284.pdf)。

所描述的 DIY 妥协方案提供足够的 RAM 和 CPU 性能,可以同时托管多个虚拟服务器,包括虚拟机和容器,因此对于接下来的任务来说是令人满意的。

另外,可以考虑像联想或戴尔这样的制造商。例如,戴尔有至少三款完全可定制的服务器级机器,作为理想的起始点。按性能和多功能性递增的顺序,以下这些机架式服务器非常灵活,几乎是理想的解决方案。联想有类似的产品:

一旦手头有主机系统,下载 Proxmox VE 的 ISO 格式镜像是实现功能性服务器的第一步。

下载 Proxmox VE

最新的 PVE 版本 4.1 可通过互联网通过种子或直接下载获取。完整的 ISO 文件约为 720 MB,最终应刻录到空白的 CD 或 DVD 中。

按照以下步骤下载种子文件:

  1. 在浏览器中导航到www.proxmox.com/en/downloads/category/iso-images-pve

  2. 查找Proxmox VE 4.1 ISO 安装程序(BitTorrent)子标题。

  3. 点击灰色的下载按钮以开始下载过程。

下载 Proxmox VE

种子下载

若要直接下载,请使用浏览器导航到相同页面,www.proxmox.com/en/downloads/category/iso-images-pve,并查找Proxmox VE 4.1 ISO 安装程序子标题。点击灰色的下载按钮以开始下载。

下载 Proxmox VE

直接下载

注意

请注意,如果你使用的是 OS X 或 GNU/Linux 工作站,你当然可以选择通过命令行使用wget(或curl)命令下载磁盘镜像。以下命令——在终端中输入——会将最新的 Proxmox VE 版本下载到 OS X 和 GNU/Linux 系统的/tmp目录。(截至 2015 年 12 月的详细信息;根据需要调整文件名):wget http://download.proxmox.com/iso/proxmox-ve_4.1-2f9650d4-21.iso -O /tmp/proxmox-ve_4.1-2f9650d4-21.iso

验证下载的镜像

出于安全考虑并为了你的理智,确保检查下载的 PVE 镜像的md5sum值,确保它与download.proxmox.com/iso/MD5SUMS上的值匹配。例如,对于 Proxmox VE 4.1,md5sum值是00358ebcfeea1e33977e1be0fa2e02d3

例如,对于 Ubuntu 用户,可以使用以下过程验证下载的 PVE 4.1 镜像是否正确。

在终端仿真器中输入以下命令:

    md5sum /tmp/proxmox-ve_4.1-2f9650d4-21.iso

响应应如下所示:

    00358ebcfeea1e33977e1be0fa2e02d3  /tmp/proxmox-ve_4.1-2f9650d4-21.iso

这个响应验证了md5sum值是否与在download.proxmox.com/iso/MD5SUMS提供的字符串值相对应。

最后,当下载完成并且md5sum值已验证后,将 ISO 写入空白 CD 或 USB 驱动器。

提示

创建 Proxmox VE 可启动 USB 驱动器的步骤,在你下载 ISO 后,可以在 Proxmox 文档的pve.proxmox.com/wiki/Install_from_USB_Stick中找到。

确保已安装硬件虚拟化扩展

接下来,你需要确保在目标 Proxmox VE 主机上启用了硬件虚拟化扩展。

假设机器上没有操作系统,可以通过 Ubuntu Desktop LiveCD 轻松检查。按照以下步骤操作:

  1. www.ubuntu.com/download/desktop下载 Ubuntu LiveCD 镜像,并将其刻录到 DVD 中。

  2. 从 Ubuntu LiveCD 启动新机器。(有关此过程的更多信息,请访问help.ubuntu.com/community/LiveCD#How-To_LiveCD_Ubuntu。)

  3. 一旦桌面完全可用,打开终端仿真器。

  4. 对于基于 Intel 的系统,在终端仿真器中输入以下命令:egrep -c '(vmx|svm)' /proc/cpuinfo

如果启用了硬件虚拟化扩展,正如预期的那样,此命令应简单地返回一个整数,该整数等于机器中的 CPU 核心数。如果命令返回 0,则必须在 Intel 系统的 EFI/BIOS 中启用硬件虚拟化扩展。

如果你的目标系统基于 AMD 技术,请使用以下命令来达到类似效果:egrep -c ' lm ' /proc/cpuinfo。如前所述,如果命令返回 0,则虚拟化扩展尚未启用。不过,希望该命令返回一个等于系统 CPU 核心数的整数;如果是这样,说明你的机器已经正确配置,可以使用硬件虚拟化技术。

启用硬件虚拟化扩展

如果你发现系统没有启用硬件虚拟化扩展,你必须在 EFI/BIOS 中启用它们。

如果你使用的是较新的硬件,请确保 EFI 中的虚拟化技术选项已启用;在大多数情况下,你可以在高级 CPU 配置下找到此设置。

启用硬件虚拟化扩展

在 EFI/BIOS 中启用硬件虚拟化技术

在没有 EFI 的机器上,你很可能会在 CMOS 设置工具中的高级 BIOS 特性下找到相应的设置项,虚拟化技术

为 Proxmox VE 安装程序做准备

启用虚拟化扩展并准备好安装介质后,最好提前准备好 Proxmox 安装程序需要的信息。在 Proxmox 安装程序开始之前准备好以下信息,有助于确保配置过程中充分考虑各个方面,确保配置的准确性。

准备好充分考虑的响应,以便在安装程序提示时提供以下信息:

  • 目标安装驱动器(驱动器上的现有数据将被永久删除)

  • root 用户的密码

  • 管理员的电子邮件地址

  • 国家

  • 时区(以此格式表示:区域/城市,例如 Pacific/Honolulu)

  • 键盘布局(基于地区)

  • 是否使用 EXT3 或 EXT4 文件系统(或者如果你已配置了 RAID10 阵列的机器,请选择zfs

  • 新服务器的完全限定域名

  • 将分配给 Proxmox VE 系统的固定 IP 地址

  • Internet 网关的 IP 地址

  • 网络的子网掩码

  • 你打算使用的 DNS 服务器的 IP 地址(仅一个)

注意

地区设置,如时区键盘布局,不会影响 Proxmox VE 基于 Web 的管理界面的语言。

然而,当登录 Proxmox VE 4.1 的 Web 界面时,你将有机会从十九种语言中选择,包括波斯语、巴斯克语以及两种官方形式的挪威语:Bokmål 和 Nynorsk(www.proxmox.com/en/news/press-releases/proxmox-ve-3-4-released)。

对于命令行界面,你可以从 Debian 中可用的语言中进行选择。Debian Wiki 提供了明确的步骤,帮助你识别当前选择的语言并进行更改,网址为wiki.debian.org/ChangeLanguage

安装 Proxmox VE

Proxmox 安装程序引导我们完成基本配置细节(就像 Debian 安装程序一样),包括目标安装驱动器、地区和键盘布局、root 用户凭据以及网络配置。

当安装程序引导我们输入这些信息时,它提供了清晰简洁的解释,告诉我们需要填写什么内容以及为何需要填写。

注意

开发者提供了一个完整安装过程的视频,已上传至 YouTube,地址为www.youtube.com/watch?v=ckvPt1Bp9p0(请注意,它是在 2011 年上传的,当时 Proxmox VE 基于 Debian 6)。

  1. 要启动安装过程,请插入并从 Proxmox VE 安装媒体启动。

    提示

    要从你准备好的 CD 或 USB 闪存驱动器启动,请打开计算机并仔细观察第一个屏幕的出现。大多数计算机在屏幕底部会显示“按 F12 选择启动设备”的提示,虽然时间很短。快速按下指定的键或键组合。

    几秒钟后,显示器应显示一个包含启动设备候选项的菜单。如果你将 Proxmox VE 镜像刻录到 CD 或 DVD,请指示计算机从光驱启动。否则,选择从你使用 ISO 文件创建的 USB 闪存驱动器启动。如果你的计算机不清楚如何更改启动选项,请查阅计算机或主板制造商的文档。有关入门的额外支持,请参阅www.debian.org/releases/stable/i386/ch03s06.html.en中的在安装 Debian GNU/Linux 之前

    几秒钟后,安装程序应该会启动(如以下截图所示)。

    选择安装 Proxmox VE以启动安装程序。

    安装 Proxmox VE

  2. 计算机现在将从安装媒体启动。安装 Proxmox VE

    启动 PVE 安装程序

    计算机将很快进入一个鼠标驱动的图形用户界面,开始收集信息。在安装程序真正开始工作之前,它会要求你同意最终用户许可协议EULA)。如果你认为条款可以接受,请点击我同意以继续安装过程。

    安装 Proxmox VE

    同意最终用户许可协议(EULA)

  3. 在下一个对话框中,系统会提示您选择一个安装目标硬盘。此外,该对话框提供了一个选项按钮,允许您选择最适合您需求的文件系统。如下面的截图所示,如果您只有一个硬盘,您只能选择ext3ext4xfs。否则,您可以选择zfs并指定 RAID 配置:安装 Proxmox VE

    选择存储设备并选择文件系统

    点击下一步进入下一个对话框:配置系统的区域设置。

  4. 下一步,如下图所示,是配置您的国家时区键盘布局安装 Proxmox VE

    使用 Proxmox VE 安装程序配置区域设置

    点击下一步以完成区域设置。

  5. 使用下一个对话框设置并确认新系统 root 用户的密码。安装 Proxmox VE

    定义 root 用户的密码和电子邮件地址

    设置管理员电子邮件并点击下一步以继续安装和配置过程。

  6. 接下来,配置网络,输入主机名(FQDN)(完全限定域名)、IP 地址DNS 服务器子网掩码网关,如下所示:安装 Proxmox VE

    初始网络配置

    当您对网络配置感到满意时,点击下一步以提交配置并允许安装程序继续。

    安装 Proxmox VE

    PVE 安装中途

在确认提示后,安装开始。整个过程可能需要几分钟,在此期间,简短的演示将简要介绍 Proxmox VE 的功能,如前面的截图所示。

安装完成后,系统会提示您最后一次点击下一步。系统将开始关机并重启,可能会提示您移除安装介质:

安装 Proxmox VE

安装后重启

当机器完成重启后,您的新 Proxmox VE 实例将准备就绪,可以投入使用:

安装 Proxmox VE

重启完成后,Proxmox VE

提示

在第二章中,安装 Proxmox VE,我们将通过浏览器访问 Proxmox VE 的管理网页界面,输入控制台上显示的 URL 进行登录。

恭喜,您的企业级虚拟化管理程序已经安装完成,几乎可以投入使用;在我们开始使用 LXC 进行 PVE 容器之前,让我们先确保系统是最新的。

从命令行升级 PVE

登录:提示符下,输入root并按Enter键;当出现密码提示时,输入您在安装过程中定义的 root 用户密码。

为了优化性能、最大化正常运行时间并保持系统安全,务必将软件补丁应用到 Proxmox VE。

假设你在决定是否订阅支持服务前正在熟悉 Proxmox VE,需要对软件仓库进行一些更改。

当 PVE 没有附加支持订阅时,更新和升级 PVE 时需要执行以下步骤:

  1. 禁用企业仓库。

  2. 添加一个名为no-subscription的新仓库。

  3. 使用apt更新可用软件包的列表。

  4. 如果存在升级,使用apt升级已安装的软件包。

  5. 使用apt升级发行版。

禁用企业仓库

如果没有执行此步骤,apt-get update将失败,因为apt会尝试访问企业仓库。因此,我们将在仓库列表中注释掉企业仓库:

    sed -i.bak 's|deb https://enterprise.proxmox.com/debian jessie pve-  enterprise|\# deb https://enterprise.proxmox.com/debian jessie pve-  enterprise|' /etc/apt/sources.list.d/pve-enterprise.list  

启用非订阅者仓库

尽管这个仓库不适用于生产环境,Proxmox GmbH为非订阅用户提供了一个备用仓库。要启用它,请在/etc/apt/sources.list.d/中创建一个新文件,并将仓库信息写入其中:

    echo "deb http://download.proxmox.com/debian jessie pve-no-subscription" > /etc/apt/sources.list.d/pve-no-sub.list

提示

访问pve.proxmox.com/wiki/Package_repositories以了解有关 Proxmox VE 软件包仓库的更多信息。

更新和升级 Proxmox VE

输入以下命令以获取仓库中可用软件包的新列表:

    apt-get update

更新完成后,使用apt获取系统的升级:

    apt-get upgrade -y

然后,尝试进行发行版升级:

    apt-get dist-upgrade -y

升级过程完成后,重新启动服务器以确保更改生效:

    shutdown -r now

总结

为了预见 PVE 安装过程,本章首先概述了如何下载 Proxmox VE ISO 文件。它基于 PVE 文档给出了硬件推荐,并提醒在目标机器上启用硬件虚拟化。接着,提供了启用 EFI 和 BIOS 扩展的简要指南。

为了完成准备工作,你需要规划如何响应 Proxmox 安装程序的配置提示。

接着,我们开始了安装过程,一步步通过 Proxmox 安装程序。

本章结束时,你应该拥有一个全新的 Proxmox VE 安装,准备开始进行第三章,创建容器

在路径正确设置后,让我们开始从模板构建容器。

第三章。创建容器

“单一操作系统中的容器更为高效,由于这种效率,它们支撑了云基础设施行业的未来,取代了虚拟机架构……效率要求容器直接运行在裸金属硬件上。虚拟机已经度过了它的十年。”
-- Linux Journal,2013 年 6 月 7 日

(www.linuxjournal.com/content/containers%E2%80%94not-virtual-machines%E2%80%94are-future-cloud)

“谷歌的一切都在容器中运行……我们每周启动超过 20 亿个容器。”
-- Joe Beda,Google Cloud Platform 高级软件工程师,在 2014 年 Gluecon 大会上的演讲

(www.enterprisetech.com/2014/05/28/google-runs-software-containers/)

“如果你在数据中心或云计算的 IT 圈子里,你可能已经听说过容器,尤其是 Docker,已经持续了一年多。随着 Docker 1.0 在 6 月发布,热潮变成了轰动。”
-- ZDNET,2014 年 8 月 4 日

在第二章,安装 Proxmox VE中,我们一起完成了 Proxmox VE 的安装过程。

本章重点讲解如何从操作系统模板或虚拟设备模板创建容器。到本章结束时,我们将介绍如何获取模板并利用 Proxmox VE 从中派生 LXC 容器。在此过程中,我们将涵盖以下主题:

  • 容器的优势,以及一个使用场景示例

  • 登录 Proxmox VE 基于 Web 的管理界面

  • 探索可以通过管理界面直接使用的操作系统模板和虚拟设备

  • 通过基于 Web 的界面和命令行创建容器

  • 从管理界面启动一个新容器

  • 通过 PVE 控制台或基于 Web 的管理界面直接更改容器的状态

了解容器的优势

第一章,Proxmox VE 基础知识,通常介绍了 GNU/Linux 容器,并特别强调了它们与虚拟机的区别。本节详细阐述了容器的一些优势,并设想了一个理想的容器部署场景。

如果管理员可以在物理主机上运行 10-100 个虚拟机,那么她/他可以在同一主机上运行 100-1000 个容器,而不会显著影响性能 (computerpcdeal.com/servers-dell-poweredge/news_2014-06-17-05-30-07-224.html)。

容器最初可以被视为非常轻量级的虚拟机,但具有更低的开销,并且提供简化部署的附加价值。

Proxmox VE 和 LXC 的案例

容器是 FreeBSD 监狱(jails)的遗产,自从 2014 年 6 月 Docker 的崛起以来,容器享受到了复兴的浪潮,成为了计算领域专业人士中一个日益重要的文化标志。

需要牢记的是,Docker 最初依赖于 LXC,或者说 Linux 容器,这正是 Proxmox VE 自 4.0 版本以来用于容器化层的技术。

之前的版本实际上依赖于 OpenVZ,另一种开源容器技术。OpenVZ 以稳定性和可靠性著称;相比之下,直到最近,LXC 被描述为一种年轻的新兴技术,充满潜力,但仍显得不够成熟。

我们可以看到 LXC 快速增长的趋势,以下是 Google Trends 分析的截图,展示了 LXC 与 OpenVZ 的趋势对比:www.google.com/trends/explore#q=%2Fm%2F0crds9p%2C%20OpenVZ&cmpt=q&tz=Etc%2FGMT%2B5。作为搜索词,OpenVZ 在 2006 年迎来急剧增长,并且其热度一直维持到大约 2009 年,然后开始下降。

Proxmox VE 和 LXC 的案例

LXC 和 OpenVZ 在 Google Trends 上的兴趣变化

与此同时,LXC 的流行度缓慢增长,直到 2014 年——这一年 Docker 引发了容器界的一场轰动——LXC 超越了 OpenVZ。

随着容器复兴所带来的兴奋与焦虑,Proxmox VE 在 2015 年底转向 LXC 作为其容器化层也就不足为奇了;它是前沿技术,逐渐稳定,并得到了 IBM 和 Canonical 等公司贡献者的支持。

在此背景下,常常可以与容器化互换使用的术语包括 操作系统虚拟化虚拟私有服务器

欲了解有关容器历史的图解——从 Unix V7 开始并追溯到 2014 年的相关发展,请访问:pivotal.io/platform/infographic/moments-in-container-history

请注意,Proxmox VE 4.1 提供了可以将 OpenVZ 容器迁移到 LXC 的工具。欲了解更多信息,请访问 PVE 的 Wiki:pve.proxmox.com/wiki/Convert_OpenVZ_to_LXC

类似于虚拟机(VM),容器是一个隔离的实体;它可以独立重启,允许隔离的 root 访问,并且拥有独立的用户和组。

同样的隔离性也意味着可能拥有独立的 IP 地址、内存、进程、库和配置文件。

LXC 的特性集使其与完全虚拟化解决方案有所区别:

  • 与完全虚拟化相比,LXC 容器化层所消耗的 CPU 资源将显著更少。

  • 授权的容器用户可以更改任何配置文件,并在不干扰其他容器或 Proxmox VE 主机的情况下,在容器内安装额外的软件。

  • 尽管容器彼此完全隔离,但它们与宿主机共享动态库,从而大大节省了内存。

  • 大多数容器在几秒钟内完全启动,而虚拟机可能需要几分钟,在相同资源下。

  • 因为所有容器都运行在宿主系统的操作系统内核上,所以容器的运行几乎没有开销。

  • 每个容器的网络流量与其他容器的流量是隔离的;容器之间无法进行流量窃听。

  • 防火墙可以在容器内部使用,路由操作也可以进行。

从实际角度来看,这些功能意味着,例如容器可以在不重启的情况下进行扩展,并且通常比虚拟机提供更高的服务效率和更好的性能。

值得注意的是,谨慎的专家现在认为,容器的著名性能优势和它们所需的较少资源正在逐渐减弱,特别是随着更强大的硬件以更低的价格进入市场。这里的论点是,完全虚拟化仍然有其位置,且容器的优势是相对的,前提是从硬件资源稀缺的角度来看待这一问题。

这一点是有事实依据的,但并不否定容器在许多情况下可以成为虚拟机的低成本替代方案,且不影响服务质量的论断。

考虑到之前阐述的优势,可以直接导致物理主机的使用寿命延长,并且具备灵活性,容器可以快速迁移到另一个物理主机,以便进行硬件维护;在某些威胁类型面前,安全性得到了提升;最后,LXC 拥有一个蓬勃发展的开发者和用户社区,是一个极好的支持资源,无论是否拥有 Proxmox VE 高级订阅。

提示

容器安全

第七章,保护你的服务器,将特别关注虚拟机的安全性。

虽然我们无疑处于容器革命的热潮中,但关于容器安全仍然存在一些悬而未决的问题,我们必须认真追问这些问题。LXC 文档在linuxcontainers.org/lxc/security/中提供了一些见解。更多信息可以参考 SANS Institute 的资料,地址为www.sans.org/reading-room/whitepapers/linux/securing-linux-containers-36142,最后,IBM 提供了一些明确的指导,地址为www.ibm.com/developerworks/library/l-lxc-security/

然而,在完全虚拟化领域,已经有各种文件在致力于为虚拟机建立安全协议,无论厂商如何。这为我们提供了回应信息并发展对话的基础。

遗憾的是,这场革命仍然处于初期阶段,似乎还没有现成的操作系统级虚拟化标准可供使用。

这个非常独特的功能集应该激发我们立即为 LXC 容器设想一个代表性的应用案例;想象一下整个中学教育机构,再考虑它的各种计算机课程。对于这两种相关场景,硬件资源的整合潜力巨大。

计算机与信息通信技术专业的学生,例如,每个人都可以拥有自己独立的虚拟专用服务器,用于实验和完成引导性和独立的实践。他们每个人都有自己的虚拟专用服务器,用于实验、寻找灵感、完成评估,并实现他们的创新愿景。

此外,同一台物理硬件还可以为相关应用托管一个容器:

  • 一个学习管理系统LMS),如Moodle

  • 一个由网页应用程序提供的封闭社交网络,如Elggelgg.org/about.php)。

  • 一个微型博客系统,如GNU Socialgnu.io/social/)。

  • 一个目录服务器,如openLDAP,提供跨平台的单点登录服务。

  • 一个Maharamahara.org/)的作品集系统。

  • 一个网页过滤器和防火墙解决方案,不仅保护学生,还保护数据的完整性、利益相关者的机密性以及服务的可用性。

  • 可以添加一个域控制器以提供更多的灵活性和功能(www.turnkeylinux.org/domain-controller

容器有一个问题,它们并不是所有问题的解决方案。例如,LXC,PVE 容器背后的容器技术,仅支持 GNU/Linux 客体。

Proxmox VE 主机进一步限制了支持的容器 Linux 发行版。目前,以下是受支持的发行版和版本:

  • Debain (6, 7, 8)

  • CentOS 6

  • Ubuntu (12.04, 14.04, 15.04)

  • Archlinux

这是在充分确认 4.1 是 PVE 的一个非常近期版本的情况下提到的,而且很明显,Proxmox VE 将会在未来的每个月支持更多的发行版。

下一部分将介绍我们为在 PVE 上托管容器提供服务所需的第一步——获取容器模板。

我们将结束这一部分,并提醒大家,Proxmox VE 是一个企业级虚拟化平台,支持容器和完全虚拟化——正是因为两者在基础设施中都有各自的作用。

容器模板

模板是 LXC 容器(在 Proxmox VE 中简写为“CT”)的起点。模板有两种类型:操作系统模板设备模板

操作系统模板提供来自 GNU/Linux 发行版的最小软件包集合,以及系统库和脚本,用于启动和运行容器。它们旨在充分利用主机上运行的 GNU/Linux 内核。

除了基础工具,如 bash 解释器和实用程序外,操作系统模板通常不包含其他软件,如编译器或数据库管理系统(DBMS)。

与操作系统模板不同,虚拟设备是在 JeOS(足够操作系统)基础上构建的,旨在可靠、安全并高效地提供非常特定的服务。

虚拟设备可以提供通用功能,例如 LAMP 堆栈;也可以提供特定应用,例如 GitLab(about.gitlab.com/);如 WordPress 或 Drupal 这样的 CMS;或者像 Observium(www.observium.org/)这样的基于 Web 的网络监控系统。

虚拟设备最吸引人的地方在于它们几乎无需配置或调优,用户可以轻松使用。

操作系统模板和虚拟设备都可以通过 Proxmox VE 管理界面获取。目前,所有可用的设备都由TurnKeyGNU/Linux提供;该平台提供超过 190 个设备,从 Web 应用到 SDK(软件开发工具包),以及用于监控网络活动、提供 LDAP 或域控制器等管理模板,还有更多其他功能。

容器模板

TurnKey GNU/Linux 设备库的网站

每个设备都基于相同版本的 Debian JeOS(称为 Turnkey GNU/Linux Core,Debian 8)构建,至少包括 shellinabox、OpenSSH 服务器和定制的 Webmin。

提示

TurnKey GNU/Linux Core

有关 TurnKey GNU/Linux Core 的更多信息,请访问 www.turnkeylinux.org/core

下载模板

模板可以通过 Proxmox VE 管理界面直接获取,界面中提供了操作系统模板和虚拟设备模板。

在本节中,我们将登录到基于 Web 的管理界面,导航到服务器视图中的存储,并浏览可用模板列表。

注意

要跟随本教程,您的 Proxmox VE 主机必须能够访问互联网。

登录 Proxmox VE 的 Web 界面

开始之前,请从同一局域网内的工作站登录 Proxmox VE;使用 SSL/TLS 浏览器访问 Proxmox VE 实例的 IP 地址的 8006 端口。本文中的机器地址为 192.168.1.80;例如,要访问此机器,您可以直接在支持 JavaScript 的浏览器中访问 https://192.168.1.80:8006

由于 PVE 使用自签名证书,浏览器会警告连接不可信。例如,Firefox 会显示类似以下窗口:

登录到 Proxmox VE 的 Web 界面

不安全连接对话框(在 Firefox 中)

Firefox 用户可以按如下方式继续操作:

  1. 在 Firefox 中,选择高级,然后点击显示出来的添加例外...按钮继续。

  2. 在弹出的添加安全例外对话框中,点击确认安全例外,并注意您可以选择通过勾选永久存储此例外复选框来永久存储此例外(此对话框在以下截图中显示):

登录到 Proxmox VE 的 Web 界面

添加安全例外对话框(在 Firefox 中)

如果您使用 Google Chrome 访问管理界面,应该看到类似于以下截图的页面:

登录到 Proxmox VE 的 Web 界面

Google Chrome 中的隐私错误对话框

要忽略此(稍显不安的)警告:

  1. 滚动到页面底部。

  2. 点击高级

  3. 点击继续访问 192.168.1.80

关于此链接,有两点需要注意:它被附加了“unsafe”提醒,表示这可能是一个安全风险,并且包含了针对 Chrome 用户的步骤。

无论使用哪种浏览器,都确保将192.168.1.80替换为您的 Proxmox VE 主机的 IP 地址。

注意

有关这些浏览器警告的解释,请参阅与 TLS/SSL 相关的自签名证书资源:

en.wikipedia.org/wiki/Self-signed_certificate

en.wikipedia.org/wiki/HTTPS

security.stackexchange.com/questions/8110/what-are-the-risks-of-self-signing-a-certificate-for-ssl

当页面完全加载后,使用用户名root和在第二章中设置的密码继续登录,安装 Proxmox VE

选择名为Linux PAM 标准认证领域。最后一个字段决定了 Web 界面的语言。选择您需要的语言,然后点击登录继续。

登录到 Proxmox VE 的 Web 界面

Proxmox VE Web 管理界面的登录对话框

成功登录后,您将首次看到 Proxmox VE 管理界面。

浏览可用的容器模板

在左侧栏中,靠近横幅的地方,选中的视图应该已经设置为服务器视图

  1. 服务器视图下方直接展开资源树(数据中心节点)。在左侧框架的资源树底部会显示本地物理主机的存储,标记为local,后面跟着你的主机名;在下面的截图中,主机名为 pve4,存储节点仅标记为 local(pve4)。

  2. 选择与服务器本地的存储节点;例如,在下面的截图中,选择local (pve4)浏览可用的容器模板

    服务器视图和资源树(展开显示本地(pve4))

  3. 右侧框架将显示三个标签;摘要内容权限

    选择内容标签,以显示模板按钮和上传按钮。

    浏览可用的容器模板

    PVE 节点的本地存储名为 pve4。截图显示本地存储(PVE4)的路径,以及模板和上传按钮的位置。

要浏览列表或下载通过 PVE 界面提供的操作系统模板和虚拟设备,按照以下步骤操作:

  1. 点击模板标签。

  2. 滚动浏览弹出的窗口,直到找到一个适合你兴趣的模板。

浏览可用的容器模板

看一眼 Proxmox VE 界面中提供的几个容器模板

小贴士

Turnkey GNU/Linux 设备库

如果你决定想了解更多关于某个 Turnkey GNU/Linux 设备的信息,可以通过浏览器访问 www.turnkeylinux.org/all,查看每个设备的详细描述和功能列表。

下载容器

小贴士

在本章剩余部分,我将使用 Ubuntu 14.04 标准模板。虽然建议你跟着做,但也有许多有趣的模板可以作为起点。

下载容器

准备创建 Ubuntu 14.04.1 容器

一旦你选择了操作系统或设备模板:

  1. 点击选择你的选择。

  2. 点击下载按钮。

模板将保存在 PVE 的本地存储中,路径为 /usr/share/vz/cache/templates/

小贴士

如果在 Web 界面中可用的模板列表似乎不完整,可以通过 PVE 主机的命令行刷新它。从本地登录到主机、通过 SSH 或使用 Web 界面提供的 noVNC 控制台来访问命令行界面。身份验证后,只需在提示符下输入 pveam 即可刷新模板列表。

现在模板已下载,可以从中创建容器。在下一节中,我们将配置并创建第一个模板。

从模板到容器

你可能注意到,当你在存储中高亮一个项目——ISO 或模板时,右侧框架顶部会出现创建 CT(容器)或创建 VM(虚拟机)的选项。要从模板创建容器,使用 Proxmox VE:

  1. 至少准备好以下信息:

    • root 用户的密码

    • 主机名称

    • 主机的空闲 IPv4 地址

    • 最大 RAM 数量

    • CPU 数量

    • 虚拟硬盘(以 GB 为单位)的存储空间预期大小

    • 互联网网关的 IPv4 地址

    • 主机所在网络的适当子网掩码

  2. 一旦确认了这些信息,从本地选择你要用于创建容器的模板。

  3. 点击右上角的创建 CT按钮(参见下图)。从模板到容器

    创建 CT 和 VM 并显示在右上角

  4. 点击创建 CT将启动创建 LXC 容器对话框,提供配置容器的图形界面。

    第一个标签是常规

    从模板到容器

    容器创建对话框的“常规”标签

    使用此对话框定义主机名,并确认 root 用户的密码。VM ID 字段将在 Web 界面中自动填充并自动递增:第一个创建的虚拟机将具有默认VM ID100,下一个为101,依此类推。

  5. 点击下一步继续到模板标签,如下所示:从模板到容器

    容器创建对话框的“模板”标签

  6. 为了继续本节内容,从下拉模板菜单中选择Ubuntu-14.04-standard_14.04-1_amd64.tar.gz并点击下一步以继续到根磁盘标签。从模板到容器

    容器创建对话框的根磁盘标签

    在此阶段,存储被定义为本地,并且没有可用的其他选项。定义容器虚拟磁盘的大小,以满足你的偏好(但请避免设置磁盘大小小于 4GB)。

  7. 点击Next来为容器定义CPU限制和单位。为了本节内容的方便,我们保持这些设置为默认值。从模板到容器

    容器创建对话框的CPU标签

  8. 点击下一步来为容器配置内存从模板到容器

    容器创建对话框的“内存”标签

  9. 再次强调,默认设置对我们来说是合适的,因此我们将从内存标签继续前进到网络标签:

从模板到容器

容器创建对话框的网络标签

网络标签假设你对容器所加入网络的配置有一定的了解。由于本例中 PVE 主机位于192.168.1.80,因此这个第一个容器的地址将是192.168.1.81,这是一个我确信不会与其他设备冲突的静态地址。右上角选择了静态地址,而非 DHCP。

确保在IPv4/CIDR字段中指明范围。在这种情况下,子网掩码是 255.255.255.0,因此 IP 地址后面加上/24。如果网络的正确子网掩码包含更多地址,如 255.255.0.0,只需替换为/16,例如。对于那些没有现成 CIDR 表示法的人,可以访问www.subnet-calculator.com/cidr.php来使用计算器。

对于我们的目的,IPv6并不重要;选择DHCP单选按钮,然后查看网络选项卡的左列。

名称指的是虚拟网络接口在容器内的显示方式;默认的eth0正是我们需要的。

桥接字段要求选择主机上的哪个桥接器来连接容器。在上面的截图中,vmbr0是默认且唯一的选择;我使用的机器只有一个 NIC,并且在主机中定义为vmbr0

准备提交网络选项卡中的设置时,点击下一步以将容器指向 DNS 服务器。

从模板到容器

容器创建对话框的 DNS 选项卡

同样,在我的网络环境下,DNS 域字段设置为使用主机设置的默认设置非常合适。要查看并提交配置,请点击下一步

从模板到容器

容器创建对话框中的确认选项卡

确认选项卡提供了配置摘要,并且可以再次查看一些配置决策。点击返回进行调整,或者点击完成开始容器创建任务。

一旦点击完成,配置对话框将关闭,并且浏览器中会弹出一个新窗口,提供观看 PVE 根据你的配置从模板构建 LXC 容器的机会:

从模板到容器

容器创建完成时,任务查看器的输出

任务查看器窗口输出TASK OK时,容器已准备好使用。可以关闭任务查看器窗口。

注意

也可以通过使用 PVE 主机的命令行和pct创建命令,从模板创建容器。以下 bash 脚本演示了使用此命令创建一个几乎与通过基于网页的过程创建的容器相同的容器:

#!/bin/bash 
#### Set Variables #### 
$hostname="trusty-chapter3" 
$vmid="100" 
$template-path="/var/lib/vz/template/cache" 
$storage="local" 
$description="trusty container for Chapter 3" 
$template=" Ubuntu-14.04-standard_14.04-1_amd64.tar.gz" 
$ip="192.168.1.81/24" 
$nameserver="8.8.8.8" 
$ram="1024" 
$rootpw="changeme" 
$rootfs="4" 
$gateway="192.168.1.1" 
$bridge="vmbr0" 
$if="eth0" 
#### Execute pct create using variable substitution #### 
pct create $vmid \ 
  $template-path/$template \ 
  -description $description \ 
  -rootfs $rootfs \ 
  -hostname $hostname \ 
  -memory $ram \ 
  -nameserver $nameserver \ 
  -storage $storage \ 
  -password $rootpw \ 
  -net0 name=$if,ip=$ip,gw=$gateway,bridge=$bridge 

在大多数情况下,修改容器的配置和添加虚拟设备是通过网页界面轻松完成的。要编辑配置或添加设备:

  1. 在界面左侧框架的服务器视图中选择容器。

  2. 在右侧框架中,查看开始按钮下方的一组选项卡(如下面的截图所示)。

  3. 将你想完成的任务与选项卡名称匹配。

  4. 使用添加编辑按钮进行所需的更改。

从模板到容器

大多数容器配置更改可以通过 PVE Web 界面完成

下一部分是关于控制任意给定容器的状态;例如,如何启动和停止它。

启动和停止容器

要启动容器,选择左侧窗格中的容器;图标应该是黑色和灰色的,表示容器未运行。

  1. 在下图中,我的容器的 VM ID 为100,名称为trusty-chapter3启动和停止容器

    已停止容器的图标

  2. 在界面的右上角,点击启动按钮来启动容器:

启动和停止容器

容器启动按钮

当容器启动过程完成时,界面左侧框架中的容器图标颜色发生变化;它现在应该是绿色、黑色和灰色,而不仅仅是黑色和灰色;图标上的绿色部分是一个快速的视觉标识,帮助区分正在运行的容器和已停止的容器。

启动和停止容器

正在运行的容器图标是绿色、黑色和灰色的

在资源树的左侧框架中,选择正在运行的容器。

在屏幕的右侧,几个按钮变得可用:

  • 点击关机将优雅地关闭容器

  • 相比之下,停止按钮会突然停止容器

  • 迁移允许我们在 Proxmox VE 集群节点之间移动容器,甚至是正在运行的容器,而不会导致任何服务中断或其他停机。

  • 删除按钮将删除已停止的容器。请注意,如果容器没有备份,删除后无法恢复。

要暂停容器,请在 PVE Web 界面中选择容器的备份标签。点击立即备份,在弹出的对话框中,从模式下拉菜单中选择暂停。点击备份按钮以暂停容器并关闭对话框。

启动和停止容器

容器可以通过 PVE Web 界面暂停

使用命令行更改容器状态

容器的状态也可以通过 PVE 主机的命令行控制(无论是通过 SSH 会话、noVNC 控制台,还是登录到物理主机)。

要启动本章中描述的并分配了 VM ID 为 100 的容器,输入pct start 100。同样,使用pct stop 100也可以停止该容器。

模板可以通过 PVE 命令行或 Web 界面进行备份。要了解更多关于备份和恢复容器的信息,请访问 Proxmox Wiki:pve.proxmox.com/wiki/Linux_Container#Backup_container

访问容器

通过 Proxmox VE 提供的大多数操作系统模板,最初都配置为可以通过 noVNC 控制台进行访问,该控制台可以从管理网页界面启动,或通过 PVE 命令行界面进行访问。

这并不意味着没有安装 OpenSSH;事实上,我还没有见过没有安装 OpenSSH 服务器的模板。只是这些操作系统模板在启动时没有配置,使得 root 用户不能使用密码登录。(然而,TurnKey Linux 的设备可以通过 SSH 使用 root 账户和密码进行访问。)

提示

pct enter命令使得从 PVE 主机的命令行界面访问容器变得轻松。要进入本章开发的容器,我可以通过 SSH 访问 PVE 主机,例如,以 root 用户登录;然后,我可以在命令行中输入pct enter后跟容器的虚拟机 ID,在此案例中为100。只需在提示符下输入pct enter 100并按Enter键,即可进入容器的 Shell。

要通过noVNC控制台访问正在运行的容器,请在网页界面中选择正在运行的模板,然后选择浏览器右上角的控制台,从下拉菜单中选择noVNC

访问容器

当选中一个已启动的容器时,控制台按钮会出现在页面的右上角。

或者,按照前面所述选择正在运行的模板,但不要点击控制台下拉菜单,而是选择容器的控制台选项卡。

如果你可以通过控制台访问终端,如下图所示,那么你就可以创建用户、安装软件包并进行其他配置更改,使容器符合你的需求。

访问容器

通过 noVNC 控制台会话重新配置 Ubuntu 容器的时区数据

如果控制台启动但仅显示黑屏和无响应的光标,请尝试按Enter键,查看是否出现登录提示。如果不起作用,可以考虑有些容器需要重启一次才能提示输入凭证;重启容器后,再次启动 noVNC 控制台。如果 noVNC 屏幕仍然是黑的,可以按Enter键强制出现提示。

注意

大多数容器都需要配置区域设置和时区。dpkg-reconfigure locales将引导你通过简短的对话框来确定 Debian 或 Ubuntu 容器上可用的区域设置。dpkg-reconfigure tzdata将引导你完成必要的步骤,以设置或重新配置 Debian 或 Ubuntu 容器的时区数据。

总结

本章详细介绍了从 LXC 模板开发容器的过程。我们探讨了 LXC 容器在 Proxmox VE 中的潜力,并概述了一个示例使用案例,该案例可以推广到其他情况,并展示了 Proxmox VE 容器的功能如何为组织的 IT 基础设施增加价值、灵活性和可扩展性。

在描述如何从模板派生容器后,我们探索了如何通过命令行和网页界面来操作容器的方法。

在第四章,创建虚拟机,我们将识别虚拟机相较于容器的优势,并探索一些使用案例。在本章的结尾,我们将演示如何通过 ISO 创建 Microsoft Windows 和 GNU/Linux 虚拟机。

结合我们目前对容器的了解,探索虚拟机在一个以容器化为核心的文化中所占的位置将是令人兴奋的。

第四章。创建虚拟机

"...但是,如果抽象概念在 IT 领域如此普通,那是什么解释了近年来虚拟化越来越受到关注?这一趋势在数据中心中更加显著,自 2000 年代中期以来,虚拟化已经深深嵌入这些环境的开发战略中。而这种迷恋仍在增长……因此,这些设施已被虚拟服务器、虚拟网络、虚拟存储、虚拟设备和其他'V 技术'所包围,承诺从现实的束缚中解脱出来。"
-- 古斯塔沃·A·A·桑塔纳,《数据中心虚拟化基础》

在第三章中,创建容器,我们探讨了如何使用 Proxmox VE 创建、配置和控制 LXC 容器。在本章中,我们将重点介绍如何使用 Proxmox VE 创建和控制 KVM-QEMU 虚拟机。

在第一章中,我们对比了虚拟机和容器,Proxmox VE 基础,我们将借此机会深入探讨虚拟机相比容器仍然具备的一些优势,尽管显而易见地,我们正处于容器革命的浪潮中。同时,我们还将基于所学探索一些应用场景。

接下来,我们将讲解如何使用 Proxmox VE 从 ISO 镜像创建虚拟机。PVE 作为服务器虚拟化平台,因此我们将演示创建和配置两个虚拟机:第一个运行 Microsoft Windows 2012r2,第二个运行 Fedora Core 23 Server。

由于这两个操作系统都有图形用户界面组件,我们将抓住这个机会,探索更多 PVE 的功能,这在没有实际需求时我们可能不会涉及。

到了第四章的结尾,创建虚拟机,我们将涵盖使用 Proxmox VE 进行完全虚拟化的以下方面:

  • 将 ISO 上传到 Proxmox VE 的本地存储

  • 从 PVE Web 界面创建和配置虚拟机

  • 使用 PVE Web 界面的控制台功能与虚拟机交互

  • 重新配置虚拟机

  • 控制虚拟机的状态

然而,首先我们将回顾并探讨硬件虚拟化在容器热潮中的持续作用。

虚拟机的特征区别

尽管容器在如此短的时间内确实取得了显著的进展,但虚拟机依然拥有显著的独特特点。例如:

  • 虚拟机可以运行任何为主机架构设计的操作系统;例如,Android-x86、FreeBSD、Ubuntu、Windows Server,甚至桌面操作系统都可以在 Proxmox VE 主机上运行多个虚拟机,只要主机拥有足够的硬件资源。

虚拟机的区别特征

在 Proxmox VE 上托管的 Ubuntu 15.04 虚拟机,通过 PVE 的 Web 界面中的 SPICE 控制台选项访问

  • 一台虚拟机可以托管多个容器;当我们寻找创意和聪明的数据中心解决方案时,我们需要始终意识到,操作系统虚拟化和系统虚拟化是互补的关系,而不是竞争或对立的关系。例如,虚拟机仍然提供比容器更彻底的隔离。

  • 虚拟机和容器涉及不同的安全问题和方法。系统虚拟化的标准非常成熟且可自由获取,而操作系统虚拟化的安全性和标准化解决方案尚未成熟。

提示

我们将在第七章中更全面地讨论安全性和 PVE,保护 Proxmox VE

系统虚拟化的区别特征表明,至少在当前,虚拟机比容器更具灵活性;例如,许多操作系统可以在单一的虚拟化管理程序上共存,如 Proxmox VE。而容器无法实现这一点。目前,这意味着纯容器仅在基于 GNU-/Linux 的主机上才会存在,而基于 Microsoft 的容器只能在基于 Microsoft 操作系统的主机上运行。因此,由 Proxmox VE 托管的容器需要主机操作系统共享 GNU/Linux 库和二进制文件。

尽管容器技术发展迅速,但随着 Windows Server 2016 的发布,这一限制可能会很快改变,Windows Server 2016 现已可以预览;微软已宣布计划将 Docker 集成到该产品中(zdnet.com/article/microsoft-to-add-virtualized-containers-non-server-mode-to-windows-server-2016/,访问时间:2015 年 6 月 1 日)。

注意

Docker 是一个开源的容器化解决方案,正在积极开发并且引起了广泛关注。简要调查表明,运行 Docker 的 Windows 主机可以运行 Linux 容器。一旦我们意识到 Docker 实际上只有在系统虚拟化层的支持下才能做到这一点(如 boot2docker github.com/boot2docker/boot2docker),这个反论点就很容易解决。

系统虚拟化在操作系统方面可能声称的灵活性,确实是有代价的:虚拟机比容器需要更多的资源,并且有更多的开销

在接下来的部分,我们将探讨一些使系统虚拟化仍然具有吸引力的场景。

系统虚拟化的应用场景

从前面讨论的区别特征中,我们可以得出一些非常强大的使用案例。例如:

  • 跨平台软件开发和测试

  • 企业中跨平台系统的管理和运维

  • 对遗留应用程序、系统或数据的依赖

  • 新系统或政策部署的试验场

  • 为 IT 和 ICT 学生提供的实验室

  • 跨平台的生产力和一致性

这些场景突出了每个差异所带来的变化,特别是 Proxmox VE 支持的两种虚拟化形式——虚拟机和容器之间的差异。

本章自信地得出一个有根据的结论:容器和虚拟机(或操作系统虚拟化和系统虚拟化)是两种不同的工具,它们共同为数据中心及其工程师提供了强大的灵活性,并在(重)构建数据中心时提供了行使自由裁量权的机会。

让我们来看看使用 Proxmox VE 创建虚拟机的过程。

创建虚拟机

本节提供了虚拟机创建过程的抽象概述,从配置机器到操作系统的安装,再到最终控制其状态。

安装介质

在最佳情况下,计划用于新虚拟机的操作系统可以作为可下载的 ISO 文件。这单个文件旨在完美地代表整个 CD 或 DVD。在一些 GNU/Linux 发行版的情况下,完整的安装介质跨越多个 DVD。

通常,在这些情况下,会有一个网络安装(或 netinst)磁盘映像,提供足够的操作系统来驱动系统设备,安装程序,然后从在线仓库下载并安装所需的软件。

当操作系统作为 ISO 文件可用时,我们可以简单地将其下载到远程工作站,然后通过 PVE 的 Web 界面上传到 PVE 主机的本地存储,并继续创建虚拟机。

将 ISO 文件上传到 PVE 的本地存储

使用远程工作站处理 ISO 镜像有五个步骤。

  1. 从 Web 下载 ISO 到本地工作站,并验证图像是否没有损坏或被篡改(请参阅 www.online-tech-tips.com/cool-websites/what-is-checksum/ 了解有关此过程的更多信息)。

  2. 通过浏览器访问 Proxmox VE Web 界面(将浏览器指向 https://<ip address>:8006,其中 <ip address> 是 PVE 的 IP 地址)。

  3. 在浏览器窗口的左侧窗格中,应该选择 Server View。在下拉菜单下方,应该可以看到一个名为 Datacenter 的文件夹。展开该文件夹以显示 PVE 主机,按主机名标记。再展开,显示该主机的本地存储,接着选择它的本地存储。例如,在下面的截图中,PVE 主机的主机名为 pve4,因此本地存储标记为 local (pve4)将 ISO 文件上传到 PVE 本地存储

    导航到 PVE 节点的本地存储

  4. 选择本地存储后,右侧窗格应显示三个标签:摘要内容权限。选择内容标签以显示右侧窗格中的两个按钮,模板上传上传 ISO 文件到 PVE 本地存储

    本地存储

  5. 为继续操作,请点击上传按钮。在弹出的对话框中,从名为内容的下拉菜单中选择ISO 镜像,然后点击选择文件...按钮,浏览工作站的文件系统以选择要上传到 PVE 主机的磁盘镜像文件。上传 ISO 文件到 PVE 本地存储

    上传对话框

注意

默认情况下,通过 Web 界面上传到 PVE 本地存储的 ISO 文件路径为 /var/lib/template/iso。请注意,文件也可以通过 scpsftp 从工作站传输到该位置,前提是远程工作站上安装了相关工具。

在 PVE 可用安装介质的情况下,我们已准备好使用 Proxmox VE 的 Web 界面配置并创建虚拟机。下一部分将探讨这一过程。

准备虚拟机

我们通过在 PVE Web 界面的服务器视图中找到 Proxmox VE 实例的主机名和本地存储开始该过程。选择主机并点击页面右上角的创建虚拟机按钮,开始配置新虚拟机。

一个名为创建:虚拟机的对话框将出现在浏览器窗口中。此对话框用于为新虚拟机提供初步规格,包括硬件规格、操作系统类型以及 PVE 用来引用新虚拟机的名称。

从左到右,标签页如下:

  • 常规

  • 操作系统

  • CD/DVD

  • 硬盘

  • CPU

  • 内存

  • 网络

  • 确认

完成一个标签页后,可以通过点击下一个标签页或点击下一步按钮继续操作。

预期配置标签页

以下是我们可以从创建:虚拟机对话框中每个标签页中期待的简要概述。

常规

常规标签页中,定义了虚拟机的名称和 VM ID。请注意,"名称"字段指的不是虚拟机的主机名;主机名是在配置操作系统时定义的。此处的名称是 Proxmox VE 用来在 Web 界面中引用此虚拟机的名称。

在生产环境中,建议在命名方案上保持谨慎和系统化,就像在数据中心为主机命名一样。

在定义 VM ID 时,同样重要的是要保持严格的系统化。每个虚拟机和容器都必须分配一个唯一的数字,PVE 称之为 VM ID。虽然 Proxmox VE 会提供一个默认的 VM ID,但这是一个任意的系统,而不是一个由良好制定的政策所产生的有意识系统。

在大型生产环境中,考虑根据虚拟服务器的用途为虚拟机分配专用的 ID 范围(例如,虚拟机 ID 1000-2000 用于提供 Web 服务的虚拟机)。如果你的数据中心随着备份计划的系统化和虚拟服务器生命周期管理计划的建立而扩展,你会感激你这样做过。

操作系统

操作系统选项卡提供了创建面向特定操作系统的虚拟机的一些支持。请注意,对于 GNU/Linux 发行版,基于内核版本有多个选项。

操作系统

光盘/CD/DVD

光盘/CD/DVD选项卡提供了指定用于安装操作系统的初始光盘镜像的机会;或者,我们可以指示 PVE 依赖本地光驱中的物理光盘。如果选择 ISO 镜像,系统会要求你从已上传到 Proxmox VE 的 ISO 文件中选择。

硬盘

硬盘选项卡中,我们可以定义为虚拟机分配的二级存储的大小。还有一个总线/设备字段,以及一个标记为存储的字段,用于指定存储虚拟磁盘的位置。为了本文的目的,我们将保持该字段为默认值local

提示

有关虚拟存储的更多信息,请参阅第五章,使用虚拟磁盘

CPU

CPU选项卡提供了定义 CPU 插槽数量的机会,还可以定义每个插槽使用的核心数。

内存

内存选项卡提供了两种为虚拟机分配 RAM 的方法;我们可以选择一个固定的 MB 值,也可以在指定范围内自动分配 RAM。

网络

在“网络”选项卡中,特别值得注意的是左列中提供的三种网络模式,以及右列中定义网络接口模型的机会。

网络

在前面的截图中,虚拟机将配置为通过依赖 PVE 的桥接模式,表现得好像它直接连接到物理网络。相比之下,NAT(网络地址转换)模式将虚拟机连接到主机维护的孤立局域网,并且与物理网络完全隔离。

在相同的截图中,网络卡的模型设置为Intel E1000。性能不如我们从virtio 半虚拟化中获得的效果,但 Windows 操作系统的虚拟机可以即插即用,而 virtio 则需要额外的驱动程序。Intel E1000 以其兼容性突出,而 virtio 则提供更优越的性能。

提示

配置为 NAT 模式的虚拟机可以访问物理网络上的资源,但不能被 Proxmox VE 主机之外的资源看到或访问。

Proxmox VE 的网络模型复杂且非常灵活。要了解更多信息,请参见第六章,网络与 Proxmox VE,这是一个专门介绍 Proxmox VE 网络的章节。还可以访问pve.proxmox.com/wiki/Network_Model的维基页面。

确认

确认标签提供了虚拟机配置的概览,供在创建虚拟机之前进行审核。

在此标签页中,出现了一个完成按钮,位置与其他标签页中的下一步按钮相同。要创建虚拟机,请点击完成按钮。

完成创建:虚拟机对话框后,虚拟机配置完成——这类似于构建了一台物理计算机,将其插电,打开电源,只开启足够长的时间以便将安装介质插入光驱,然后迫不及待地等待它重新开机以便安装操作系统。

提示

保持关注主机的硬件规格,并时刻注意随着虚拟机和容器在 PVE 主机上的积累,资源是如何分配的。

下一步是启动新创建的虚拟机并安装其操作系统。首先,让我们通过控制虚拟机的状态来了解步骤:启动、关闭和强制停止虚拟机。

控制虚拟机的状态

在此过程中的此时,刚创建的虚拟机以关机状态出现在服务器视图中:

控制虚拟机的状态

停止状态的虚拟机图标

在前面的截图中,主机上唯一的虚拟机的 VM ID 是 101,名称为fedora-ch4。停止的虚拟机通过一个显示黑色屏幕的监视器图标表示。

如果我们在左侧窗格中选择虚拟机,控制其状态的按钮将出现在右侧窗格,这正是我们在上一章中看到的容器操作:

控制虚拟机的状态

启动虚拟机

启动按钮将“开机”虚拟机,并开始启动过程。

注意

运行中的虚拟机通过一个带白色屏幕的监视器图标表示,这与停止状态的虚拟机图标在视觉上有所区别。

一旦启动,我们可以打开虚拟机的 noVNC 控制台,查看从 BIOS 选项到操作系统与用户的首次互动过程。这个工具同样适用于图形用户界面和命令行界面。

控制虚拟机的状态

更改运行中虚拟机的状态

要优雅地停止虚拟机,请使用关机按钮,该按钮在启动后可用。或者,使用停止来强制关闭虚拟机。重置按钮将停止虚拟机,类似于硬件重置按钮的作用。

要销毁虚拟机,请首先确保虚拟机处于停止状态,然后按下删除按钮,系统会显示一个警告,告知该操作无法撤销。PVE 将提供取消选项,允许你重新考虑该操作,或者继续执行销毁虚拟机的操作。

从 PVE 命令行控制虚拟机

qm命令使我们能够通过 Proxmox VE 命令行界面控制虚拟机的状态。在接下来的示例中,所有更改将应用于 ID 为 101 的虚拟机:

  • qm destroy 101:销毁虚拟机并删除其所有已使用或拥有的存储卷

  • qm reset 101:重置虚拟机

  • qm resume 101:恢复虚拟机(如果它被暂停)

  • qm shutdown 101:关机虚拟机

  • qm start 101:启动虚拟机

  • qm stop 101:停止虚拟机

  • qm suspend 101:暂停虚拟机

注意

qm 命令提供对虚拟机的全面控制,从创建到销毁。欲了解更多信息,请访问手册页面:pve.proxmox.com/wiki/Manual:_qm

在接下来的章节中,虚拟机创建和配置过程的概要和示意图将变得更加具体和详细,我们将应用所学内容来构建两个虚拟机:首先我们将介绍如何创建 Windows Server 2012r2 虚拟机,然后我们将创建一个 Fedora 23 Server 虚拟机。

练习创建虚拟机

在本节和下一节中,我们将演示整个虚拟机创建过程,从 ISO 镜像的获取,到虚拟机的配置,再到操作系统的安装。

首先,我们将通过微软 Windows Server 2012r2 系统的过程。随后,我们将介绍如何创建一个 Fedora 23 Server 虚拟机。

使用 Proxmox VE 虚拟化 Windows Server 2012r2

如果你想精确按照这里描述的安装过程进行操作,你将需要一个 Windows Server 2012r2 的 ISO 镜像,必要时可以使用现有的 DVD。如果你可以访问批量许可中心,你或许能够通过访问www.microsoft.com/Licensing/servicecenter/default.aspx从微软下载镜像文件。

写本文时,Windows Server 2012r2 可在微软的 TechNet 评估中心进行评估(评估期限为 180 天):www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2012-r2

使用 Proxmox VE 虚拟化 Windows Server 2012r2

微软的 TechNet 评估中心

使用 Proxmox VE 虚拟化 Windows Server 2012r2

注册、登录并下载微软 Windows Server 2012r2

从与您的 Proxmox VE 服务器处于同一物理网络的工作站下载 ISO 文件,然后按照前一节中描述的方式,通过 Web 界面将映像上传到 PVE。

上传完成后,它应该会出现在本地存储的内容标签页中。

使用 Proxmox VE 虚拟化 Windows Server 2012r2

查看可用的映像文件

配置和创建虚拟机

要快速配置和创建 Windows Server 虚拟机,请按照以下步骤操作:

  1. 首先,将 Microsoft Windows Server 从工作站上传到 Proxmox VE 服务器,如前所述。

  2. 现在,操作系统安装介质已可供 PVE 使用,我们可以点击创建虚拟机按钮,启动如前所述的创建:虚拟机对话框。完成常规标签页中的字段,如以下截图所示:配置和创建虚拟机

  3. 通过点击下一步,进入对话框的操作系统(OS)标签页。该对话框的左侧栏包含了微软操作系统的选项。选择最上面的选项,Microsoft Windows 8/Server 2012,然后点击下一步继续到CD/DVD标签页。配置和创建虚拟机

  4. CD/DVD标签页中,选择顶部选项以选择 ISO 文件。将存储字段设置为本地,使用ISO 映像字段的下拉菜单选择已上传的 2012r2 映像。点击下一步继续。配置和创建虚拟机

  5. 硬盘标签页,记住 Windows Server 2012r2 至少需要 32 GB 的存储。设置合适的磁盘大小,并确保总线/设备设置为IDE,避免选择virtio。将格式设置为QEMU 映像格式(qcow2),然后点击下一步继续到CPU标签页。配置和创建虚拟机

    提示

    我们将在下一章中介绍总线/设备(Bus/Device)类型。

  6. CPU标签页,配置要分配给虚拟机的插槽数和每个插槽的核心数。为了本练习的目的,我将插槽设置为1,并将核心数设置为2类型字段应设置为默认(kvm64)。请记住,稍后我们可以根据需要更改 CPU 配置。点击下一步以配置虚拟机的内存。配置和创建虚拟机

  7. Windows Server 2012r2 至少需要 512 MB 的内存。如以下截图所示,PVE 提供了固定内存大小或在指定范围内自动分配内存的选项。配置和创建虚拟机

    出于本次练习的目的,已分配了固定的 2,048 MB 内存,理解这一设置稍后可以轻松更改。当内存调整到您希望的状态时,点击下一步以配置网络。

  8. 如下截图所示,虚拟机的 IP 地址不能像容器那样预先配置:配置和创建虚拟机

    如图所示,选择了桥接模式而不是NAT 模式。这一选择是故意做出的。在这种情况下,NAT 模式会阻止我们通过微软的远程桌面协议或远程服务器管理工具访问虚拟机的桌面。

    桥接模式提供了更多访问虚拟机的选择,因为它有点类似于将计算机连接到物理网络中的交换机。做出这个决策时需要考虑隔离性和安全性,尤其是在 Proxmox 防火墙禁用的情况下。

    提示

    要了解有关 PVE 集成防火墙功能的更多信息,请访问 pve.proxmox.com/wiki/Proxmox_VE_Firewall#Enabling_firewall_for_qemu_guest_and_openvz_veth

    网络设置可以在虚拟机创建后随时重新配置。

    网络选项卡配置到您满意的状态时,点击下一步以查看配置摘要并确认配置。

  9. 最后一页标签为确认,提供了虚拟机配置的摘要,并可最终创建虚拟机。配置和创建虚拟机

    点击完成按钮以确认配置并创建虚拟机,但您可以利用这个机会返回上一步并调整配置。

    请记住,许多这些设置即使在虚拟机创建和操作系统安装后仍可以更改,有时甚至无需重启计算机。

    在 30 秒内,新的虚拟机将在 Web 界面的左侧框架中出现。

    配置和创建虚拟机

提示

还有另一种方式

请注意,在本章中,Windows Server 虚拟机的配置目的是为了让我们能够快速试用 Windows Server 虚拟化,使用的是 TechNet 试用版;该配置并未针对性能进行优化,因此不适合生产环境。理想情况下,在 Proxmox VE 中,生产就绪的 Windows Server 虚拟机应配置为利用半虚拟化技术;在 PVE 中,只需在两个选项卡上选择 virtio。在 硬盘 选项卡中,考虑选择 virtio 而不是 IDE;在 网络 选项卡中,考虑选择 virtio 而不是 Intel E1000。不过,这会让 Windows Server 的安装变得复杂,因为它不带有 virtio 驱动程序。因此,我们需要将驱动程序上传到 PVE 的 ISO 镜像,并在操作系统安装过程中早期就让 Windows Server 可用这些驱动。幸运的是,这一配置在 PVE 的维基中有详细文档,地址是 pve.proxmox.com/wiki/Windows_2012_guest_best_practices

提示

下载示例代码

您可以从 www.packtpub.com 登录您的账户,下载本书的示例代码文件。如果您在其他地方购买了本书,可以访问 www.packtpub.com/support 并注册以直接通过电子邮件获取文件。

您可以按照以下步骤下载代码文件:

  1. 使用您的电子邮件地址和密码登录或注册我们的网站。

  2. 将鼠标指针悬停在顶部的 支持 标签上。

  3. 点击 代码下载与勘误

  4. 搜索 框中输入书名。

  5. 选择您想要下载代码文件的书籍。

  6. 从下拉菜单中选择您购买本书的地方。

  7. 点击 代码下载

提示

文件下载完成后,请确保使用最新版本的以下工具解压或提取文件夹:

  • WinRAR / 7-Zip for Windows

  • Zipeg / iZip / UnRarX for Mac

  • 7-Zip / PeaZip for Linux

启动虚拟机并安装 Windows Server

在虚拟机配置好并可供使用后,在 web 界面的左上方的 服务器视图 中选择它。启动虚拟机就像之前描述的那样,简单地按下右侧面板上显示的启动按钮。

当虚拟机启动时,它的图标将从带黑屏的显示器变为带白屏的显示器。

要通过 noVNC 访问虚拟机的显示,点击 控制台 按钮;一个弹窗将会出现,允许您观看虚拟机从 Windows Server 2012r2 安装盘启动,并最终显示 Windows 设置 向导:

启动虚拟机并安装 Windows Server

按照屏幕上的指示完成 Windows Server 2012r2 的安装和配置。

提示

支持安装此操作系统的资料可以在technet.microsoft.com/en-us/library/jj134246.aspx查看。

一旦 Windows 安装对话框完成,安装将继续,机器将重启几次,直到准备好供用户登录。登录到服务器查看新的桌面。

启动虚拟机并安装 Windows Server

请注意,前面两张截图都有两个鼠标指针。一个是本地工作站的,另一个是通过 noVNC 访问的桌面的。这种情况比较尴尬且笨重。

提示

noVNC

noVNC 这个名字有些反直觉;事实上,noVNC 通过 VNC 协议提供远程桌面访问和桌面共享。

然而,noVNC 确实有所不同;它并不像通过配置客户端连接到运行 VNC 服务器的远程计算机,而是选择 noVNC 后,通过支持 HTML5 和 JavaScript 的浏览器弹出一个窗口,渲染由虚拟机提供的远程桌面。

有一个简单的解决方案,如果尚未启用,可以在虚拟机的选项标签中启用使用平板电脑作为指针

启动虚拟机并安装 Windows Server

如果这样无法解决问题,请确保硬件标签上的显示字段设置为默认,而不是SPICE

创建 Fedora 23 服务器虚拟机

在前面的章节中,我们详细介绍了用于 Windows Server 2012r2 的虚拟机配置。在本节中,我们将在之前的经验基础上,运用所学知识来构建一台运行 Fedora 23(服务器版)的服务器。创建这个虚拟机提供了一种简单的方式来练习使用虚拟网络接口卡和虚拟硬盘接口的准虚拟化。

  1. www.tecmint.com/installation-of-fedora-23-server-and-administration-with-cockpit-tool/查看 Fedora 23 服务器的安装过程。

  2. mirrors.rit.edu/fedora/fedora/linux/releases/23/Server/x86_64/iso/Fedora-Server-netinst-x86_64-23.iso下载 netinst ISO 文件。创建 Fedora 23 服务器虚拟机

    下载 Fedora 23 的网络安装镜像

  3. 登录 PVE 的 Web 界面。

  4. 如前所述,将镜像上传到 PVE 的本地存储。

  5. 点击创建虚拟机,就像我们为 Windows Server 2012r2 所做的那样。

  6. 创建虚拟机对话框的常规标签页中,给虚拟机取一个合适的名字;在以下截图中,使用了fedora-ch4,虚拟机被分配了 VM ID 101。接着进入操作系统标签页。创建 Fedora 23 服务器虚拟机

  7. 操作系统选项卡中,有四个选项不是针对 Microsoft Windows 的;对于 Fedora 23,选择Linux 4.X/3.X/2.6 内核(I26)单选按钮,然后继续进入CD/DVD选项卡。创建 Fedora 23 Server 虚拟机

  8. CD/DVD选项卡中选择第一个选项,选择使用 CD/DVD 光盘镜像文件(iso)单选按钮;在存储字段中选择本地,然后从ISO 镜像下拉菜单中选择在第 4 步上传的镜像文件:创建 Fedora 23 Server 虚拟机

    CD/DVD选项卡上选择 Fedora 安装磁盘

    进入硬盘选项卡,配置 Fedora Server 虚拟机的虚拟硬盘。

  9. 在这台虚拟机上,我们将依赖半虚拟化来提高效率。在硬盘选项卡中,从总线/设备下拉菜单中选择VIRTIO。请注意,在下图中,磁盘大小字段已从默认的 32 GB 更改为 64 GB;请根据需要选择磁盘大小。完成后,继续进入CPU选项卡。创建 Fedora 23 Server 虚拟机

    配置虚拟磁盘

  10. 我们将按照前面部分中创建 Windows Server 2012r2 虚拟机时的配置方式来配置CPU选项卡:分配 1 个插槽和 2 个核心,并在类型下拉菜单中选择默认(KVM64)。当CPU选项卡配置完成后,继续进入内存选项卡为虚拟机分配 RAM。

  11. 内存选项卡中根据需要调整。在下面的截图中,指定了一个固定大小的 1024 MB 内存。分配好内存后,继续进入网络选项卡。创建 Fedora 23 Server 虚拟机

    在内存选项卡中为 Fedora 虚拟机分配 RAM

  12. 在网络选项卡中,我们将配置 Fedora,使其可以被物理网络上的其他机器访问;就像我们为 Microsoft Server 所做的那样,选择桥接模式单选按钮。如果您的 PVE 主机只有一个网络接口,将桥接下拉菜单设置为vmbr0;否则,请根据需要选择一个适当的桥接。

    然后,在网络选项卡的右侧列中,选择VirtIO(半虚拟化)作为虚拟网络接口的模型。回顾一下,Intel E1000是我们最兼容的选择,而virtio则是性能最好的替代选项;这两者都被 Fedora Server 原生支持。

    创建 Fedora 23 Server 虚拟机

    在网络选项卡中配置桥接模式网络

    进入确认选项卡并提交虚拟机配置;在构建虚拟机之前,这是一个对配置进行自定义更改的好机会。

    提示

    请记住,在整个过程中,除了虚拟硬盘的情况,其他所有分配的资源都可以稍后轻松更改。

  13. 点击完成来创建虚拟机并关闭创建:虚拟机对话框。

    我们在上一节配置的 Windows Server 机器中使用了默认的显示选项。这是一个与 PVE 的 noVNC 控制台底层技术兼容的绝佳选项。

    但是,通过在 Windows Server 上安装额外的软件,我们本可以依赖 SPICE 来完成。

    提示

    SPICE

    此选项在菜单中显示为SPICE(简单协议用于独立计算环境),但它指的是所依赖的 SPICE 协议,或者是依赖于一组 SPICE 组件的组合,包括安装在虚拟机上的客户工具以及安装在工作站上的 SPICE 客户端。我们可以从中推断出,使用 SPICE 需要一些安装后的工作。SPICE 是唯一一个明确使命是提供远程访问虚拟机的解决方案。此外,SPICE 客户端可用于移动设备和多个操作系统,并且该协议提供了许多实现和使用的选项。红帽是这一开源解决方案的当前开发者,并且它在其 KVM-QEMU 虚拟化平台中大力推广该解决方案。然而,spice-module 也集成到 Proxmox VE 中,用于与其自己的 KVM-QEMU 虚拟机一起使用。由于 Fedora Server 包含支持 SPICE 显示的相关软件,接下来我们来看看为此做准备的步骤。

  14. 当 Fedora Server 虚拟机仍然处于停止状态时,选择它的硬件选项卡。

  15. 双击显示配置;编辑:显示对话框会打开,显示一个名为显卡的下拉菜单。将选择从默认更改为SPICE,然后点击确定按钮:为 Fedora 23 服务器创建虚拟机

    配置虚拟机以便使用 SPICE 控制台

    当你准备好安装 Fedora 23 Server 时,选择浏览器窗口左侧窗格中的虚拟机。

  16. 选择后,启动虚拟机。点击控制台按钮旁边的箭头,以显示在 noVNC 和 SPICE 控制台之间的选择。为 Fedora 23 服务器创建虚拟机

    选择 SPICE 控制台以访问正在运行的虚拟机

  17. 选择SPICE以启动弹出控制台浏览器窗口。

为 Fedora 23 服务器创建虚拟机

启动 Fedora 23 安装程序,使用 SPICE 控制台在虚拟机上进行安装

通过按 i 键或使用键盘上的上下光标键导航到安装 Fedora 23来继续安装。

大约 20 秒后,Fedora 23 的图形安装程序将开始询问配置问题,从选择安装语言开始,然后进入网络配置和主机名设置。最终,系统还会要求你设置 root 用户的密码并创建其他账户。

提示

如果你对新 Fedora 23 虚拟机的网络配置有疑问,请参阅Fedora 23 网络指南docs.fedoraproject.org/en-US/Fedora/23/pdf/Networking_Guide/Fedora-23-Networking_Guide-en-US.pdf

按照屏幕上的指示完成 Fedora 23 的安装。安装所需的时间取决于你分配的资源、网络连接的速度,以及你在初始 Fedora 23 配置过程中选择安装的包。

小贴士

Fedora 23 Server 安装的支持

可以在getfedora.org/en/server/找到 Fedora 23 Server 的功能。

官方 Fedora 23 Server 安装指南请访问docs.fedoraproject.org/en-US/Fedora/23/html/Installation_Guide/

有关安装后的建议,请访问www.tecmint.com/things-to-do-after-fedora-23-installation/

命令行虚拟机创建

我们可以使用qm创建命令通过命令行创建 Proxmox VE 虚拟机。这对于命令行用户和寻求编写自动化解决方案的用户来说是一个福音。

以下 bash 脚本创建了一个虚拟机来运行 Fedora 23 Server:

    #!/bin/bash -ex
    # Creates a VM intended for Fedora 23 Server
     qm create 103 \
         -balloon 512 \
         -bootdisk virtio0 \
         -cores 2 \
         -ide2 local:iso/Fedora-Server-netinst-x86_64-23.iso,media=cdrom \
         -memory 1024 \
         -name fedora-server-ch4 \
         -net0 virtio,bridge=vmbr0 \
         -numa 0 \
         -ostype l26 \
         -sockets 1 \
         -virtio0 local:101/vm-101-disk-1.qcow2,size=32G \
         -vga qxl

小贴士

请参阅pve.proxmox.com/wiki/Manual:_qm了解更多关于如何通过 Proxmox VE 命令行界面创建虚拟机的信息。

概述

对于精明的管理员而言,在生产环境中将容器与虚拟机结合使用的能力提供了灵活性,并增加了职业判断和明智选择的机会。系统虚拟化在数据中心仍然具有很大的价值。

因此,我们以 Proxmox VE 的虚拟机创建和配置过程的高级概述开始了本章内容——从获取安装介质,到配置虚拟机,再到安装操作系统。

此后,我们将该抽象大纲应用于两个具体案例:创建 Microsoft Windows Server 2012r2 和 Fedora 23 Server 虚拟机。

在第五章《使用虚拟驱动器》中,你将学习到所有必要的知识,以便在确定最适合我们虚拟硬盘的格式时做出明智的选择。

我们将特别关注如何在新的 Proxmox 虚拟环境中使用 Oracle 的 VirtualBox、VMware Player 和 VMware Workstation 创建的虚拟机。

在将某些本不为我们的场景设计的东西重新利用时,总会有一种满足感。

让我们接下来体验一下这种兴奋感。

第五章:使用虚拟磁盘

第四章,创建虚拟机,介绍了使用 Proxmox VE 管理界面和命令行创建虚拟机的方法。在概述了常见的操作步骤后,我们迅速浏览了如何创建两台运行不同网络操作系统的虚拟机:Windows Server 2012r2Fedora 23 Server

本章的最基本目标是使我们能够根据虚拟机的具体使用案例,做出更多信息充分且经过深思熟虑的决策,从而影响 Proxmox VE 虚拟机客户机的效率和可靠性。

我们将通过实现以下具体目标来完成这一任务:

  • 从 Proxmox VE 界面中可用的虚拟磁盘映像格式中,故意选择合适的格式

  • 选择虚拟磁盘连接到来宾的合适总线/接口

  • 根据我们的使用案例选择合适的缓存设置

在本章中,我们将详细介绍一个关键的虚拟机组件,它可能是最有价值的:提供二级存储虚拟磁盘

然后,我们将回顾虚拟机创建过程,详细阐述在第四章,创建虚拟机中略过的具体选项:

  • 选择虚拟磁盘格式

  • 选择接口

  • 选择缓存选项

理解虚拟磁盘

本节首先关注我们应该熟悉的术语,以便进一步理解虚拟磁盘。

在我们达成术语共识后,将探讨在第四章,创建虚拟机 中看到但没有深入探讨的虚拟磁盘配置选项:虚拟磁盘映像格式、总线/接口选项和磁盘缓存选项。

理解术语

二级存储对虚拟机的作用与对物理计算机的重要性一样。虽然硬盘驱动器HDDs)在个人电脑中并不是最昂贵的硬件,但我们可以有力地论证,硬盘是最有价值的硬件,因为我们依赖它们来存储和提供对我们数据的访问,而这些数据往往是我们辛勤工作所收获的独特成果。

本章中,“虚拟磁盘”一词将指代一个文件或一组文件,这些文件对虚拟机来说代表一个硬盘驱动器,并且行为方式与物理计算机上的硬盘驱动器或固态硬盘SSD)相同。

物理硬盘驱动器和虚拟磁盘之间的相似性如下,正如你可能预料的那样:

  • 相同的文件系统选项

  • 管理员需要对分区和分区表有相同的深入理解,并能熟练使用与物理机器上相同的分区编辑工具

  • 相同的格式化程序和选项

  • 支持 LVM

然而,必须明确指出显著的差异。物理硬盘驱动器单元不仅仅包括存储数据的介质。

HDD 的介质部分由一叠双面物理盘片组成,这些盘片围绕一个公共主轴在真空密封结构内旋转。

真空密封内还包含读取和写入盘片数据的物理机械装置。它包括一个机械臂,用于将读/写头移动到盘片的特定位置。

虚拟磁盘具有存储容量,并且可以像硬盘一样进行读写;然而,介质仅仅是主机上的一个文件或一系列文件,这些文件使用与 Proxmox VE 兼容的三种磁盘映像格式之一:QCOW2RAWVMDK

提示

当使用 iSCSI 共享存储时,提供了第四种选择:作为 LVM 分区的 RAW 格式。在本节中,我们仅讨论 RAW、qcow2 和 VMDK 映像。

如你稍后将学到的那样,Proxmox VE 管理界面明确支持的三种虚拟磁盘映像格式各自提供了略有不同的优缺点。对我们而言,这提供了更大的灵活性。

例如,除了管理员用于确保主机和客户数据安全完整性的备份方法外,备份或快照一个或多个虚拟机的状态也可以是一个简单的操作。将映像恢复到先前的状态也同样简单。

虚拟磁盘和硬盘驱动器之间的另一个区别在于总线,即主板与磁盘之间的接口,它是物理地集成在硬盘单元中的。

在 Proxmox VE 虚拟机上,这一过程处理得非常不同,你可以根据对特定虚拟机的偏好选择用于与虚拟磁盘通信的总线类型。

因此,总线根本不属于虚拟磁盘映像的一部分;它是虚拟机配置的一部分。在 Proxmox VE 中,可以通过一个简单的下拉框选择总线类型。

物理硬盘驱动器的另一个子组件——缓存子系统(或更准确地说,磁盘缓冲区)在虚拟磁盘中没有表现出来。缓存旨在加速数据的检索,它与总线接口一样,构成了虚拟机配置的一部分,而不是虚拟磁盘的一部分。

来理解这些术语

可视化带有 SATA 接口和磁盘缓冲区的硬盘控制板

在这一节中,我们确定了虚拟磁盘将用于描述作为虚拟机二级存储设备的文件或文件组。此外,我们阐明了物理硬盘和虚拟硬盘之间的相似性。然后,我们对比了硬盘驱动器的物理组件以及 Proxmox VE 如何通过虚拟化抽象这些组件。

Proxmox VE 的配置过程完全将存储介质与总线和磁盘缓存或磁盘缓冲区分离,这让我们可以更慎重地选择虚拟磁盘镜像格式、总线和缓存的组合。

剩下的子部分阐明了我们通过 Proxmox VE 可以选择的每种镜像格式、总线选项和磁盘缓存选项的特点。

理解虚拟磁盘配置

回顾一下第四章,创建虚拟机中提到,我们通过点击页面顶部的 创建虚拟机 按钮,并逐步完成新虚拟机的配置选项,从 Proxmox VE 界面创建了新虚拟机。

关于配置对话框中的第四个标签,硬盘,第四章,创建虚拟机将其关注点限制为定义虚拟磁盘的大小。

理解虚拟磁盘配置

创建虚拟机对话框中的硬盘标签

在本节中,我们详细说明了可以通过 硬盘 标签定义的三个额外特性:

  • 虚拟磁盘格式

  • 总线/设备(接口)

  • 缓存(磁盘缓冲区)

每种配置选项至少有三个可用的选择,让我们来探讨一下你的选择如何影响性能和功能。

选择虚拟磁盘格式

根据《精通 Proxmox》,Proxmox VE 优选的虚拟磁盘镜像格式是 RAW。然而,它也支持 KVM 的 qcow2 格式以及与 VMware 产品常见的 VMDK 镜像。

选择虚拟磁盘格式

提示

要了解更多关于镜像格式及其操作的信息,请访问 en.wikibooks.org/wiki/QEMU/Images

QCOW2

QCOW2 是 QEMU 写时复制(copy-on-write)镜像格式的第二个版本。由于 Proxmox VE 依赖 KVM-QEMU 提供虚拟机功能,QCOW2 是其原生和默认格式。

正如其名称所示,这种格式支持 写时复制。这一特性允许虚拟机将对基础镜像所做的更改存储在一个单独的 QCOW2 文件中。新 QCOW2 文件的元数据(关于数据的数据)包括例如指向基础镜像的路径。

当虚拟机试图检索数据时,它首先检查新镜像中是否能够找到特定的数据;如果新镜像中没有该数据,它将从元数据所指向的基础镜像中检索该数据。

注意

要了解更多关于 QCOW2 镜像结构的信息,请访问 people.gnome.org/~markmc/qcow-image-format.html

QCOW2 镜像还会根据需要增长(精简配置),这一特点使其与 RAW 镜像区分开来,后者在创建时会立即为所请求的所有空间分配文件(厚配置)。

因此,尽管主机的文件系统不支持稀疏文件,QCOW2 图像在几乎所有情况下都会比 RAW 图像小。然而,由于 RAW 图像不需要随着数据写入而增长,并且不依赖于中介软件层,它将具有更好的吞吐量。

然而,我们应该注意到,如果 PVE 拥有大量高速内存,并且运行在最新的 SSD 驱动器上而不是传统硬盘上,那么 RAW 图像与 QCOW2 图像之间的吞吐量差异将不太明显。在我们继续探索图像类型时,请记住,随着硬件价格的不断下降,新硬件可能对性能产生的影响。

注意

稀疏文件是指当文件大部分为空时,尝试更高效地利用文件系统空间的文件。通过将表示空块的元数据写入磁盘,而不是写入实际空白空间来实现这一点,从而减少了磁盘空间的使用。只有当块包含实际数据时,才会以其实际大小将完整的块大小写入磁盘(en.wikipedia.org/wiki/Sparse_file)。要查看支持稀疏文件的文件系统列表,请访问 en.wikipedia.org/wiki/Comparison_of_file_systems#Allocation_and_layout_policies

QCOW2 的快照和临时快照支持允许图像包含来自图像历史中多个时刻的多个快照。

临时快照会存储更改,直到虚拟机关闭,此时快照将被丢弃。与此相比,标准快照允许我们返回图像历史中的先前状态。

注意

要了解更多关于 Proxmox VE 中 QCOW2 快照的内容,请访问他们的 Wiki 页面:pve.proxmox.com/wiki/Live_Snapshots。有关 QCOW2 快照支持背后的机制的更多信息,请访问 kashyapc.fedorapeople.org/virt/lc-2012/snapshots-handout.html

RAW

RAW 和 QCOW2 是在 Proxmox VE 论坛中讨论的最受支持的两种格式。

与 QCOW2 和 VMDK 图像相比,RAW 虚拟磁盘相对简单;并且与 Proxmox VE 支持的其他格式不同,RAW 不依赖于中介软件层。

因此,RAW 是一个更高效的选项,特别是在虚拟机性能至关重要时,应该给予充分考虑——特别是在 LVM 上使用 RAW。

此外,RAW 图像可以直接并简便地挂载到 Proxmox VE 主机上进行直接操作,而无需通过来宾访问。

提示

挂载 RAW 文件为了完成此过程,建议访问equivocation.org/node/107forensicswiki.org/wiki/Mounting_Disk_Images#To_mount_a_disk_image_on_Linux;这两个页面都建议使用kpartx工具,该工具在 Debian 默认仓库中可用。

然而,与 QCOW2 映像不同,RAW 映像的功能较为简单;没有固有的快照支持,没有薄配置,等等。它们由原始数据组成,逐扇区构建,直到达到其固定容量。

性能,因此,RAW 映像作为虚拟磁盘的真正优势;如果你依赖的是机械硬盘而非固态硬盘,并且可靠、迅捷的性能至关重要,例如在数据库服务器中,那么请选择 RAW,并放弃 QCOW2 提供的丰富功能集。

尽管为积累虚拟机客户预分配存储可能对资源造成不必要的压力,但请记住,RAW 虚拟磁盘也可以调整大小。

与 QCOW2 类似,只有部分调整大小过程可以通过 Proxmox VE 管理界面完成。

注意

调整 RAW 和 QCOW2 映像大小的过程已在 Proxmox VE wiki 页面上记录,网址为pve.proxmox.com/wiki/Resizing_disks#Enlarge_the_virtual_disk.28s.29_in_Proxmox

VMDK

虚拟机磁盘VMDK)是 VMware 虚拟化产品首选的虚拟磁盘格式。尽管如此,该格式随后被开放给其他开发者和供应商,并且已成为一个广泛支持的流行虚拟磁盘格式。

尽管 KVM-QEMU 目前支持该格式的 3、4 和 6 版本,并且 Proxmox VE 可以创建带有 VMDK 映像的虚拟机,但建议 PVE 用户在条件允许的情况下依赖 QEMU 原生格式——QCOW2 和 RAW。

然而,实际上,情况并不总是理想的;所以在我们讨论总线类型之前,让我们先触及几个与 VMDK 虚拟磁盘相关的要点。

与 QCOW2 一样,VMDK 是一种复杂的格式,具有丰富的功能集(事实上,它有四种子格式)。

例如,VMDK 格式支持薄配置和厚配置。薄 VMDK 映像,与其 QCOW2 对应物一样,比预分配的或厚配置的 VMDK 映像更慢。正如我们所料,它们显著更小。

同样,VMDK 和 QCOW2 格式都支持多个快照,使管理员能够将虚拟机恢复到先前的状态。

尽管该格式功能丰富,但 Proxmox VE 界面并未支持其所有功能,即使底层虚拟化层能够处理它们。

例如,VMDK 格式包括一个子格式,将虚拟磁盘分割成 2GB 的块,本质上是为了支持移动性。Proxmox VE 不支持该子格式。

尽管 Proxmox VE 确实邀请我们使用 VMDK 镜像创建虚拟机,但尽可能依赖于 QCOW2 和 RAW 虚拟磁盘格式:

  • 假设你的 PVE 是基于传统硬盘驱动器构建的,RAW 格式对于数据库应用程序来说是理想的选择,因为它具有性能优势。

  • QCOW2 提供了一个非常强大的功能集,但如果不依赖于 SSD 存储,它可能会以牺牲性能为代价。此外,QCOW2 在使用硬件资源方面更加保守。

如果你继承了一个 VMDK 格式的虚拟磁盘,可以使用 qemu-img 命令将其转换为 QCOW2 或 RAW 格式。

另一方面,如果你正在创建一个 Proxmox VE,VMDK 格式的使用应仅限于非常特定和有目的的边缘情况。

提示

qemu-img 命令的完整文档可以在网上查阅,网址为 www.suse.com/documentation/sles11/book_kvm/data/cha_qemu_guest_inst_qemu-img.html(SUSE)和 docs.fedoraproject.org/en-US/Fedora/18/html/Virtualization_Administration_Guide/sect-Virtualization-Tips_and_tricks-Using_qemu_img.html(Fedora)。简洁但全面的 GNU/Linux 主页面可以在 linux.die.net/man/1/qemu-img 查阅。

选择一个总线

除了 格式 选项外,创建虚拟机 对话框的 硬盘 标签还提供了一个下拉菜单,供你选择与虚拟磁盘接口的 总线/设备

如图所示,提供了四个选项:

  • IDE

  • SATA

  • VIRTIO

  • SCSI

选择一个总线

总线/设备选项

注意

请注意,除了 I/O 性能外,虚拟的 SATA、IDE 和 SCSI 总线的特性将与它们的物理对应物相同。有关每个总线的详细信息,请访问 Wikipedia:SATAen.wikipedia.org/wiki/Serial_ATA IDE/PATAen.wikipedia.org/wiki/Parallel_ATA SCSIen.wikipedia.org/wiki/SCSI

在四个选项中,有两个是作为对遗留系统兼容性的便利支持:IDESCSI。(因此,IDE 是对话框的默认选项。)

SATA 选项更为常用,其行为符合 SATA 接口的预期——但有一个重要的例外:SATA 选项并不会提供比 IDE 更高的性能。

在这种情况下,I/O 性能几乎完全取决于主机的硬件配置。虚拟机的读写速度将无法超出物理硬件允许的范围。

由于无法克服主机硬件 I/O 性能的限制,KVM-QEMU 解决的是虚拟化过程中的开销,这是影响性能的另一个因素。

KVM-QEMU 提供了一种名为 virtio 的 paravirtualization 解决方案,使客户机和虚拟机监控器能够在没有虚拟化开销的情况下更加协同和高效地工作。

注意

Paravirtualization 是指那些知道自己运行在虚拟机中的软件组件。在我们的案例中,KVM-QEMU 虚拟机的 virtio 驱动程序会直接与 Proxmox VE 主机通信。

典型的 paravirtualized 驱动程序,virtio 驱动程序经过优化,能够与 Proxmox VE 共享队列、缓冲区和其他数据,从而提高吞吐量并减少延迟(vTerminology: 关键虚拟化术语指南可参见 www.globalknowledge.com)。

我们将在 第六章,与 Proxmox VE 的网络 章节中再次讨论 virtio 驱动程序在网络接口中的应用。

这个解决方案,VIRTIO,是唯一会影响虚拟机 I/O 性能的 总线/设备 选项。

要利用客户机的 virtio 设备,必须为客户机操作系统提供驱动程序。正如 Proxmox VE 的 Wiki 页面所指出的那样,最近的 Linux 内核已经包含了 virtio 驱动程序;因此,任何运行在 Proxmox VE 虚拟机上的现代 GNU/Linux 发行版“应该能够识别由 KVM 虚拟机监控器暴露的 virtio 设备”(pve.proxmox.com/wiki/Windows_VirtIO_Drivers)。

因此,运行 GNU/Linux 的虚拟机客户机无需任何额外的显式配置步骤。

运行微软 Windows 操作系统的虚拟机客户机需要安装签名驱动程序,才能识别 virtio 设备。如你所料,这里有个问题,因为操作系统安装过程需要设备驱动程序才能识别并安装到虚拟磁盘。

我们可以采用多种策略来克服这个问题。

提示

有关微软操作系统和 virtio 设备的更多信息,请访问 pve.proxmox.com/wiki/Windows_VirtIO_Drivers

本小节重点强调了由 KVM-QEMU 提供的 virtio paravirtualization 所带来的性能提升。

总结来说,我们唯一不应该使用 virtio paravirtualization 的情况是当目标操作系统没有相应的驱动程序时。由于 virtio 可以显著提高 I/O 吞吐量,并减轻与完全虚拟化相关的一些开销,因此只要现实可行,我们应该在任何时候依赖 virtio。

然而,我们需要记住,IDE 和 SCSI 也是可行的总线替代方案,但主要是为了兼容性和灵活性,提供给旧设备使用。SATA 目前已经具有显著的流通性,因此如果环境不允许你利用 virtio 解决方案,它仍然是一个可行的替代方案。

提示

还有一种情况是 virtio 准虚拟化不可行:当虚拟机从物理机器转换过来,需要安装驱动程序后才能重启并依赖 virtio。

下一小节将重点介绍可用于 Proxmox VE 虚拟机的五种磁盘缓存/缓冲选项。

理解缓存选项

硬盘选项卡中的创建:虚拟机对话框包含一个标有缓存的字段,该字段接受五个不同的值:

  • 默认(无缓存)

  • 直接同步

  • 写穿

  • 回写

  • 回写(不安全)

本质上,所选设置决定了如何处理硬盘缓冲区的抽象。使用 Proxmox VE 时,缓存的选择已被证明对 I/O 性能有显著影响。

理解缓存选项

Proxmox VE 缓存选项

在阐明磁盘缓冲区功能的基础上,本节将简要探讨优化虚拟机性能的建议。

在物理硬盘上,磁盘缓冲区是位于真空密封硬盘外壳之外、控制板上的一种内存。现代硬盘驱动器的磁盘缓冲区在 16MB 到 128MB 之间。(以目前市场上的硬盘为例,Western Digital 的 Black 系列硬盘具有 32MB 或 64MB 的缓存,具体取决于型号。)

这个缓存的作用主要是按顺序执行磁盘写入,以达到最佳性能,并以战略性的方式管理和执行来自客户端(如 CPU 或操作系统)的读请求。

换句话说,当我们记住将物理硬盘连接到主板的总线速度与硬盘盘片的旋转速度以及读/写磁头的机械运动速度通常不同的时候,缓冲区会在数据从磁盘读取后先将其存储,再发送到客户端;它同样将待写入磁盘的数据存储起来,直到实际的磁盘写入操作能够执行。数据的组织工作由缓冲区和硬盘的处理器负责,以便数据能够尽可能高效地到达目标。

尽管这个解释可能是准确的,但它缺乏具体性。《Linux 系统管理员指南》提供了更具体的解释(www.tldp.org/LDP/sag/html/buffer-cache.html):

从磁盘读取非常缓慢,相较于访问(真实)内存。此外,通常在相对较短的时间内多次读取磁盘的同一部分。例如,一个人可能首先读取一封电子邮件,然后在回复时将信件读取到编辑器中,再在将其复制到文件夹时让邮件程序再次读取它。或者,考虑到在有多个用户的系统上,命令 ls 可能会被频繁运行。通过只从磁盘读取信息一次,然后将其保存在内存中直到不再需要,就可以加速除了第一次读取之外的所有操作。这被称为磁盘缓冲,所使用的内存称为缓冲缓存。

我们必须从五种缓存选项中选择,以定义 Proxmox VE 虚拟机:默认选项是无缓存。以下是可用的替代选项:

  • 直接同步

  • 写透

  • 回写

  • 回写(不安全)

注意

simple.wikipedia.org/wiki/Cache#Caches_for_writing提供了关于写入缓存(write-through)和回写缓存(write-back)之间非常清晰、简洁的一般性区分。

提示

回写是 KVM-QEMU 的默认模式;注意,Proxmox VE 的默认模式则是无缓存

尽管这些资源按相关性从最到最不相关的顺序排列,但每个资源都提供了有帮助的视角,并且正是因为我们依赖这三者中的所有内容,才能开始构思每种模式的使用案例。以下列表提供了描述这些模式的资源。

为了评估性能,我们需要一致的案例或对每种缓存模式、总线和虚拟磁盘格式组合的结构化性能比较。

网上发布的最全面且视觉效果最强的结果可以在jrs-s.net/2013/05/17/kvm-io-benchmarking/(由 Jim Salter,2013 年)和www.ilsistemista.net/index.php/virtualization/11-kvm-io-slowness-on-rhel-6.html(由 Ginatan Dante,2011 年)中找到。

提示

具体针对 Proxmox VE 的额外基准测试结果发布在i51.tinypic.com/158bcl4.gif;然而,结果发布时没有提供方法论、版本、日期或来源信息。

这些 2011 年和 2013 年的研究中提供的基准测试结果是一个有益的起点,但与 KVM 最佳实践声明有显著冲突。

这些研究结果有时会产生共鸣,但也可能与 Proxmox VE 或 KVM 的最佳 I/O 性能建议和网络上的推荐相冲突。

  • 前述研究支持在有可能的情况下,选择 virtio 虚拟化总线作为首选总线,只要为客户操作系统提供了驱动程序。

  • 通常,缓存会增加冗余数据和总线流量,最终会对性能产生负面影响。为了获得最佳效果,对于 RAW 镜像请选择无缓存,并避免使用DirectsyncWrite Through缓存选项,尤其是在使用 ZFS 文件系统和 RAID 阵列作为主要存储时,除非在特殊情况下。

  • RAW 格式在 Proxmox VE 中的三种格式中被广泛认为提供最佳性能;然而,这要以 QCOW2 镜像所提供的丰富功能为代价。应当权衡功能集的优势与 RAW 性能之间的关系,特别是在选择无缓存并结合VIRTIO的情况下。如果你依赖于固态存储,RAW 和 QCOW2 之间的性能差异大部分将变得不可察觉。

  • 来自 Proxmox VE 用户社区的共识是,在 Proxmox VE 中使用 VMDK 磁盘镜像创建虚拟机没有实际的好处。

小贴士

Proxmox VE 和 KVM-QEMU 最佳实践资源

pve.proxmox.com/wiki/Performance_Tweaks

www.ilsistemista.net/index.php/virtualization/23-kvm-storage-performance-and-cache-settings-on-red-hat-enterprise-linux-62.html?start=2

www.linux-kvm.org/page/Tuning_KVM

本节的结束标志着我们达成了几个目标,这些目标是章节开头提出的:

  • 我们有资源做出关于 Proxmox VE 虚拟机客户机的适当总线/接口选择。

  • 我们现在可以通过 Proxmox VE 界面从可用的虚拟磁盘镜像格式中有意识地选择,并在需要时进一步寻求支持。

了解更多

如果本章传达了任何明确的信息,那就是:优化 Proxmox VE 中虚拟机的 I/O 性能需要仔细考虑并组合三大组件,每个组件都有丰富的选项——将虚拟机调整为最佳性能,并具备你需要的功能是一个复杂的平衡工作。

因此,这里提供了一些有用的资源列表,以便我们每个人都可以根据具体需求获取更多的信息。前两本资源书籍有丰富的虚拟磁盘章节。第三本书籍是正在进行中的工作,专门致力于虚拟磁盘文档:

总结

本章的目的是在 Proxmox VE 虚拟机客户机的背景下理解虚拟磁盘(本章没有涉及与容器客户机相关的内容)。

通过专注于 Proxmox VE 及其底层虚拟化技术如何处理物理硬盘驱动器组件的抽象:存储介质、总线接口和磁盘缓冲区,我们完成了一项艰难的任务。

在我们的工作过程中,我们努力理解并能够清晰表达出,在确定磁盘格式、总线和磁盘缓冲区偏好时,我们所做的选择如何显著影响特性和 I/O 性能。

从最基本的层面来看,我们认识到,虚拟机的 I/O 能力不会超过物理主机硬件所允许的能力。然而,你也学到了,通过依赖半虚拟化驱动程序,你可以最小化虚拟化对 I/O 性能的开销。

总结来说,你了解到我们关于虚拟磁盘配置的决策,取决于我们如何回答一些基本问题:

  • 你目前已有的哪些硬件会影响 I/O 性能?

  • 虚拟机所服务的应用程序和/或数据库的性能需求是什么?

  • 你应该利用虚拟磁盘格式的哪些特性?哪些冗余特性可以通过你数据中心的其他技术来提供?

  • 操作系统和应用程序和/或数据库的容量需求是什么?

  • 管理员已经熟悉并愿意支持哪些方面的文件系统、虚拟化一般知识和虚拟磁盘特别知识?

  • 关于文件系统和总线驱动程序,操作系统有哪些关注点和要求?

在下一章,我们将继续基于你在第四章,创建虚拟机 中学到的内容,重点讲解 Proxmox VE 网络模型的创建。为此,我们将依赖之前学到的 TCP/IP 局域网网络、交换机和子网的知识。

它将是我们向理解 Proxmox VE 和虚拟化安全过渡的一个重要章节。

让我们连接节点,搭建桥梁吧!

第六章:与 Proxmox VE 的网络配置

在第五章《管理虚拟磁盘》中,我们讨论了虚拟化中最灵活、也是最复杂的组件之一:二级存储。它的灵活性和相应的复杂性来自于我们对性能的关注,并调整 I/O 吞吐量,以便在这种虚拟化方式带来的开销面前尽可能做到最好。

本章同样关注优化 I/O 吞吐量的另一个机会:虚拟机的 vNIC 配置

由于 vNIC 优化涉及协调较少的活动部件,我们将利用这个机会在更广泛的背景下讨论 Proxmox VE 的网络配置——不仅限于虚拟机的优化,还包括包含 Proxmox VE 来宾和主机的网络设计。

在整个过程中,我们将(努力)保持一致的焦点,集中讨论 Proxmox VE 的网络模型以及该模型为我们打开的各种可能性。我们将详细讨论这一主题,以激发企业网络部署的可能性。同时,我们将演示一些在小型办公室环境中更符合我们硬件的配置。

我们将按以下方式进行:

  • Proxmox VE 网络模型

  • 配置虚拟机来宾

Proxmox VE 网络模型

本节提供 Proxmox VE 网络模型的高级概述。它涵盖了与 Proxmox VE 来宾和主机相关的主题。

在 Proxmox VE 4.0 中,支持两种基本的来宾网络配置:

  • 桥接

  • 使用 NAT 进行伪装

以下小节对比了这两种配置模型,并为每种模型建立了有效、合理的使用案例。

剩余的小节将讨论 Proxmox VE 主机配置相关的问题:

  • 路由配置

  • VLAN 支持

  • NIC 绑定

桥接配置

桥接网络将 Proxmox VE 来宾与主机的以太网适配器连接到网络。

桥接配置

可视化桥接配置

配备桥接连接的虚拟机和容器表现得就像它们连接到物理网络一样。事实上,每个虚拟服务器都有一个虚拟 NIC(或 vNIC),它以独特的 MAC 地址(媒体访问控制地址)和与物理网络一致的 IP 地址出现在网络中。

这是 Proxmox VE 虚拟服务器的默认网络配置。

如前所述,思考桥接连接时,可以将其类比为将物理机器连接到简单的网络交换机。

在《Mastering Proxmox》中,两个对比图帮助说明桥接网络如何提供一种替代传统基础设施(没有虚拟化)的方式。首先,让我们看一下传统的校园基础设施:

桥接配置

可视化传统校园基础设施

下一个图示,同样来自 Mastering Proxmox,展示了一个带有虚拟化网络基础设施的校园:

桥接配置

使用 Proxmox VE 虚拟化网络基础设施可视化相同的校园场景

NAT 配置

在某些情况下,您可能希望隐藏虚拟服务器,将其置于 PVE 主机的真实 IP 地址后,并使用网络地址转换NAT)来伪装流量。

在这种情况下,虚拟机或容器可以完全访问网络资源,但不能直接从外部节点访问。如果将桥接连接视为一种交换机,那么 NAT 虚拟服务器可以视为位于路由器后面,将公共网络与私有网络进行分区。

对于工作站的虚拟化解决方案和应用程序,例如 Oracle 的 VirtualBox 或 VMware Workstation,NAT 虚拟机非常合适;它们非常适合创建开发和测试环境。它们可以完全访问 LAN,但除非转发端口,否则无法被 LAN 上的其他节点访问。这正是我们在开发和测试环境中所需的。

然而,一开始可能很难找到 Proxmox VE 托管的虚拟服务器的使用案例,因为这些服务对物理网络上的用户不可用。

以下是一个 NAT 虚拟服务器是理想解决方案的示例:几台 Web 服务器共同工作,以提供最佳的服务可用性。每台服务器在端口 80 和 443 上监听(分别对应 HTTP 和 HTTPS)。为了效率和功效,流量通过负载均衡器进行代理。

如图所示,先前描述的情景中同时使用了桥接和 NAT:

NAT 配置

使用 NAT 和桥接配置与虚拟服务器和 Proxmox VE 的常见解决方案

路由配置

如果您的 Proxmox VE 实例托管在云服务上,则先前描述的桥接配置可能无法正常工作。出于安全考虑,大多数托管提供商在检测到单个接口上存在多个 MAC 地址时会禁用网络功能 (pve.proxmox.com/wiki/Network_Model)。

因此,此处提供的桥接配置可能无法正常工作:

auto lo
iface lo inet loopback
iface eth0 inet manual
auto vmbr0
iface vmbr0 inet static
address 192.168.10.2
netmask 255.255.255.0
gateway 192.168.10.1
bridge_ports eth0
bridge_stp off
bridge_fd 0

一种常见的解决方案是使用单个接口配置公共静态 IP(本例中为 192.168.10.2)。通过桥接,为 Proxmox VE 客户端提供额外的 IP 地址块(假定为本例中的 10.10.10.1,子网掩码为 255.255.255.0)。

路由解决方案场景的配置可能如下所示:

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.10.2
netmask 255.255.255.0
gateway 192.168.10.1
post-up echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
auto vmbr0
iface vmbr0 inet static
address 10.10.10.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0

所提供的配置已发布在 Proxmox VE 维基页面上,网址为 pve.proxmox.com/wiki/Network_Model#Routed_Configuration

此外,Proxmox 论坛中的帖子也提供了一些有用的信息,链接请见 forum.proxmox.com/threads/2034-Routed-setup

VLAN 支持

Proxmox VE 在网络基础设施中支持 VLAN。

注意

VLAN(或虚拟局域网)现在被理解为一组被配置为可以像连接在同一物理网络上的设备一样进行通信的网络设备,尽管它们实际上位于不同的局域网段中。换句话说,在一个物理介质原本为单一局域网设计的校园网络中,VLAN 逻辑地将这个单一的物理网络划分为多个逻辑或虚拟局域网。因此,基于逻辑连接而非物理连接,VLAN 提供了巨大的灵活性。

加入 Proxmox VE 主机的步骤在此处有说明;此过程需要编辑 /etc/network/interfaces 中的文本文件。请确保在您的基础设施中已经设置好 VLAN:

  1. 为每个 VLAN 创建绑定接口。

  2. 编辑您的 bridge_ports 接口,以匹配您用于管理的 VLAN。

  3. 重命名您的 vmbr 设备,使其反映您的 VLAN。

  4. 确保已使用 dot1q 封装将接入 PVE 机器的交换机端口设置为 trunk 后,重启接口:/etc/init.d/networking restart

  5. 使用 ifconfig 命令检查您的工作。

这些细节极大地依赖于网络的逻辑组织;然而,Proxmox VE 的维基提供了一个包含详细示例的指南,链接请见 pve.proxmox.com/wiki/Vlans

网卡绑定

Proxmox VE 原生支持网卡绑定(或网卡团队),配置方式与任何基于 Debian 的主机相似。

网卡绑定是一种主要用于提高 PVE 服务器容错能力的策略。绑定后的网卡,尽管看似使用相同的物理设备,其 MAC 地址也是相同的。Linux 包含一个名为 bonding 的内核模块,允许用户将多个网络接口绑定成一个通道。

小贴士

要了解更多关于 GNU/Linux 中的网卡绑定以及需要避免的陷阱,请访问 Charlie Schulting 的文章 Understanding NIC Bonding with Linux,链接:www.enterprisenetworkingplanet.com/linux_unix/article.php/3850636/Understanding-NIC-Bonding-with-Linux.htm(发布于 2009 年 11 月 2 日)。《Linux Journal》在 2011 年发布了另一篇非常有用的资源,标题为 "Bond, Ethernet Bond":www.linuxjournal.com/article/10931

要了解更多关于与 Debian(Proxmox VE 构建的 GNU/Linux 发行版)相关的网卡绑定信息,请访问 Debian 维基:wiki.debian.org/Bonding

Proxmox VE 的维基有一篇关于如何最好地利用绑定的文章,链接地址为pve.proxmox.com/wiki/Bonding

配置 Proxmox VE 主机以利用绑定的最简单资源是 Proxmox 官方在 YouTube 上的教程,链接为www.youtube.com/watch?v=-8SwpgaxFuk。你会发现,与 VLAN 配置不同,绑定可以仅通过管理界面进行配置;不需要立即通过命令行编辑文件。

虚拟服务器的网络配置

为虚拟机或容器配置 vNIC 可以是一个简单的任务,可以完全通过管理界面在初始配置时或根据需要后续进行处理。

然而,这也可能是一个相当复杂的问题,可能需要在主机、虚拟机或容器中,或者两者都需要修改配置文件。

在本节中,我们将探讨最简单的场景:通过基于 Web 的管理界面为虚拟机提供连接。

提供基本连接

在这里,我们将重点提供虚拟机的基本连接,并将它们纳入一个扁平网络。我们将首先处理虚拟机,然后处理容器。

虚拟机与 vNIC

在第四章《创建虚拟机》中,我们为了提高效率,简略了虚拟网络接口的配置。在这里,我们将讨论管理员界面中由虚拟机创建向导提供的选项。

桥接配置

首先,我们配置一个计划与 Debian 8 一起使用的虚拟机,该虚拟机使用桥接连接。如前所述,桥接配置将虚拟机集成到局域网中,使其完全对其他节点可用,可以通过唯一的 IP 地址进行访问,并通过其 MAC 地址进行识别。这类似于将一台新的物理机器插入到物理网络中的交换机。

回想一下第四章《创建虚拟机》中的内容,创建:虚拟机对话框总共有八个标签,网络标签是第七个——在查看和提交新虚拟机配置之前的最后一个标签。

以下是步骤:

  1. 下载 Debian 8 的 netinst 镜像,并使用在第四章《创建虚拟机》中描述的任何方法将其上传到 Proxmox VE 主机。

  2. 访问 Proxmox VE 管理界面,网址为https://<my-ip-addr>:8006,并创建一个新虚拟机,在创建:虚拟机向导的 CD/DVD 标签中指定 netinst 镜像。

  3. 对于这个虚拟机,绝大多数选项卡上的默认设置已经足够。在操作系统(OS)选项卡中,选择右上角的Linux 3.x/2.6 内核选项;在CPU选项卡中,确保类型(Type)设置为默认(kvm64)。如前一章所述,我们将在硬盘(Hard Disk)选项卡中选择VIRTIO作为我们的总线/设备(Bus/Device),并将缓存(Cache)选项设置为无缓存(No cache)桥接配置

    配置硬盘

  4. 网络(Network)选项卡中,我们将在左列中选择桥接模式(Bridged mode)。virtio 准虚拟化驱动程序不仅提升了存储 IO 的性能,还提高了网络 IO 的性能。由于 virtio 驱动已经集成到 GNU/Linux 中,我们将在网络(Network)选项卡右列选择 virtio(准虚拟化)作为 NIC 模型,利用这种支持。

  5. 配置完成后,查看确认(Confirm)选项卡中的配置,点击完成(Finish)以确认虚拟机的创建。

  6. 请记住,你并不局限于通过控制台(Console)选项卡使用 VNC 选项。选择虚拟机,选择硬件(Hardware)选项卡,然后双击显示(Display),选择SPICE

桥接配置

配置用于 SPICE 控制台选项的显示

注意,硬件(Hardware)选项卡还显示已经为虚拟机配置的 vNIC 分配了 MAC 地址。如果你选择网络设备(Network Device)并点击编辑(Edit)按钮,你应该会看到一个类似下面的对话框:

桥接配置

配置网络设备

现在,准备开始安装,选择虚拟机,点击启动(Start),并将控制台(Console)菜单下拉,选择SPICE

到此为止,根据屏幕上的提示完成 Debian 8 的安装,按个人需求进行选择。你可以选择使用图形安装模式——本节中分享的截图来自于该安装模式。

桥接配置

网络工作正常

到此为止,你已确认虚拟机已经连接网络:如果你查看管理界面,你还会看到网络活动:

桥接配置

网络确认已连接

继续安装,直到系统要求选择要安装的软件包。此时,选择足够的组件来验证桥接配置的概念。选择Web 服务器SSH 服务器标准系统实用程序;点击继续(Continue)完成安装。

桥接配置

选择要安装的软件包

当所有虚拟组件就绪后,点击继续(Continue),你应该能够看到进度,系统会从互联网下载软件包并进行默认安装和配置:

桥接配置

在桥接配置的情况下,当安装完成并且机器重启后,它将通过动态分配的 IP 地址可用。你应该能通过 SSH 访问该机器,或者使用浏览器访问 Apache 的默认网页,并指向该机器的 80 端口来确认这一点。

另一方面,IP 地址没有确认,什么都无法确定。

不幸的是,动态分配的 IP 地址无法立即通过管理界面访问;我们可以通过扫描找到它,或者直接使用控制台并在终端会话中查询。

桥接配置

使用 ifconfig 发现客户机动态分配的 IP 地址

上面的插图显示了新虚拟机中 ifconfig 的结果:inet addr,IPv4 地址为 192.168.1.50。现在,用户可以使用任何带有浏览器或 SSH 客户端的计算机来控制新的网页服务器,例如,ssh rik@192.168.1.50,或在此例中使用 http://192.168.1.50

桥接配置

成功通过局域网访问 Apache2

我们成功创建了一个在整个平面局域网上都可用的虚拟网页服务器。

只要我们继续使用动态 IP 地址,地址就不可靠。配置虚拟机的静态 IP 地址与配置物理机器的静态 IP 地址没有区别。它取决于特权访问、熟悉常规操作和你的网络配置;你需要有一个可用的 IP 地址,并知道你的子网掩码、首选 DNS 服务器和网关。同时,你还需要准备好根账户的凭证。

在你进行更改之前,/etc/network/interfaces 看起来像这样:

桥接配置

从命令行界面配置接口

有了我的目标配置,我可以使用 nano /etc/network/interfaces 编辑配置文件以使其匹配,如下所示:

桥接配置

在客户端编辑 /etc/network/interfaces

写入并重启后,网页应该能在指定的地址上访问,在本例中为 http://192.168.1.250

桥接配置

Apache 2 默认页面

使用 ifconfig 命令查看网络接口的配置:

桥接配置

在家庭或小型办公室环境中,我们只需将广域网侧的端口转发到虚拟机的 80 端口,它就能对全世界开放。

在本小节中,我们通过创建一个临时的 Debian 网页和 SSH 服务器,演示了桥接配置的例子。我们看到,使用桥接配置后,我们的虚拟服务器对局域网中的任何节点可用,并且可能对全球开放。

在接下来的小节中,我们将快速演示具有较窄使用案例的 NAT 配置。

使用 NAT 配置

让我们调整我们的 Debian 8 来宾系统。我们不再把它作为虚拟服务器,而是将其转变为桌面机器,隐藏于局域网之外,但可通过 PVE 的网页管理控制台由有访问权限的用户访问。

  1. 登录到管理界面,选择前一节中创建的 Debian 虚拟机,关闭它,并选择其硬件标签。

  2. 选择网络设备行,点击删除按钮以移除该接口。

  3. 点击添加按钮,然后选择网络设备,如图所示。

  4. 添加:网络设备对话框中,左侧列选择NAT 模式,并从模型下拉菜单中选择VirtIO(虚拟化)使用 NAT 配置

    配置带有 NAT 配置的网络设备

  5. 进入虚拟机控制台,并通过输入nano /etc/network/interfaces将接口配置恢复为先前状态,按如下方式编辑文件:使用 NAT 配置

    配置带有 NAT 配置的网络设备

  6. 通过/etc/init.d/networking restart重启网络。

  7. 通过输入ifconfig来确认您的新地址,您应该看到类似于此处所示的结果:

使用 NAT 配置

ifconfig 的结果

此时,虚拟机仅对 Proxmox VE 主机可访问,并巧妙地隐藏在其 IP 地址后面。

让我们访问它,并通过SPICE配置虚拟桌面访问。

  1. 确保选择了 Debian 8 虚拟机。

  2. 控制台菜单中下拉并选择SPICE。您应该会被提示登录到终端会话。使用 root 凭据登录。

  3. 在提示符下,输入tasksel并按Enter启动包配置工具。

  4. 在菜单中,选择您想尝试的GNU/Linux 桌面;在下图中,特意选择了LXDE,因为它是轻量级的,而且我们的磁盘空间有限。使用 NAT 配置

    添加桌面环境前的包配置

    使用 NAT 配置

    选择 LXDE 桌面环境后的包配置

  5. 包安装完成后,使用rebootshutdown -r now重启虚拟机。

欢迎进入 LXDE 桌面环境;使用您在本章安装 Debian 时为第一个用户创建的凭据登录。

立即打开浏览器,我们可以确定已经可以访问局域网和互联网的服务:

使用 NAT 配置

从虚拟机访问局域网,配置为 NAT 模式

使用 NAT 配置

从 NAT 配置的虚拟机访问互联网

然而,返回物理工作站时,我们发现如果不先通过 Proxmox 主机,我们无法访问虚拟机。

相反,我们可以通过控制台访问新的桌面,并利用 Proxmox VE 提供的功能丰富的权限管理系统来管理权限,以限制或允许特定用户或组访问虚拟机(请参见pve.proxmox.com/wiki/User_Management以深入了解 PVE 中的丰富权限管理系统)。

总结

我们在探索了 Proxmox VE 网络模型并完成了一些虚拟机配置后,得出了结论。

在此过程中,我们再次将注意力转向 virtio 半虚拟化驱动程序——这次不是用于存储(如上一章所述),而是用于网络 IO。简单重述一下,KVM-QEMU 虚拟机的 virtio 半虚拟化驱动程序通过减轻与虚拟化相关的资源开销,帮助优化效率。然而,Proxmox VE 默认并不使用 virtio,而是选择了兼容性最好的选项。在 vNIC 的情况下,这个默认选项是英特尔的 E1000 网卡。

在下一章中,我们将对虚拟机、容器及其主机的安全威胁和对策进行一些抽象的探讨。我们将首次了解 Proxmox VE 管理界面内置的防火墙功能,并将致力于实施一些建议的对策。

话虽如此,让我们加强 Proxmox VE 主机和客户机的安全性!

第七章:确保 Proxmox VE 安全

"抽象可以被发现或产生,可以是物质的也可以是非物质的,但每一个黑客行为都会产生并确认抽象……黑客行为是将抽象应用到信息上,从而开启新世界的可能性。"
-- 黑客宣言,麦肯齐·沃克
“直白地说,虚拟化就是欺骗。”
-- 数据中心虚拟化要点,古斯塔沃·亚历山德罗·安德拉德·桑塔纳
“敌人了解正在使用的系统……”
-- 香农法则
“通过模糊性实现的安全并不是解决方案。”
-- 信息安全:原则与实践,Merkow 和 Breithaupt
“容器已经迅速成为企业云优化战略中的一个热门选择,但我们对其安全影响究竟了解多少?”
-- Kowsik Guruswamy

本章的最终目标是帮助你减轻 Proxmox VE 基础设施的安全威胁。

我们首先列举并阐明虚拟化对基础设施安全可能带来的好处。

然而,这些好处不能无条件地依赖或无批判地讨论;我们必须在此加以限定。

此外,我们必须揭示虚拟化可能给基础设施带来的潜在安全风险。

最终,本章致力于提供减轻 Proxmox VE 主机和客户机安全威胁的策略。

安全保证当然是一个广泛的领域,通常不仅包括威胁缓解,还涉及政策制定、监控、事件响应和取证。我们在这里的重点是专注于减轻特定于 Proxmox VE 主机的漏洞。

为此,安全的目标在这里按照传统进行定义:

  • 维护系统的保密性

  • 确保其完整性

  • 提供服务的一致可用性

确保 Proxmox VE 安全

安全三要素

上面的插图表明,这三点并不是孤立的:整个图景由三个相互关系组成:保密性与完整性之间的关系;保密性与可用性之间的关系;最后是完整性与可用性之间的关系。对某一点的过度或不足的强调会扭曲我们的柏拉图三角形,这是一种我们不可能实现的理想的象征。

鉴于我们的最终目标——减轻威胁——本章沿着以下方向进行:

  • 审视虚拟化可能带来的安全回报

  • 审视这些回报,并探索虚拟化可能引入的潜在漏洞

  • 直接采取行动以减轻威胁

虚拟化的安全好处

在基础设施中引入经过精心规划、深思熟虑和执行良好的虚拟化,会带来一些非常有力的安全好处。

"IT 资源的抽象掩盖了这些资源的物理性质和边界……"
-- 根据 Gartner 的 IT 词汇表定义的虚拟化(www.gartner.com/it-glossary/virtualization)。

关于将虚拟化表现为一种欺骗性伪装的常见说法,我们需要明确一点:安全性通过模糊化的方式是行不通的。为了提供安全性而设计或实施系统的秘密性是一种失败的方案。

在枚举虚拟化的安全优势时,本节有意避免暗示抽象化及其所允许的模糊化是一种有效的安全策略。

随着章节的发展,我们将看到,没有对网络、系统管理、二型虚拟机监控器、虚拟机和容器的良好理解,虚拟化倡导者所承诺的任何安全回报都是无法实现的。还需要以下内容:

  • 部分基于深度防御的严格规划

  • 完美实现这些计划

  • 在所有虚拟机的生命周期中进行卓越的管理。

鉴于前述所有内容,虚拟化使用 Proxmox VE 确实带来了非常明确的安全好处:

  • 减少物理攻击面

  • 虚拟机隔离

  • 恢复到先前状态的能力

  • 硬件抽象

  • 网络分段支持

  • 封装和可移植性

  • 物理安全

  • 精细的权限控制

  • 集成防火墙

攻击面缩减

转向虚拟化基础设施会根据虚拟机的密度减少物理攻击面。我们将更多的物理服务器转为 Proxmox VE 虚拟机,并根据我们将虚拟机密集地放置在 Proxmox VE 主机上的方式,物理服务器的数量减少,进而减少了遭受潜在致命物理攻击的风险。

虚拟化本身有潜力以多种方式减少基础设施的攻击面;我们将重点讨论它如何减少提供服务的物理主机数量。

攻击面缩减

可视化攻击向量和攻击面

曾经我们可能在保护 15 台机器免受物理攻击,现在可能只需要保护一两台物理 Proxmox VE 主机。

我们必须保持批判性思维,意识到这可能会带来新的漏洞和令人沮丧的解决问题。

Proxmox VE 主机变得更加单一,因此:

  • 如果 Debian 8、PVE 或 KVM 与 QEMU 存在未修补的漏洞,那么该实例托管的所有虚拟机的机密性、完整性和可用性也会受到威胁。

  • 如果攻击者获得了对 PVE 主机或主机的物理访问权限,那么所有虚拟机和容器的安全性和完整性肯定会受到怀疑。如果这令人担忧,还要考虑到你的快照和备份可能已经丢失。

毫无疑问,虚拟化减少了基础设施的整体攻击面,并且在多个方面如此;然而,如前所述,这并不会减轻我们的任何负担,它只是让这些负担具有更高的风险,同时使其变得不那么复杂。

隔离

虚拟化鼓励隔离。即使在同一主机上,一个虚拟机也不会自然地影响另一个虚拟机。

这种隔离的趋势表明,破坏性的恶意软件感染虚拟服务器时,不一定会逃逸并传播到其他虚拟服务器,即使它们共享同一主机。

然而,如果出现疏忽,比如天真地在两个来宾之间共享数据,或更糟糕的是在来宾和主机之间共享数据,攻击可能会造成灾难性后果。因此,要抵制在 PVE 上创建虚拟机共享文件的诱惑;为了安全起见,不要在 Proxmox VE 主机和其任何来宾之间共享文件。

这里,文档化你的基础设施并编写经过深思熟虑且严格执行的安全政策的重要性显而易见。

先前状态的可用性

如果攻击成功针对 Proxmox VE 来宾,来宾可以通过备份或快照回滚到先前状态,从而有效地缩短从攻击中恢复的时间。然而需要注意的是,任何在选定备份时间与恢复时刻之间发生的更改,都会在回滚时丢失。

先前状态的可用性

回滚涉及将先前版本的来宾存储文件应用到虚拟机或容器中

因此,恢复到先前状态的能力并不是虚拟化的无条件优势,尽管它是 Proxmox VE 的集成功能;快照和备份必须是精心规划和执行的 PVE 来宾生命周期的组成部分,并且是一个明确且强制执行的政策的一部分。

硬件抽象

完全虚拟化的一个根本性吸引人的特点是将计算机从物理硬件中抽象出来。

想象一下,一个 Proxmox VE 来宾在几个月内收集的资料经过精心组织,在一次攻击中被破坏,硬盘被摧毁,这种攻击本来会使物理存储无法恢复——在虚拟磁盘上的存储破坏不会对其所托管的物理存储造成任何损害。当有可恢复的先前状态时,快照或备份可以恢复到相同的硬件上。

无条件地,虚拟组件所遭受的损坏不会对物理主机产生任何影响。这是抽象化的固有奖励。

分段

如果要使用 Proxmox VE 虚拟化基础设施,请利用它支持的网络分段技术,例如 VLAN 标签、桥接、NAT 伪装的 IP 和每个来宾的防火墙。使用这些技术使虚拟机或容器仅对有合法业务需求并需要有限访问权限的用户群体可用。

分段

使用 Proxmox VE 可视化分段和信任区

为了最大限度地发挥这一宝贵潜力,在规划您的基础设施时,请严格思考足够的信任区。

注意

信任区是一个网络段,数据在其中流动时相对不受限制,而流入和流出信任区的数据则受到更严格的限制。

提示

Open vSwitch

作为 Linux 原生的桥接、绑定和 VLAN 接口的替代方案,Proxmox VE 支持 Open vSwitch。

Open vSwitch 是一种开源的软件实现,提供了一个分布式的多层交换机。它已经具备生产就绪能力,专为虚拟化设计。

要了解更多关于 Open vSwitch 的信息,包括其功能和潜在的缺点,请访问其官网:openvswitch.org。要了解 Proxmox VE 对 Open vSwitch 的支持,请访问 Proxmox 维基:pve.proxmox.com/wiki/Open_vSwitch

封装性和可移植性

如第五章《虚拟磁盘操作》所述,在完全虚拟化环境下,虚拟服务器上的所有信息,包括启动磁盘,都会作为文件保存;这是封装性的一个例子。

封装性极大地服务于虚拟机的可移植性;即使攻击者试图攻破 PVE 主机,其虚拟机也可以在不中断的情况下移动到集群中的另一台主机。实时迁移——将活跃的虚拟机从一个 PVE 主机迁移到同一集群中的另一个主机——有助于确保即便在主机遭受攻击时,也能保持可用性。

提示

关于集群和高可用性

有关这些主题的更多信息,请参见 Packt 出版的《Mastering Proxmox》、《Proxmox High Availability》和《Proxmox Cookbook》。

物理安全

当攻击者获得物理服务器的访问权限时,其应展示的可用性、保密性和完整性将绝对受到怀疑。

简单来说(借用 Scott Culp 的说法),如果攻击者获得了对 Proxmox VE 主机的物理访问权限,那么它就不再是您的主机了。

如前所述,虚拟化的一个非常强大的好处是,随着服务向虚拟机或容器迁移,物理主机数量减少,从而有效地减少了攻击面,因为需要为的机器越少,就能获得非法访问的机器也越少。

尽管如此,请在您的策略中包括 PVE 主机、存储和中间配线架(即配线室)在物理上如何防止非法访问的程序,并始终如一地严格执行该策略;这意味着您已经降低了一个潜在的灾难性威胁。

精细的权限控制

本着深度防御和最小权限原则的考虑,考虑将每个服务移至单独的虚拟机或容器时,如何实现对用户访问和限制的精细控制——与将多个服务运行在单一物理服务器上的做法相对比。

在虚拟基础设施中,获得访问某个服务权限的用户,并不意味着自动获得访问其他服务的权限——就像我们如果服务共享在一台硬件服务器上,通常会认为它们是共享的那样。我们可以限制对 Debian 的访问,通过 PVE Web 界面精确定义每个用户在与每个虚拟机和容器相关的角色,进一步细化在来宾操作系统和应用层的权限。

精细的权限控制

在“深度防御”实践中需要考虑的一些层次

默认情况下,Proxmox VE 管理界面通过 GNU/Linux 的默认认证系统(PAM)进行授权,且 root 是唯一的用户。然而,Web 界面的认证系统可以从 PAM 更改为 PVE 系统、Active Directory 或 LDAP。

无论认证机制如何,特定用户可以为每个独立的虚拟机或容器分配不同的角色或权限。

提示

PVE 用户管理

要了解更多关于 PVE 用户管理功能的信息,请访问 Proxmox wiki 的用户管理页面:pve.proxmox.com/wiki/User_Management

PVE 提供了许多预定义的角色,适用于用户或组;我们还可以根据需要创建具有不同权限和限制的新角色。

PVE 防火墙功能

Proxmox VE 提供基于 iptables 的灵活防火墙功能。

这些功能可以通过管理界面或命令行进行配置,提供多层保护,因为这允许规则集根据每个来宾服务器、每个 PVE 主机和整个集群的情况来接受和拒绝流量。

注意

要了解更多关于 Proxmox VE 防火墙的信息,请访问官方文档:pve.proxmox.com/wiki/Proxmox_VE_Firewall,详细的配置示例可在此处找到。

PVE 必须通过防火墙保护,这一点非常关键。

Proxmox VE 3.4 依赖以下端口:

  • 8006(Web 界面)

  • 85(pvedaemon—配置为仅监听 127.0.0.1)

  • 5900-5999(VNC Web 控制台)

  • 22(sshd;用于集群操作以及访问远程 Shell)

  • 5404, 5405 UDP(CMAN 多播—如果你运行集群的话)

Proxmox VE 4.0 对 Proxmox VE 的端口使用进行了若干改动:

  • 8006(Web 界面)

  • 85(pvedaemon—配置为仅监听 127.0.0.1)

  • 5900-5999(VNC Web 控制台)

  • 3128(SPICE 控制台)

  • 22(SSH 访问—现在是可选的)

  • 111(rpcbind)

  • 5404, 5405 UDP(corosync 多播,如果你运行集群的话)

利用你在防火墙方面的经验,限制来自没有合法访问需求的子网和 IP 范围对这些端口的访问。

严重的漏洞

虚拟化的潜在安全优势无疑令人信服,但其中许多都是有条件的,总体而言,它们绝不是万能的解决方案。

此外,虚拟化为基础设施带来了新的威胁——这些威胁在虚拟化之前可能根本不会成为问题,或者在虚拟化的影响下变得更加严重。

本节重点关注虚拟基础设施历史上存在的问题性漏洞:

  • 拒绝服务攻击

  • 虚拟机逃逸和超跳

  • 服务器扩展

  • 日益复杂

拒绝服务攻击

拒绝服务DoS)攻击有多种形式。然而,其直接目的都是一样的:通过产生大量非法流量来压垮网络及其管理员。

分布式拒绝服务DDoS)和 DoS 攻击成本低、有效且日益普遍。从表面上看,它们似乎最有效的方式是让服务无法使用或不可用。更为阴险的是,通过让管理员应对非法流量忙得不可开交,其他攻击可以在不引起他们注意的情况下发起。

不幸的是,DoS 攻击在虚拟化基础设施中尤其强大,其中被压垮的虚拟主机会威胁到虚拟客户机及其提供的服务的可用性。

拒绝服务攻击

可视化 DDoS 攻击

此外,2013 年发布的研究发现,虚拟机涉及的 DoS 攻击要强大得多:

"[在] DoS 攻击下,虚拟机托管的 Web 服务器性能可能下降最多达 23%,而在同一硬件上托管的非虚拟化服务器性能仅下降 8%。即使在相对轻微的攻击下,基于虚拟机监控程序的虚拟化系统的文件系统和内存访问性能也会比其非虚拟化对等物下降得更快。"
-- 《网络拒绝服务攻击下虚拟机性能:实验与分析》,Shea 和 Liu, www.cs.sfu.ca/~jcliu/Papers/PerformanceofVirtualMachines.pdf

显然,在某些领域,我们可能会对虚拟化带来的某些安全优势感到安慰;然而,DoS 和 DDoS 攻击是我们无法忽视的威胁。

在将服务从物理机器迁移到 Proxmox VE 虚拟机时,工作不仅要定义和部署预防措施,还要制定快速响应协议。这要求实施监控和警报系统,并配置防火墙,以便有意识地考虑到这些攻击。

每种类型的 DoS 攻击都有各自的检测和缓解策略。例如,要缓解 SYN 洪水攻击,请参见tools.ietf.org/html/rfc4987的第三部分。

虚拟机逃逸和超跳

虚拟机逃逸发生在攻击者成功“突破”虚拟机并与主机操作系统交互时。

同样地,虚拟机跳跃,有时也称为超跳,是通过另一个虚拟机非法访问虚拟机的过程。

可以推测,封装和隔离的环境中,虚拟机运行的操作系统不应该知道它们是虚拟化的;不应该有任何方式能让虚拟机突破虚拟化,与父级虚拟机监控程序直接交互。出于相同的原因,通过另一个虚拟机非法访问虚拟机应该是不可能的。

虚拟机逃逸漏洞特别具有毁灭性,因为虚拟机监控程序控制着主机上所有虚拟机和容器的执行。因此,能够访问虚拟机监控程序的攻击者将能够控制在 PVE 主机上运行的所有虚拟机;由于虚拟机监控程序位于物理硬件和虚拟机操作系统之间,成功的虚拟机逃逸将使攻击者能够简单地绕过在虚拟机上实施的安全控制。

虚拟机逃逸和虚拟机跳跃本应是一个智力练习,是一个迷人的理论性问题。不幸的是,事实并非如此。

例如,在本书的制作过程中,已经出现了几种虚拟机逃逸漏洞。或许最引人注目的漏洞是被研究人员称为VENOM的漏洞(venom.crowdstrike.com/):

“VENOM,CVE-2015-3456,是一个存在于许多计算机虚拟化平台使用的虚拟软盘驱动程序中的安全漏洞。该漏洞可能允许攻击者突破受影响虚拟机(VM)的限制,进而可能获得对主机的代码执行访问权限。如果没有采取缓解措施,这种虚拟机逃逸可能会打开对主机系统及该主机上运行的所有其他虚拟机的访问权限,从而可能使攻击者获得对主机本地网络及相邻系统的显著权限。”

“VENOM 漏洞的利用可能暴露企业知识产权(IP)的访问权限,除此之外,还可能泄露敏感的个人身份信息(PII),并可能影响成千上万的组织和依赖受影响虚拟机(VM)分配共享计算资源的数百万终端用户,此外还可能影响连接性、存储、安全性和隐私。”

虚拟机逃逸与虚拟机跳跃

Venom 攻击场景

不幸的是,披露中提到的许多“计算机虚拟化平台”包括了所有基于 QEMU 的虚拟化平台;这也包括 Proxmox VE。

对于 VENOM 漏洞,Debian 在漏洞披露当天就发布了补丁。PVE 管理员只需要按照 Debian 的方式升级,然后重启虚拟机:

apt-get clean
apt-get update

在 Proxmox VE 主机上关闭并重启所有虚拟机后,漏洞问题消失了。甚至无需重新启动 PVE 主机。

注意

该漏洞在 QEMU 源代码中无意中引入,当 QEMU 软盘驱动控制器在 2004 年被引入时。

所以看起来虚拟化的隔离并不是绝对的。

从 VENOM 中,我们可以学习到一些直接的预防措施,以缓解新出现的虚拟机逃逸漏洞:

  • 定期对 Proxmox VE 和 Debian 进行修补。有多种方法可以自动化修补过程;我们将在下一节中介绍其中一种方法。由于 Proxmox VE 通过与 Debian 相同的机制进行修补,两个系统的补丁将同时应用。

  • 对虚拟机和容器上运行的操作系统和应用程序进行修补。在 Debian 和 Ubuntu 客户机上,使用 apt 工具;在 Microsoft Windows 和 Server 客户机上,设置合理的 Windows 更新策略,以确保紧急更新被应用。

  • 不要 安装你不需要的虚拟机功能。这样做会不必要地增加你的攻击面。特别要注意虚拟设备是否附加到虚拟机上;如果你不需要虚拟光驱或软盘驱动器,可以在虚拟机上安装时避免它们,或者当你不再需要时将其从虚拟机中移除。

  • 避免运行那些对客户机的主要角色不必要的软件和服务。

  • 然而,运行终端安全软件在虚拟机上的好处值得权衡;在他 2015 年 9 月的文章《逃脱的虚拟机的奇怪案例》中,Bunmi Sowandi 建议,这种软件将在恶意代码有机会“逃脱”之前,检测出它试图在虚拟机中运行的行为。(vmturbo.com/about-virtualization/the-curious-case-of-the-escaping-virtual-machine/)

正如我们从 VENOM 中了解到的,防止虚拟机逃逸和超级跳跃漏洞的最佳保护措施是常规的、经过深思熟虑的补丁管理。

虚拟化蔓延

在虚拟基础设施的背景下,蔓延指的是虚拟服务器的扩展速度超过管理员能够妥善管理的速度。蔓延促使了不良管理决策、草率的未经过深思熟虑的行动、马虎的配置错误以及错失缓解威胁的机会。

因此,从安全的角度来看,虚拟化蔓延带来了严重的问题,因为管理员会错过安全补丁,未能加固服务,甚至可能不必要地暴露网络、虚拟化程序和存储节点。

惠普网站上的一篇有帮助的文章建议了一些最佳实践,有效地减少蔓延的影响。像本章中探讨的许多安全问题一样,建议的解决方案是优秀的规划、深思熟虑的部署,以及编写和执行包含虚拟机生命周期管理的安全政策。文章(h30499.www3.hp.com/t5/Grounded-in-the-Cloud/5-ways-to-get-control-of-virtualization-sprawl/ba-p/6170959)特别强调以下内容:

  • 在可能的情况下,从包含补丁、补丁策略、审计政策、软件及软件政策的“黄金镜像”创建虚拟机和容器

虚拟化蔓延

虚拟机及虚拟机模板的端到端生命周期和策略管理

  • 主动更新虚拟机以及虚拟机模板(包括容器及容器模板)的基于政策的执行

虚拟化蔓延

  • 系统化地管理虚拟服务器的生命周期和合规性,贯穿始终(例如,包括定期快照或备份,以及应用补丁和升级)

本文坚持传达两个成功的信息:

  • 一项精心设计的安全政策,对管理员而言是完全可遵守的,对于控制虚拟化蔓延至关重要

  • 可以自动化的任务必须自动化

虚拟化蔓延会促使混乱;通过自动化以及精心设计并在日常管理实践中遵循的政策来加以控制。

与复杂性作斗争

“网络架构应尽可能简单易懂,应该能够简要地画出几个简单的图示来说明该设计……”**“清楚理解网络流量的流动,使你能掌控网络。不理解网络,则会受其变化的摆布。”
-- 《系统与网络管理实务,第 2 版 2007》

考虑到虚拟化促使蔓延,同时安全的虚拟化基础设施要求分段,虚拟化鼓励问题网络复杂性的现象也就不足为奇。

随着网络复杂性的增加,管理员所承受的痛苦也在增加,因为他们必须保持准确的文档,随时排查连接问题,有时还需要为第三方支持提供可操作的信息。

基础设施虚拟化所倡导的“混乱方法”并不是在每个组件的可用性都至关重要的网络中可以依赖的模型(《系统与网络管理实务》)。

为了限制网络复杂性,考虑到校园的网络架构师、工程师和管理员都应该能够在不借助任何辅助工具的情况下,简要勾画出网络拓扑的关键特征和基本结构。

根据 Limoncelli、Hogan 和 Chalup 的说法,如果网络图不能相对容易地呈现,那么网络架构既不够干净、也不够易懂、也不够简单。物理和逻辑网络的地图应该绝对成为系统文档的一部分,并且应当修订以反映前一个拓扑结构的任何修改。

冒着显得重复的风险,最好的方式来驾驭网络的复杂性是确保网络能够在没有额外资源支持的情况下,逻辑上和物理上清晰地被解释和绘制。如果不能做到这一点,重新评估架构,看看在哪些方面可以简化,而不牺牲安全性。

采取行动

如果你还没有虚拟化基础设施,或者你暂时无法制定战略安全政策,仍然有一些策略可以采取,以减轻一些对你的 Proxmox 虚拟环境的威胁:

  • 保护引导加载程序

  • 如果可能,锁定 BIOS/UEFI

  • 绝对禁止远程访问 Proxmox VE 的用户界面

  • 禁用通过 SSH 的 root 访问;也可以考虑禁止 sudo 权限

  • 使用 Fail2ban 防止暴力破解攻击

  • 依赖基于密钥的 SSH 认证

  • 维护 Proxmox VE 及其虚拟机的安全补丁

  • 考虑企业支持订阅

接下来的实际操作是对之前提到的更抽象策略的有力(且立即可用的)补充。

本节总结了这些即时的战术性缓解目标,以提供即时支持,帮助你熟悉 Proxmox VE。

保护引导过程

在本节中,我们致力于确保操作系统和应用级认证不会因物理访问攻击者而被绕过,确保这些机制不被彻底破坏。

我们可以将引导过程视为四个阶段:

保护引导过程

通用引导过程

在这个过程中,系统可能会存在漏洞:

  • 一个没有安全保护的 BIOS 可以被指示从攻击者的存储设备引导,这使得攻击者能够破坏存储在 Proxmox VE 主机上的数据的机密性和完整性,并干扰主机旨在提供的服务和虚拟服务器的可用性。

  • 通过操控未加固的引导加载程序,攻击者可以获得机器的 root 权限,并危害其机密性、完整性和可用性。

使用任一方法,攻击者实际上已经控制了这台机器。让我们尽最大努力锁定主机的 BIOS/UEFI 以及 GRUB 2.0,这是 Proxmox VE 3.4 和 4.1 的引导加载程序。

提示

要了解更多关于 Debian 启动过程的信息,请访问 www.debian.org/doc/manuals/debian-reference/ch03.en.html#_an_overview_of_the_boot_strap_process

锁定引导加载程序

操作系统级的身份验证限制可以通过操作 GRUB 2(Proxmox VE 的引导加载程序)非常简单地被破解,尽管 Proxmox VE 机器本身是安全的。例如,参见 linuxconfig.org/ubuntu-14-04-lost-password-recovery,该过程中详细描述了这一过程。攻击的要点大致如下:

  1. 重启并在启动后立即进入 GRUB 2 菜单。

  2. 修改引导选项。

  3. 根据您的修改启动系统。

  4. 更改系统的 root 密码。

  5. 关闭并重启。

  6. 使用新密码登录。

对于有经验的 GNU/Linux 管理员来说,这个过程应该很熟悉;它与我们重置丢失的 root 密码的方式完全相同。

GRUB 2 提供了广泛的自定义功能,通过它,您可以禁用一般的 GRUB 2 选项访问,以及特定菜单选项的访问。

我们将介绍 GRUB 2 菜单条目的通用保护措施,以允许通过一个未加密密码的超级用户访问。这将禁止攻击者以及疏忽或不满的同事编辑 GRUB 条目或访问 GRUB 命令行。

要执行此过程,您必须:

  • 拥有 root 权限。

  • 确定将使用的超级用户名称和密码(我们将使用名称 admin 和密码 pve)。

  • 从命令行编辑 GRUB 配置文件。

  • 使用 update-grub 命令更新 GRUB 2 配置。

让我们开始吧:

  1. 登录到 Proxmox VE 主机的 shell;如果 PVE 配置了 192.168.1.200 的 IP 地址,可以通过同一网络上的工作站通过 SSH 访问 shell:

        ssh root@192.168.1.200
    
    
  2. 使用纯文本编辑器打开 /etc/grub.d/00_header;此示例使用 nano 作为编辑器:

        nano /etc/grub.d/00_header
    
    
  3. 将以下行附加到文本的底部:

        cat << EOF
        set superusers="admin"
        password admin pve
        EOF
    
    
  4. 保存文档并退出编辑器;在 nano 中,使用 Ctrl + X,然后 Y,接着 Enter 返回到 shell 提示符。

  5. nano 中打开 /etc/grub.d/10_linux

        nano /etc/grub.d/10_linux
    
    
  6. /etc/grub.d/10_linux 中查找以下一组行:

        echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
    
        else
    
        echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS}  \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
    
    
  7. 在最后一行,在 ${CLASS}\$menuentry; 之间插入 --unrestricted,最终的行如下所示:

        echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} --unrestricted \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
    
    
  8. 保存修改后的文档并退出编辑器;在 nano 中,使用 Ctrl + X 退出,按 Y 确认,然后按 Enter 返回到 shell 提示符。

  9. 最后,提示 GRUB 2 根据更改重新配置自身:

    update-grub

当您重启时,如果不被打断,您应该发现 PVE 会正常启动。但是,如果您尝试编辑菜单项、从子菜单启动或访问 GRUB 命令行,您应该会发现需要进行身份验证。

提示

有关 GRUB 安全性的更多信息,请访问以下链接:help.ubuntu.com/community/Grub2/Passwords

www.gnu.org/software/grub/manual/grub.html#Security

正如 opensourceforu.efytimes.com/2013/03/playing-hide-and-seek-with-passwords/ 文章中指出的那样,这个密码仍然可以通过将 BIOS/UEFI 配置为从攻击者的启动设备启动来绕过。如果你的硬件允许,你可能需要先保护启动过程的这一阶段,这样潜在的恶意分子就无法操控 Proxmox VE 主机从他们自己的设备启动。

锁定 BIOS/UEFI

通过保护引导加载程序 GRUB 2,我们可以防止用户绕过操作系统安全性并获得 Proxmox VE 主机上的 root 权限。

然而,攻击者仍然可以通过从他们自己的媒体启动来轻松绕过引导加载程序的安全性。从那里,他们可以挂载计算机的次级存储,并立即为你做出关于其机密性和完整性的决定。如果攻击者特别有计划,他/她可以安装一种巧妙的方式,稍后远程访问这台计算机。

为了减轻这一威胁,我们可以根据固件的不同,密码保护 BIOS 或 UEFI 中的启动设备设置。

由于有各种各样的 BIOS 和 UEFI 固件供应商,我们将阐明我们想要做的目标,然后希望我们的系统能够合作。

目标是调整 BIOS/UEFI 使其按以下方式运行:

  • 允许系统在没有任何中断的情况下冷启动

  • 更改启动设备需要身份验证

  • 禁止在未身份验证的情况下进入设置管理器

这个配置可能有些棘手,很大程度上取决于 BIOS/UEFI 供应商。

理想情况下,带有 BIOS 的计算机将允许你执行以下操作:

  1. 在启动 PC 时进入 BIOS 配置。开机后,按提示键进入BIOS 设置实用程序;有时是 F 键、DeleteESC。在某些联想机器上,是 Enter。在 VMware 的 PhoenixBIOS 中,F2 用于访问设置实用程序(访问此界面是我们希望对攻击者来说不可行或令人沮丧的):Locking down BIOS/UEFI

    VMware Workstation 附带的 PhoenixBIOS 使用 F2 进入设置,F12 用于网络启动,ESC 用于启动菜单。

  2. 一旦进入 SETUP,导航到安全选项卡。在我访问过的计算机上,设置管理员密码将要求任何尝试进入设置实用程序的人提供相同的凭据。在 VMware Workstation 虚拟机的 PhoenixBios 中,我仍然可以在未进行身份验证的情况下启动。到目前为止,一切正常。

  3. 然而,当前面的截图提示用户按 F12 进行网络启动或按 Esc 进入启动菜单时,他们会发现这些选项没有限制。在这种情况下,任何试图锁定 BIOS 以增强安全性的行为都将被彻底破坏。

  4. 如果可用,进入 SETUP 工具中的启动设置。如果启动菜单中有该选项,请禁用不使用的设备,如网络启动、光驱启动或 USB 启动设备。

  5. 再次,根据可用性,进入启动优先级并设置剩余设备的启动优先级。某些系统允许你使用 D 键禁用设备。

理想情况下,你的 BIOS 设置工具允许你禁用启动设备或为启动设备菜单和 SETUP 工具本身设置密码保护。此外,它应该允许你设置主管密码,而无需在启动时进行身份验证。如果启动过程被中断以要求身份验证,可能会导致服务用户依赖的系统出现不必要的、甚至是未计划的停机时间。

在我为本章调查的物理机器中,大约一半的机器可以实现之前推荐的设置。

如果你的机器支持这种理想场景,请意识到,最糟糕的情况是丢失 BIOS 密码意味着你失去了重新配置或故障排除物理机器的许可。如果密码丢失,你需要研究如何绕过你曾认为能防止坏人入侵的安全措施。重置过程繁琐、不一致、耗时且可能不起作用。

因此,保持任何用于限制 BIOS 或 UEFI 访问的凭据的安全副本是至关重要的。

要了解如何保护你的 Proxmox VE 主机的具体 BIOS/UEFI 系统,请查阅计算机或 BIOS 制造商的文档,或者在网上查找社区用户的相关资料。

如果无法通过你所使用的 BIOS 或 UEFI 完全保护启动过程,可以通过确保物理主机的访问绝对安全来弥补,如带警报的门锁、记录进出日志的钥匙通行证等。

提示

Secure Boot 和 Proxmox

Proxmox VE 不支持 UEFI 的 Secure Boot 功能。

强化操作系统和虚拟化管理程序

这里的目标是确保 Proxmox VE(3.4 和 4.0)以及其底层操作系统 Debian 的安全性。由于 Proxmox VE 和 Debian 紧密相连,因此将它们一起讨论是合适的。

禁止远程访问虚拟化管理程序

专注于安全虚拟化基础设施的专家坚决主张这一点:必须禁止远程访问虚拟化管理程序。

这个指令必须得到明确说明:在没有显示器的情况下运行 Proxmox VE 主机并通过 SSH 和基于 Web 的管理界面从同一局域网的另一台工作站访问它是完全合适的。

你需要避免的一件事是将 PVE 端口,特别是 22 和 8006,暴露到互联网。如果没有配置 VPN,Proxmox VE 绝对不应该从局域网外部访问。

提示

OpenVPN 是一个开源包,用于提供 VPN 服务;如果你正在考虑 VPN 解决方案,可以在 /wiki.debian.org/OpenVPN 了解更多关于 OpenVPN 的信息。

加固 SSH 安全

Proxmox VE 设计时有两种访问方式:

  • 通过 SSH 访问命令行界面

  • 通过基于 Web 的管理界面进行访问

必须启用 SSH 选项,以便管理员能够对底层操作系统进行配置更改。此外,正如我们在第三章中所见,创建容器 和第四章,创建虚拟机,我们可能选择通过命令行处理大量的 Proxmox VE 管理任务。

因此,不能仅凭安全理由禁用 SSH。然而,为了确保安全性,我们必须微调 SSH 的配置,以缓解潜在的威胁,无论是来自不满的或疏忽的同事,还是外部的攻击。

我们的目标如下:

  • 禁用直接通过 SSH 访问 root 账户

  • 缓解针对 SSH 的暴力破解密码攻击

  • 限制按 IP 访问

  • 使用加密密钥而非密码进行 SSH 身份验证

禁用 root 账户通过 SSH 登录

这个过程至关重要且绝对必要。首先,我们需要创建自己的账户以用于登录。接着,我们将使用新账户登录,使用 su - 命令提升权限,然后按照简单的步骤禁用 root 用户通过 SSH 登录。

一旦完成此过程,我们将在可预见的未来使用新账户登录;要执行需要 root 权限的操作时,我们只需使用 su - 命令临时提升该用户账户的权限,具体步骤如下:

  1. 选择一个用户名和密码,用于通过 SSH 管理 Proxmox VE。

  2. 通过 SSH,使用在安装 Proxmox VE 时创建的凭据以 root 用户身份登录。

  3. 使用 adduser 命令,后跟你选择的用户名,创建新账户:

        adduser rgoldman
    
    
  4. 按照提示创建并确认新账户的密码。

  5. 输入你希望与新账户关联的全名。

  6. 你可以选择忽略其余的提示信息,如办公室号码、地址和电话号码等。

  7. Y 然后按 Enter 键确认创建新用户。通过 SSH 禁用 root 账户访问

    在命令行提示符下创建新用户

  8. 使用 exit 命令关闭 SSH 会话。

  9. 使用新账户名重新连接到 Proxmox VE:

        ssh rgoldman@192.168.1.200
    
    
  10. 使用 su - 命令提升权限,并输入 root 密码以继续。

  11. 使用 nano 编辑 /etc/ssh/sshd_config

        nano /etc/ssh/sshd_config
    
    
  12. 使用箭头键或 PageDown 键找到以下部分:

        #LoginGraceTime 2m
        #PermitRootLogin no
        #StrictModes yes
        #MaxAuthTries 6
    
  13. 在此文件中,# 符号表示该行是注释,不应视为 SSH 守护进程配置的一部分。让我们从第二行删除 # 符号以启用该指令:

        PermitRootLogin no
    
    
  14. 保存并退出修订后的配置文件: Ctrl + XYEnter

  15. 我们可以在不影响会话的情况下重启 SSH 守护进程:

        /etc/init.d/ssh restart
    
    
  16. 现在,进行测试,确保 root 用户无法再登录。首先输入 exit 退出 su 模式,再次输入 exit 关闭 SSH。

  17. 以 root 用户身份启动新的 SSH 会话:

        ssh root@192.168.1.200
    
    

访问应被拒绝,且没有输入密码的机会。

防止针对 SSH 的暴力破解攻击

只要 SSH 守护进程配置为使用密码认证,它就容易受到暴力破解密码攻击。一种缓解策略是安装并配置 Fail2ban,这是一个强大的工具,旨在检测服务上的攻击,并将攻击来源的 IP 地址在预定义的时间段内禁止访问。Fail2ban 有效地提高了攻击者进行暴力破解攻击所需的资源和时间成本。

若要使用 Fail2ban,请按以下步骤操作:

  1. 通过 SSH 和新用户账户登录。

  2. 提升权限:

        su -
    
    
  3. 安装 Fail2ban:

        apt-get update && apt-get install -y fail2ban
    
    
  4. 将默认配置文件 jail.conf 复制到新文件 jail.local

        cp /etc/fail2ban/jail.conf /etc/fail2ban/jain.local
    
  5. 使用编辑器(如 nano)打开新文件:

        nano /etc/fail2ban/jail.local
    
    
  6. 在以下节中确认 Fail2ban 的 SSH 配置:

        [ssh]
        enabled   = true
        port      = ssh
        filter    = sshd
        logpath   = /var/log/auth.log
        maxretry  = 6
    
    
  7. 保存文件并使用 Ctrl + XYEnter 退出 nano

  8. 如果需要任何更改,请重启 Fail2ban:

    /etc/init.d/fail2ban restart

注意

Fail2ban 还可以配置为保护 PVE 的基于 Web 的管理界面免受暴力破解攻击。

首先,将以下内容添加到 /etc/fail2ban/jail.local

[proxmox]
enabled = true
port = 8006, https
filter = proxmox
logpath = /var/log/daemon.log
maxretry = 3
bantime = 3600 # 1 hour

注意

然后,输入命令 nano /etc/fail2ban/filter.d/proxmox.conf 来创建过滤器。

输入以下内容:

[Definition]
failregex = pvedaemon\.*authentication
failure;
rhost= <host> user=.* msg=.* ignoreregex =

注意

保存文件并使用 Ctrl + XYEnter 退出 nano重启 Fail2ban 以激活新配置:

    /etc/init.d/fail2ban restart

注意

按照之前描述的 Fail2ban 配置,如果在 Web 界面中连续三次验证失败,客户端将被禁止连接一小时:

![防止针对 SSH 的暴力破解攻击

在尝试三次登录 PVE Web 界面失败后

提示

更多关于 Fail2ban 的信息

要了解更多有关 Fail2ban 及其工作原理的信息,请访问 www.fail2ban.org/wiki/index.php/Main_Page

要了解更多有关 Fail2ban 和 Proxmox VE 的信息,请访问 Proxmox Wiki:pve.proxmox.com/wiki/Fail2ban

依赖基于密钥的认证

另一种保护 Proxmox VE 服务器 SSH 访问的方法是依赖于基于密钥的身份验证,而非密码认证。这种身份验证方法的优点在于你可以完全禁用密码认证,避免担心合法用户密码的强度。另一个好处是,你可以使用相同的密钥来对任何数量的 SSH 服务器进行身份验证。

为了使用此功能,我们将首先生成一对 SSH 密钥。一旦你拥有了可以用来进行身份验证的公钥和私钥,我们将把公钥放置到 PVE 主机上,以便使用 SSH 密钥认证进行登录。一旦完成这两个步骤,你将检查是否能够登录到 PVE 主机。

提示

在接下来的示例中,rgoldman作为用户名的占位符,而192.168.1.200作为 PVE 的 IP 地址占位符。请根据实际情况替换它们。

  1. 在与 PVE 主机处于同一局域网的工作站上,生成一对 SSH 密钥:

        ssh-keygen
    
    
  2. 在第一个提示中,按Enter确认密钥位置:

        Generating public/private rsa key pair.
        Enter file in which to save the key (/home/rgoldman/.ssh/id_rsa):
    
    
  3. 在接下来的提示中,你可以选择创建并确认一个可选的密码短语;使用密码短语将防止攻击者从你的工作站访问 PVE 主机。另一方面,每次你希望使用密钥进行身份验证时,都需要输入密码短语:

        Created directory '/home/rgoldman/.ssh'.
        Enter passphrase (empty for no passphrase):
        Enter same passphrase again:
    
  4. 查看是否有确认信息显示密钥已创建,你应该会看到类似以下的终端输出:

        Your identification has been saved in /home/rgoldman/.ssh/id_rsa.
        Your public key has been saved in /home/rgoldman/.ssh/id_rsa.pub.
        The key fingerprint is:
        a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
        The key's randomart image is:
        +--[ RSA 2048]----+
        |     ..o         |
        |   E o= .        |
        |    o. o         |
        |        ..       |
        |      ..S        |
        |     o o.        |
        |   =o.+.         |
        |. =++..          |
        |o=++.            |
        +-----------------+
    
    

    类似于前面示例的输出确认了你已经拥有公钥和私钥,可以用来进行身份验证。

    接下来,让我们将公钥放置到 PVE 主机上,这样你就可以使用 SSH 密钥认证登录。

  5. 通过列出~/.ssh/的内容来确认密钥是否存在;确保id_rsaid_rsa.pub都出现在结果中:

        ls ~/.ssh/
    
    
  6. 接下来,使用ssh-copy-id工具将新的公钥推送到 PVE 主机,语法如下(假设用户名为rgoldman,PVE 主机的 IP 地址为192.168.1.200):

        ssh-copy-id rgoldman@192.168.1.200
    
    
  7. 就这样。现在确认你能在没有密码的情况下登录:

        ssh rgoldman@192.168.1.200
    
    

如果你能够在不输入密码的情况下通过 SSH 登录到 PVE 帐户,那么你已经成功为你的帐户配置了基于 SSH 密钥的身份验证。

以下的图片展示了该交易过程:

依赖于基于密钥的身份验证

SSH 密钥认证

但请注意,你的基于密码的身份验证机制仍然处于活动状态;SSH 服务器仍然暴露在暴力破解或社交工程攻击下。

以下步骤将禁用服务器上的基于密码的身份验证。如果你计划从其他主机访问 PVE,但尚未复制密钥(或者你还不确定基于密钥的身份验证是否有效),那么请勿继续此步骤:

  1. 使用 SSH 从本地工作站登录到 PVE 主机。

  2. 提升权限:

        su -
    
    
  3. 使用nano或其他纯文本编辑器打开 SSH 守护进程配置文件:

        nano /etc/ssh/sshd_config
    
    
  4. 浏览文件内容,查找以下指令:

        PasswordAuthentication yes
    
    
  5. 将指令更改为如下所示:

        PasswordAuthentication no
    
    
  6. 使用 Ctrl + XYEnter 保存文件并关闭编辑器。

  7. 重启 SSH 守护进程:

        /etc/init.d/ssh restart
    
    

现在,我们可以通过 SSH 访问 Proxmox VE,而无需担心密码强度或受到暴力破解攻击或社会工程学攻击的风险。

然而需要注意的是,当我们依赖基于密钥的认证时,确保密钥的安全至关重要。这意味着,我们需要始终记得锁定工作站,并用强密码保护我们的工作站账户。

提示

了解更多关于 SSH 的信息

要了解更多关于 SSH 和认证的信息,可以访问以下资源:

www.debian-administration.org/article/530/SSH_with_authentication_key_instead_of_password

www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server

debian-handbook.info/browse/stable/sect.remote-login.html

若要了解更多关于 SSH 的强化策略,请访问 howto.biapy.com/en/debian-gnu-linux/system/security/harden-the-ssh-access-security-on-debian

管理补丁

正如我们所发现的,针对 VENOM 漏洞的补丁在漏洞公开的同一天就已提供给 Debian;PVE 管理员只需要更新和升级并重启 PVE 来宾,就能消除这一威胁。这应当让我们更加重视为 Proxmox VE 主机及其来宾(无论是容器还是虚拟机)应用安全补丁的重要性。

然而,无论它提供多少保障,定期为多台机器应用补丁仍然是件繁琐的事情。

对于 PVE 主机和 Ubuntu 或 Debian 来宾,有几种工具可以减轻单调的工作。找到全自动升级与最小交互之间的最佳平衡,同时确保补丁不会干扰操作,是其中的关键所在。

在本节中,我们将配置一个名为unattended-upgrades的工具,定期只应用安全升级。其他补丁则留给我们凭借最佳判断来处理。

使用 APT 工具安装 unattended-upgrades:

su -
apt-get update
apt-get install -y unattended-upgrades

然后,配置自动化的安全升级:

  1. unattended-upgrades 软件包的默认配置文件位于/etc/apt/apt.conf.d/50unattended-upgrades;我们来看看它:

        nano /etc/apt/apt.conf.d/50unattended-upgrades
    
    
  2. 查找以下配置段落(//符号前置于某些行前,这样会将指令注释掉,忽略这些指令):

        // Automatically upgrade packages from these (origin:archive) pairs
        Unattended-Upgrade::Allowed-Origins {
                "${distro_id}:${distro_codename}-security";
        //      "${distro_id}:${distro_codename}-updates";
        //      "${distro_id}:${distro_codename}-proposed";
        //      "${distro_id}:${distro_codename}-backports";
        };
    
    
  3. 确保包含 "${distro_id}:${distro_codename}-security"; 的行没有被注释掉。此指令指示该工具允许从安全仓库进行 unattended-upgrades,仅限于安全仓库。

  4. 通过按下 Ctrl + XYEnter 键退出配置文件,以保存你所做的任何更改。

  5. 接下来,让我们检查 /etc/apt/apt.conf.d/20auto-upgrade 的配置,以确保 Debian 配置为定期更新包列表,并启用了 unattended-upgrades:

        nano /etc/apt/apt.conf.d/20auto-upgrade
    
    
  6. 确保文件中出现以下几行,和这里一样:

        APT::Periodic::Update-Package-Lists "1";
        APT::Periodic::Unattended-Upgrade "1";
    
    
  7. 配置了 unattended-upgrades 后,通过在终端输入 exit 来降低权限。

提示

unattended-upgrades 工具所做的更改会记录在 /var/log/unattended-upgrades/unattended-upgrades.log 中。

相同的包可以用于自动化为运行 Ubuntu、Debian 或 LinuxMint 的 Proxmox VE 客户机应用安全补丁。

提示

要了解更多关于 unattended-upgrades 包的信息,请参阅以下文档:wiki.debian.org/UnattendedUpgrades

debian-handbook.info/browse/stable/sect.regular-upgrades.html

企业订阅

虽然 PVE 可能是开源的,但 Proxmox Server Solutions(Proxmox VE 背后的公司)强烈鼓励用户为 Proxmox VE 购买订阅(www.proxmox.com/en/proxmox-ve/support):

"Proxmox VE 订阅是一个简单且实惠的解决方案,可让你访问 Proxmox VE 企业仓库,获得稳定的软件更新和安全增强功能,以及技术支持服务。订阅帮助你在公司内自信地运行 Proxmox VE。"

"通过将优秀的开源软件与经过质量保证的服务和支持相结合,Proxmox VE 订阅帮助你部署和维护最稳定、安全的开源虚拟化环境。"

从安全角度来看,获得订阅具有很大的优势:Proxmox Server Solutions 为订阅者提供企业仓库的访问权限,企业仓库提供稳定的“增强版”安全更新。

相反,使用 pve-no-subscription 仓库的用户可以访问更前沿的补丁,但也可能不太稳定。

提示

Proxmox 订阅的另一个好处是可以获得专门的、专业的支持。这并不是在评论社区支持,在我的经验中,社区支持一直非常出色。然而,订阅支持会跟踪工单并承诺提供迅速的解决方案。在生产环境中,这无疑会产生至关重要的影响。

提供四种订阅计划:高级版、标准版、基础版和社区版(最后一种计划不提供支持服务,但可以访问企业仓库)。各计划按 CPU 插槽每月收费 (www.proxmox.com/en/proxmox-ve/pricing)。

“订阅按物理服务器和 CPU 插槽授权。在 Proxmox VE 集群中,所有服务器需要具有相同的订阅级别。订阅期为购买日起的一年。”

技术支持通过基于网络和电子邮件的客户门户提供给订阅用户(支持英语或德语)。

相比之下,社区支持可以通过公共支持论坛 (forum.proxmox.com) 或通过 IRC(Freenode 网络上的 ##proxmox 频道)获得。

企业订阅

Proxmox 社区支持论坛

提供了一段视频教程,指导订阅用户上传订阅密钥到 Proxmox VE 并安装新更新,网址为 www.proxmox.com/en/training/video-tutorials/item/install-updates

从安全角度来看,pve-no-subscription 仓库在网站上被描述为提供的补丁不够稳定,不适合生产环境,而企业仓库承诺提供增强的安全补丁。你需要为你的使用案例做出有意识的选择。

如果你将非关键业务服务迁移到 Proxmox VE 虚拟基础架构中,或许社区支持和 pve-no-subscription 选项对你来说就足够了。否则,请充分考虑合适的订阅选项。

总结

保证管理员可以提供的安全性和信息显然永远不如它所消耗的精力那样全面。

在本章的第一部分,你了解了硬件虚拟化具有固有的安全优势。

然而,你也了解到,如果没有充分规划虚拟基础架构、事先明确的政策制定、无懈可击的部署,并且随后的政策执行和持续的虚拟服务器生命周期管理,许多有前景的好处将会被削弱。

接着我们概述了那些对虚拟化基础架构独有的,或在虚拟化环境中被加剧的威胁。每个要点后面都跟着具体的应对措施或更多资源的链接,帮助你解决潜在问题。

我们以具体的逐步措施总结,提出可以立即执行的补救方案,即使你继续探索和评估 Proxmox VE。

posted @ 2025-07-08 12:23  绝不原创的飞龙  阅读(689)  评论(0)    收藏  举报