除 VM 本身以外,在 Azure 中预配虚拟机 (VM) 还需要其他一些组件,包括网络和存储资源。 本文介绍在 Azure 上运行安全 Linux VM 的最佳做法。
体系结构
下载此体系结构的 Visio 文件。
工作流
资源组
资源组是保存相关 Azure 资源的逻辑容器。 一般情况下,可根据资源的生存期及其管理者将资源分组。
将共享相同生命周期、密切相关的资源放入同一资源组。 资源组可让你以组的形式部署和监视资源,并按资源组跟踪计费成本。 还可以删除作为集的资源,这适用于测试部署。 指定有意义的资源名称,以便简化特定资源的查找并了解其角色。 有关详细信息,请参阅 Azure 资源的建议命名约定。
虚拟机
可以通过发布的映像列表或上传到 Azure Blob 存储的自定义托管映像或虚拟硬盘 (VHD) 文件来预配 VM。 Azure 支持运行各种流行的 Linux 发行版,包括 Debian、Red Hat Enterprise Linux (RHEL) 和 Ubuntu。 有关详细信息,请参阅 Azure 和 Linux。
Azure 提供多种不同的虚拟机大小。 有关详细信息,请参阅 Azure 中虚拟机的大小。 如果要将现有工作负荷转移到 Azure,开始时请先使用与本地服务器最匹配的 VM 大小。 然后从 CPU、内存和每秒磁盘输入/输出操作次数 (IOPS) 等方面测量实际工作负荷的性能,并根据需要调整大小。
通常选择离内部用户或客户最近的 Azure 区域。 并非所有 VM 大小都可在所有区域中使用。 有关详细信息,请参阅每个区域的服务。 要获取特定区域中可用 VM 大小的列表,请从 Azure CLI 运行以下命令:
az vm list-sizes --location <location>
要了解如何选择发布的 VM 映像,请参阅查找 Linux VM 映像。
磁盘
为获得最佳磁盘 I/O 性能,建议使用高级存储,它在固态硬盘 (SSD) 上存储数据。 成本取决于预配磁盘的容量。 IOPS 和吞吐量(即数据传输速率)也取决于磁盘大小,因此在预配磁盘时,请全面考虑三个因素(容量、IOPS 和吞吐量)。 高级存储还具有免费突发功能功能,结合对工作负荷模式的了解,可为 IaaS 基础结构提供有效的 SKU 选择和成本优化策略,在不超量预配的情况下实现高性能,并最大限度地降低未使用容量的成本。
托管磁盘可代为处理存储,从而简化磁盘管理。 托管磁盘不需要存储帐户。 只需指定磁盘的大小和类型,就可以将它部署为高度可用的资源。 托管磁盘还可以提供所需的性能而无需超量预配,考虑工作负荷模式的波动,并最大限度地减少未使用的预配容量,从而优化成本。
OS 磁盘是存储在 Azure 存储中的 VHD,因此即使主机关闭,OS 磁盘也仍然存在。 VHD 可以是本地连接的 NVMe 或者可在许多 VM SKU 上使用的类似设备。
临时磁盘可在不增加成本的情况下提供良好的性能,但它也存在明显的缺点,比如非持久性、容量有限以及仅限于 OS 和临时磁盘使用。 对于 Linux VM,OS 磁盘是 /dev/sda1
。 我们还建议创建一个或多个数据磁盘(用于保存应用程序数据的持久性 VHD)。
刚创建的 VHD 尚未格式化, 请登录 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 的性能进行优化,因为使用高级存储帐户的 VM 的磁盘是 SSD。 常见的建议是对 SSD 使用 NOOP 计划程序,但应使用 iostat 等工具来监视工作负荷的磁盘 I/O 性能。
使用临时磁盘创建 VM。 此磁盘存储在主机的物理驱动器上。 它并非保存在 Azure 存储中,并且在重启期间以及发生其他 VM 生命周期事件期间可能会被删除。 只使用此磁盘存储临时数据,如页面文件或交换文件。 对于 Linux VM,临时磁盘是 /dev/disk/azure/resource-part1
,并在 /mnt/resource
或 /mnt
中装入。
网络
网络组件包括以下资源:
虚拟网络。 每个 VM 都会部署到可细分为子网的虚拟网络中。
网络接口 (NIC) 。 NIC 使 VM 能够与虚拟网络进行通信。 如果 VM 需要多个 NIC,那么每种 VM 大小都定义了最大 NIC 数量。
公共 IP 地址。 需要使用公共 IP 地址才能与 VM 通信 - 例如,通过远程桌面协议 (RDP)。 公共 IP 地址可以是动态的或静态的。 默认是动态的。
- 如果需要不会更改的固定 IP 地址 — 例如,如果需要创建 DNS 'A' 记录或将 IP 地址添加到安全列表,请保留静态 IP 地址。
- 还可以为 IP 地址创建完全限定的域名 (FQDN)。 然后,可以在 DNS 中注册指向 FQDN 的 CNAME 记录。 有关详细信息,请参阅在 Azure 门户中创建完全限定的域名。
网络安全组 (NSG) 。 网络安全组用于允许或拒绝向 VM 传送网络流量。 NSG 可与子网或单个 VM 实例相关联。
- 所有 NSG 都包含一组默认规则,其中包括阻止所有入站 Internet 流量的规则。 无法删除默认规则,但其他规则可以覆盖它们。 要启用 Internet 流量,请创建允许特定端口的入站流量的规则 — 例如,将端口 80 用于 HTTP。 要启用安全外壳 (SSH),请添加允许 TCP 端口 22 的入站流量的 NSG 规则。
Azure NAT 网关。网络地址转换 (NAT) 网关允许专用子网中的所有实例连接到 Internet,同时保持完全专用。 只有作为响应数据包到达出站连接的数据包才能直通 NAT 网关。 不允许来自互联网的未经请求的入站连接。
Azure Bastion。Azure Bastion 是一个完全托管的平台即服务解决方案,可通过专用 IP 地址对虚拟机进行安全访问。 通过此配置,VM 就不需要公开在互联网上的公共 IP 地址,从而提高了安全状况。 Azure Bastion 可通过各种方法,包括 Azure 门户或本地 SSH 或 RDP 客户端,直接通过传输层安全 (TLS) 提供与虚拟机的安全 RDP 或 SSH 连接。
Operations
SSH。 在创建 Linux VM 之前,生成 2048 位 RSA 公共/专用密钥对。 创建 VM 时,请使用公钥文件。 有关详细信息,请参阅如何在 Azure 中将 SSH 与 Linux 和 Mac 配合使用。
诊断。 启用监视和诊断,包括基本运行状况指标、诊断基础结构日志和启动诊断。 如果 VM 陷入不可启动状态,启动诊断有助于诊断启动故障。 创建用于存储日志的 Azure 存储帐户。 标准的本地冗余存储 (LRS) 帐户足以存储诊断日志。 有关详细信息,请参阅启用监视和诊断。
可用性。 VM 可能会受到计划内维护或计划外停机的影响。 可以使用 VM 重新启动日志来确定 VM 重新启动是否是由计划内维护导致的。 若要提高可用性,请在可用性集中或跨区域中的可用性区域部署多个 VM。 这两种配置都提供更高的服务级别协议 (SLA)。
备份 为了防止数据意外丢失,请使用 Azure 备份服务将 VM 备份到异地冗余存储。 Azure 备份提供应用程序一致性备份。
停止 VM。 Azure 对“已停止”和“已解除分配”状态进行了区分。 VM 状态为“已停止”时,将计费,但 VM 为“已解除分配”状态时,则不计费。 在 Azure 门户中,“停止”按钮可解除分配 VM。 如果在已登录时通过 OS 关闭,VM 会停止,但不会解除分配,因此仍会产生费用。
删除 VM。 如果删除 VM,可以选择删除或保留其磁盘。 这意味着可以安全地删除 VM,而不会丢失数据。 但是,您仍需支付磁盘费用。 可以像删除其他 Azure 资源一样删除托管磁盘。 要防止意外删除,请使用资源锁锁定整个资源组或锁定单个资源(如 VM)。
注意事项
这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负荷质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架。
成本优化
成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化支柱概述。
根据用途和工作负荷,有多种 VM 大小可供选择。 范围包括 Bs 系列中最划算的选项,以及针对机器学习优化的最新 GPU VM。 有关可用选项的信息,请参阅 Azure Linux VM 定价。
对于可预测的工作负荷,请使用一年或三年合同的 Azure 预留和适用于计算的 Azure 节省计划,与即用即付价格相比,这可实现显著节省。 对于没有可预测的完成时间或资源消耗的工作负荷,请考虑即用即付选项。
使用 Azure 现成 VM 运行可能中断且不需要在预定的时间范围或 SLA 内完成的工作负荷。 如果存在可用容量,Azure 会部署现成 VM,并在需要恢复容量时逐出。 与现成虚拟机相关的成本明显降低。 请考虑为以下工作负荷使用现成 VM:
- 高性能计算方案、批处理作业或视觉渲染应用程序。
- 测试环境,包括持续集成和持续交付工作负荷。
- 大规模无状态应用程序。
使用 Azure 定价计算器估算成本。
有关详细信息,请参阅 Microsoft Azure 架构良好的框架中的“成本”部分。
安全性
安全性针对蓄意攻击及滥用宝贵数据和系统提供保障措施。 有关详细信息,请参阅安全性支柱概述。
要集中查看 Azure 资源的安全状态,请使用 Microsoft Defender for Cloud。 Defender for Cloud 会监视潜在的安全问题,并全面显示部署的安全运行状况。 Defender for Cloud 按 Azure 订阅进行配置。 根据将 Azure 订阅加入 Defender for Cloud 标准中所述启用安全数据收集。 启用数据收集后,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 事件。
数据加密。 如果需要加密 OS 磁盘和数据磁盘,请使用 Azure 磁盘加密。
卓越运营
卓越运营涵盖了部署应用程序并使其在生产环境中保持运行的运营流程。 有关详细信息,请参阅卓越运营支柱概述。
使用单个 Azure 资源管理器模板来预配 Azure 资源及其依赖项。 由于所有资源都在同一个虚拟网络中,因此它们被隔离在同一基本工作负荷中。 它可以更轻松地将工作负荷的特定资源关联到某个 DevOps 团队,使该团队能够独立管理这些资源的所有方面。 这种隔离可使 DevOps 团队执行持续集成和持续交付 (CI/CD)。
此外,可以使用不同的 Azure 资源管理器模板并将它们与 Azure DevOps Services 集成,以便在几分钟内预配不同的环境,例如仅在需要时复制生产场景或负载测试环境,从而节省成本。
如需更高可用性的体系结构,请参阅 Azure 中带有 Apache Cassandra 的 Linux N 层应用程序,参考体系结构包括多个 VM,并且每个 VM 都包含在一个可用性集中。
请考虑使用 Azure Monitor 来分析和优化基础结构的性能,在不登录到虚拟机的情况下监视和诊断网络问题。
后续步骤
- 如需创建 Linux VM,请参阅快速入门:在 Azure 门户中创建 Linux 虚拟机
- 如需在 Linux VM 上安装 NVIDIA 驱动程序,请参阅在运行 Linux 的 N 系列 VM 上安装 NVIDIA GPU 驱动程序
- 要预配 Linux VM,请参阅使用 Azure CLI 创建和管理 Linux VM
- Azure 中的默认出站访问