你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在Azure中预配虚拟机(VM)需要除 VM 本身之外的其他组件,包括网络和存储资源。 本文介绍在Azure上运行安全 Linux VM 的最佳做法。
体系结构
下载此架构的 Visio 文件
Workflow
此示例演示了使用具有所需组件的单个虚拟机的基本部署。 虚拟机可以运行工作负荷,可管理,并且可以与公共 Internet 通信。 它旨在避免直接暴露外部威胁。
- 虚拟机上运行的任何工作负荷不会在外部公开,并且只能从同一虚拟网络或对等虚拟网络(例如在中心辐射配置中)进行访问。
- 通过安全外壳(SSH)使用Azure Bastion显示对虚拟机的管理访问权限,并且不允许直接从公共 Internet 访问。
- 对外互联网访问通过使用网络地址转换(NAT)网关及其关联的公共 IP 地址提供。
Components
资源组
资源组是包含相关Azure资源的逻辑容器。 一般情况下,可根据资源的生存期及其管理者将资源分组。
将共享同一生命周期的紧密关联资源部署到同一 资源组中。 资源组可让你以组的形式部署和监视资源,并按资源组跟踪计费成本。 还可以删除作为集的资源,这适用于测试部署。 指定有意义的资源名称,以便简化特定资源的查找并了解其角色。 有关详细信息,请参阅 针对 Azure 资源的推荐命名约定。
虚拟机
可以从已发布映像列表中选择,或者使用上传到 Azure Blob 存储的自定义托管映像或虚拟硬盘(VHD)文件来配置 VM。 Azure支持运行各种常用的 Linux 分发版,包括 Debian、Red Hat Enterprise Linux(RHEL)和 Ubuntu。 有关详细信息,请参阅 Azure 和 Linux。
Azure提供了许多不同的虚拟机大小。 如果将现有工作负荷移到Azure,请从与本地服务器最匹配的 VM 大小开始。 然后从 CPU、内存和每秒磁盘输入/输出操作次数 (IOPS) 等方面测量实际工作负荷的性能,并根据需要调整大小。
通常,选择离内部用户或客户最近的Azure区域。 并非所有 VM 大小都可在所有区域中使用。 有关详细信息,请参阅按区域提供的服务。 有关特定区域中可用的 VM 大小的列表,请从Azure CLI运行以下命令:
az vm list-sizes --location <location>
要了解如何选择发布的 VM 映像,请参阅查找 Linux VM 映像。
磁盘
为了获得最佳磁盘 I/O 性能,我们建议 使用高级 SSD,用于在固态硬盘(SSD)上存储数据。 成本取决于预配磁盘的容量。 IOPS 和吞吐量(即数据传输速率)也取决于磁盘大小,因此在预配磁盘时,请全面考虑三个因素(容量、IOPS 和吞吐量)。 高级 SSD 提供免费的突发功能,结合对工作负荷模式的理解,可为 IaaS 基础结构提供有效的 SKU 选择和成本优化策略。 这样就可以实现高性能,而无需过度预配,并最大程度地降低未使用容量的成本。
注意
目前,高级 SSD v2 和超级磁盘只能用于数据磁盘。 OS 磁盘不支持它们。
托管磁盘通过为你处理存储来简化磁盘管理。 托管磁盘不需要存储帐户。 只需指定磁盘的大小和类型,就可以将它部署为高度可用的资源。 托管磁盘还通过提供所需的性能来实现成本优化,无需过度预配置,同时考虑到工作负载模式的波动,并最大限度地减少未使用的预配置容量。
默认情况下,OS 磁盘是存储在 Azure 磁盘存储 中的托管磁盘,因此即使主机关闭也是如此。 对于无状态工作负荷(需要快速预配且不需要 OS 持久性),建议使用 临时 OS 磁盘 。 这些磁盘将 OS 映像放置在 VM 主机的本地存储上,而不是远程Azure 存储,降低读取延迟,加快重新映像,并消除托管磁盘成本。 但是,在停止(解除分配)、重置映像或主机维护修复事件时,临时 OS 磁盘上的所有数据都会丢失。 临时 OS 磁盘不支持快照或Azure 备份。 仅当 VM 完全可从自动化重新部署时,才使用临时 OS 磁盘。
默认情况下,许多 Linux 映像不会配置交换空间。 如果您的工作负荷需要交换空间,请使用 cloud-init 在临时磁盘上创建,而不是在 OS 磁盘或数据磁盘上创建。
建议为应用程序数据创建一个或多个 数据磁盘 。 数据磁盘是由Azure 存储支持的永久性托管磁盘。
创建磁盘时,该磁盘未格式化。 请登录 VM 格式化该磁盘。 在 Linux shell 中,数据磁盘显示为/dev/sdc、/dev/sdd,以及后续字母。 可以运行 lsblk 以列出块设备,包括磁盘。 要使用数据磁盘,请创建一个分区和文件系统,然后装载磁盘。 例如:
# Create a partition.
sudo fdisk /dev/sdc # Enter 'n' to partition, 'w' to write the change.
# Create a file system.
sudo mkfs -t ext3 /dev/sdc1
# Mount the drive.
sudo mkdir /data1
sudo mount /dev/sdc1 /data1
在添加数据磁盘时,将为磁盘分配逻辑单元号 (LUN) ID。 或者,可以指定 LUN ID — 例如,要更换磁盘并保留相同的 LUN ID,或者应用程序要查找特定 LUN ID。 但请记住,每个磁盘的 LUN ID 必须唯一。
你可能想要更改 I/O 计划程序,以便在使用高级存储磁盘时优化 SSD 的性能。 常见的建议是对 SSD 使用“无操作调度器”(NOOP),但应使用 iostat 等工具来监视工作负载的磁盘 I/O 性能。
许多 VM 都是使用临时磁盘创建的,该磁盘存储在主机上的物理驱动器上。 它不保存在 Azure 存储 中,可能会在重新启动和其他 VM 生命周期事件期间被删除。 只使用此磁盘存储临时数据,如页面文件或交换文件。 对于 Linux VM,临时磁盘是 /dev/disk/azure/resource-part1,并在 /mnt/resource 或 /mnt 中装入。
网络
网络组件包括以下资源:
虚拟网络。 每个 VM 都会部署到划分为子网的virtual network。
网络接口 (NIC) 。 NIC 使 VM 能够与virtual network通信。 若要为 VM 配置多个 NIC,则每种 VM 大小均已定义可用的最大 NIC 数量。
公共 IP 地址。 公共 IP 地址可能用于通过 SSH 从 Azure 外部与 VM 通信。 但是,由于存在潜在的安全风险,因此不建议这样做。
Warning
直接附加公共 IP 地址表示潜在的安全风险。 它只能在极端情况下完成,并且仅与其他安全方法(如使用网络安全组筛选流量)结合使用。
若要管理对虚拟机的访问,我们建议在通过 VPN 或Azure ExpressRoute进行连接时使用Azure Bastion或内部访问。
- 公共 IP 地址可以是动态的或静态的。 默认是动态的。 如果需要不会更改的固定 IP 地址 — 例如,如果需要创建 DNS 'A' 记录或将 IP 地址添加到安全列表,请保留静态 IP 地址。
- 还可以为 IP 地址创建完全限定的域名 (FQDN)。 然后,可以在 DNS 中注册指向 FQDN 的 CNAME 记录。 有关详细信息,请参阅 在 Azure 门户中创建完全限定的域名。
网络安全组 (NSG) 。 网络安全组 用于允许或拒绝指向 VM 或子网的网络流量。 它们可以与子网相关联,也可以与附加到 VM 的单个 NIC 相关联。
- 所有 NSG 都包含一组默认规则,其中包括阻止所有入站 Internet 流量的规则。 无法删除默认规则,但其他规则可以覆盖它们。 例如,若要启用 Internet 流量,请创建允许入站流量到特定端口的规则,例如 HTTPS 的端口 443。
Azure 网络地址转换(NAT)网关。网络地址转换(NAT)网关允许专用子网中的所有实例访问互联网,同时保持完全私密。 只有作为响应数据包到达出站连接的数据包才能直通 NAT 网关。 不允许来自互联网的未经请求的入站连接。
注意
为了提高默认安全性,所有新虚拟网络都弃用隐式出站 Internet 访问。 需要使用其他资源(例如 NAT 网关、Azure标准负载均衡器或防火墙)显式配置出站 Internet 连接。 有关详细信息,请参阅 Azure 中的默认出站访问。
Azure Bastion.Azure Bastion 是一种完全托管的平台即服务解决方案,通过专用 IP 地址提供对 VM 的安全访问。 通过此配置,VM 就不需要公开在互联网上的公共 IP 地址,从而提高了安全状况。 Azure Bastion 通过传输层安全协议(TLS),使用包括 Azure 门户、本机 SSH 和 RDP 客户端在内的多种方式,直接为您的虚拟机提供安全的远程桌面协议(RDP)或 SSH 连接。
运营
SSH。 在创建 Linux VM 之前,生成 2048 位 RSA 公共/专用密钥对。 创建 VM 时,请使用公钥文件。 有关详细信息,请参阅 如何在 Azure 上将 SSH 与 Linux 和 Mac 配合使用。
诊断。 启用监视和诊断,包括基本运行状况指标、诊断基础结构日志和启动诊断。 如果 VM 陷入不可启动状态,启动诊断有助于诊断启动故障。 创建Azure 存储帐户来存储日志。 标准本地冗余存储(LRS)帐户足以用于诊断日志。 有关详细信息,请参阅 启用监控和诊断。
可用性。 VM 可能会受到计划内维护或计划外停机的影响。 可以使用 VM 重新启动日志来确定 VM 重新启动是否是由计划内维护导致的。 为了提高可用性,请在同一区域内的可用性区域中部署多个 VM。 这提供了更高的服务级别协议(SLA)。 如果可用性区域不受支持, 可用性集 可以帮助保护主机故障或主机更新。 不过,推荐在可能的情况下优先选择可用区。
备份。 若要防止意外数据丢失,请使用 Azure 备份 服务将 VM 备份到存储。 根据区域,可以使用异地冗余或区域冗余存储进行备份。 Azure 备份提供应用程序一致性备份。 对于不支持传统备份代理的性能敏感工作负荷或专用 Linux 分发版,请使用 无代理多磁盘崩溃一致性备份 功能,该功能可实现自动备份保护,而不会影响应用程序性能。
正在停止虚拟机。 Azure区分“已停止”和“已解除分配”状态。 当虚拟机的状态为“已停止”时将产生费用,但当虚拟机的状态为“已解除分配”时则不会产生费用。 在 Azure 门户中,Stop 按钮解除分配 VM。 如果在已登录时通过操作系统关闭,虚拟机(VM)会被停止,但不会解除资源分配,因此仍会产生费用。
删除 VM。 如果删除 VM,可以选择删除或保留其磁盘。 这意味着可以安全地删除 VM,而不会丢失数据。 但是,您仍需支付磁盘费用。 可以像删除任何其他Azure资源一样删除托管磁盘。 要防止意外删除,请使用资源锁锁定整个资源组或锁定单个资源(如 VM)。
Alternatives
虚拟机规模集 - 对业务运营至关重要的工作负荷不应依赖于单个虚拟机。 规模集具有在节点之间分散工作负载的功能,并且可以在流量较高时扩大规模,在流量较小时缩小规模,以尽量减少成本。
Azure 负载均衡器有助于在多个虚拟机或虚拟机规模集之间提供负载均衡。 它还可以用作 NAT 网关的替代方法,以允许从 Internet 访问工作负荷,同时支持出站访问。
应用网关将为Azure区域内 HTTP/HTTPS 工作负荷的Azure 负载均衡器提供负载均衡功能。
有关更企业级的部署,请参阅Azure登陆区域中的 Azure 虚拟机 基线体系结构。
方案详细信息
在上图中,此方案对于提供对仅限内部用户有用的非关键工作负荷非常有用。
可能的用例
单个 VM 部署可用于托管不需要向 Internet 公开的简单应用程序,并可以承受一些停机时间。 例如,这可能是一个基本的内部报告应用程序。
注意事项
这些注意事项实现Azure Well-Architected框架的支柱,这是一组指导原则,可用于提高工作负荷的质量。 有关详细信息,请参阅 Microsoft Azure Well-Architected Framework。
可靠性
可靠性可确保应用程序符合你对客户的承诺。 有关详细信息,请参阅 可靠性设计评审清单。
由于此体系结构只是使用单个虚拟机的简单示例,因此可靠性级别最低。 虚拟机本身或正在运行的主机的任何问题都会导致中断,导致任何托管工作负荷不可用。 对于需要更高可用性的任何工作负荷,应部署包含相同工作负荷的多个虚拟机,这些实例位于适当的负载均衡解决方案后面。 如果这些 VM 位于同一区域中,则应跨可用性区域(其中受支持)部署这些 VM,并在工作负荷基于 HTTP/HTTPS 的情况下添加到Azure 标准负载均衡器或应用程序网关的后端。 这样,如果后端中的单个虚拟机关闭,工作负荷仍可用。
虚拟机规模集 是另一种选择,可帮助简化多节点工作负载的管理,这些工作负载需要具有自动缩放实例数量的能力,该能力根据 CPU 和/或内存使用等多个指标进行调整。
高可用性/灾难恢复 (HA/DR)
为了减少“爆炸半径”,工作负荷应部署在多个区域,并利用 Azure 着陆区指南。 这可以是主动-被动(Active-Passive)配置,在主要区域不可用时,会故障转移到次要区域;或者是主动-主动(Active-Active)架构,两者均在为用户提供服务。 有关示例,请参阅下面后续步骤下为 HA/DR 生成的多层 Web 应用程序。
本文中的示例使用 Azure Site Recovery 将各个虚拟机的磁盘复制到次要区域,其中Site Recovery可用于将这些虚拟机故障转移到具有低恢复点目标(RPO)/恢复时间目标(RTO)的次要区域。
请务必评估体系结构以满足所有组件的 HA/DR 要求,而不仅仅是虚拟机。 在所有这些决策中,包括对网络、标识和数据等因素的考虑。
安全性
安全性针对蓄意攻击及滥用宝贵数据和系统提供保障措施。 有关详细信息,请参阅 安全设计评审清单。
使用 Microsoft Defender for Cloud 获取Azure资源安全状态的中心视图。 Defender for Cloud 会监视潜在的安全问题,并全面显示部署的安全运行状况。 Defender for Cloud 按Azure订阅进行配置。 按照连接您的Azure订阅中所描述启用安全数据收集。 启用数据收集后,Defender for Cloud 会自动扫描该订阅下创建的所有 VM。
补丁管理。 如果启用,Defender for Cloud 会检查是否缺少任何安全更新和关键更新。
反恶意软件。 如果启用,Defender for Cloud检查是否安装了反恶意软件。 还可以使用 Defender for Cloud 从 Azure 门户中安装反恶意软件。
访问控制。 使用 Azure 基于角色的访问控制(Azure RBAC)来控制对Azure资源的访问。 Azure RBAC 允许向 DevOps 团队成员分配授权角色。 例如,“读者”角色可以查看Azure资源,但不能创建、管理或删除资源。 某些权限特定于Azure资源类型。 例如,虚拟机参与者角色可以重启或解除分配 VM、重置管理员密码并创建新的 VM。 此体系结构可能有用的其他 内置角色 包括 开发测试实验室用户 和 网络参与者。
注意
Azure RBAC 不会限制登录到 VM 的用户可以执行的操作。 这些权限由来宾 OS 上的帐户类型决定。
审核日志。 使用审核日志可查看预配操作和其他 VM 事件。
数据加密。 在主机启用 加密以实现 VM 数据的端到端加密,包括临时磁盘和磁盘缓存。 主机加密处理 VM 主机基础结构上的加密,并且不会消耗 VM CPU 资源,这与基于来宾的加密不同。 可以将 客户管理密钥用于 Azure 密钥保管库,以实现持久性 OS 和数据磁盘的管理。 临时磁盘和 临时 OS 磁盘使用平台管理的密钥进行加密。 在预配 VM 之前,请验证所选的 VM 大小是否支持主机加密。
成本优化
成本优化是研究减少不必要的开支和提高运营效率的方法。 有关详细信息,请参阅 成本优化的设计评审清单。
根据用途和工作负荷,有多种 VM 大小可供选择。 该范围从 Bs 系列中最经济的选项到最新针对机器学习优化的 GPU 虚拟机。 有关可用选项的信息,请参阅 Azure Linux VM 定价。
对于可预测的工作负荷,您可以通过签订一年或三年的合同,使用 Azure 预留和 Azure 计算节省计划,以获得相较于按需付费价格的显著节省。 对于没有可预测的完成时间或资源消耗的工作负荷,请考虑即用即付选项。
使用 Azure 现成 VM 运行可以中断的工作负荷,并且不需要在预定的时间范围或 SLA 内完成。 Azure 会在有可用容量时部署 Spot 虚拟机,并在需要回收容量时将其逐出。 与抢占式虚拟机相关的成本显著降低。 考虑使用 Spot VM 处理以下工作负载:
- 高性能计算方案、批处理作业或视觉渲染应用程序。
- 测试环境,包括持续集成和持续交付工作负荷。
- 大规模无状态应用程序。
使用 Azure 定价计算器估算成本。
有关详细信息,请参阅 Microsoft Azure Well-Architected Framework 中的成本部分。
卓越运营
卓越运营涵盖部署应用程序并使其在生产环境中运行的运营流程。 有关详细信息,请参阅 卓越运营的设计评审清单。
使用基础结构即代码 (IaC) 模板预配Azure资源及其依赖项。 可以使用 Bicep、Azure 资源管理器 模板(ARM 模板)或 Terraform 编写这些内容,具体取决于偏好和已建立的工具选择。 这些模板允许持续集成/持续部署(CI/CD)过程作为部署和配置资源的 自动化部署 方法的一部分。 此方法支持体系结构的版本控制,并确保环境之间的一致性,以及强制实施可重现性、安全性和符合性。
为了帮助监视和诊断问题,请确保在资源上启用诊断日志,并可用于 Azure Monitor,以帮助分析和优化资源。 这些日志可用于实现关键事件的警报和通知,在某些情况下,允许在 IT 服务管理(ITSM)系统中自动修正或记录票证。
性能效率
性能效率侧重于优化云工作负载,以加快速度、响应能力和可伸缩性。 有关详细信息,请参阅 性能效率的设计评审清单。
一些关键目标包括最小化延迟、确保可缩放的体系结构、优化资源利用率以及持续提高系统性能。
如上所述,有关工作负荷体系结构、VM SKU 和磁盘配置的决策可能会对工作负荷的执行方式产生重大影响。 做出正确的选择可能会阻止将来重新构建解决方案,从而增加灵活性并节省成本。
在开发体系结构时,请务必考虑以下几点:
- 如果工作负荷具有动态负载,请使用虚拟机规模集。 例如,在大流量时进行横向扩展,然后在流量减少时缩回。 这将确保足够的处理能力,同时仍然控制成本。
- 选择适当的 VM 和磁盘 SKU 以满足在处理过程中所需的 IOPS。 配置缓存以进一步提高性能。
- 如果工作负荷异常延迟敏感,请使用 邻近放置组(PPG) 确保多个 VM 在物理上彼此靠近,以获得更好的性能。 PPG 还可以与可用性集结合使用,将低延迟与单个物理数据中心内的高可用性相结合。
- 在可能的情况下,启用加速网络以最大程度地减少组件之间的延迟。
- 设计网络体系结构以最大程度地减少不必要的跃点。
- 使用 Azure Monitor、VM Insights 和其他工具持续分析指标并创建更新的性能基线。 使用性能信息确定实现更改的位置,然后针对这些基线进行测试。
Contributors
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- Donnie Trumpower |高级云和 AI 解决方案架构师
后续步骤
- 若要创建 Linux VM,请参阅 Quickstart:在 Azure 门户中创建 Linux 虚拟机。
- 若要在 Linux VM 上安装 NVIDIA 驱动程序,请参阅 在运行 Linux 的 N 系列 VM 上安装 NVIDIA GPU 驱动程序。
- 若要预配 Linux VM,请参阅
使用 Azure CLI 。 - Azure 中的默认出站访问。
- 有关更复杂的体系结构的示例,请参阅Azure登陆区域中的 Azure 虚拟机 基线体系结构。
- 若要跨区域部署 Web 应用程序,请参阅 为 HA/DR 生成的多层 Web 应用程序。
相关资源
在 Azure