适用于: ✔️ Linux 虚拟机 ✔️ 灵活规模集
Azure虚拟机使用Azure网络进行内部和外部网络通信。 本教程介绍如何部署两个虚拟机,并为这些 VM 配置Azure网络。 本教程中的示例假定 VM 托管具有数据库后端的 Web 应用程序,但本教程中未部署应用程序。 本教程中,您将学习如何:
- 创建虚拟网络和子网
- 创建公共 IP 地址
- 创建前端 VM
- 保护网络流量
- 创建后端 VM
注意
在可以在由世纪互联运营的 Microsoft Azure 中使用 Azure CLI 之前,请先运行 az cloud set -n AzureChinaCloud 来更改云环境。 若要切换回 Azure 公有云,请再次运行 az cloud set -n AzureCloud。
如果选择在本地安装并使用 CLI,本教程要求运行 Azure CLI 2.0.30 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。
VM 网络概述
Azure虚拟网络在虚拟机、Internet 和其他Azure服务(例如Azure SQL 数据库)之间实现安全的网络连接。 虚拟网络细分为称为子网的逻辑段。 子网用于控制网络流,并用作安全边界。 部署 VM 时,它通常包括附加到子网的虚拟网络接口。
完成本教程后,将创建以下虚拟网络资源:
- myVNet - VM 用于相互通信和 Internet 的虚拟网络。
- myFrontendSubnet - 前端资源使用的 myVNet 中的子网。
- myPublicIPAddress - 用于从 Internet 访问 myFrontendVM 的公共 IP 地址。
- myFrontentNic - myFrontendVM 用来与 myBackendVM 通信的网络接口。
- myFrontendVM - 用于在 Internet 与 myBackendVM 之间通信的 VM。
- myBackendNSG - 控制 myFrontendVM 和 myBackendVM 之间的通信的网络安全组。
- myBackendSubnet - 与 myBackendNSG 关联的子网,并由后端资源使用。
- myBackendNic - myBackendVM 用来与 myFrontendVM 通信的网络接口。
- myBackendVM - 使用端口 22 和 3306 与 myFrontendVM 通信的 VM。
创建虚拟网络和子网
在本教程中,使用两个子网创建单个虚拟网络。 用于托管 Web 应用程序的前端子网,以及用于托管数据库服务器的后端子网。
在创建虚拟网络之前,请使用 az group create 创建资源组。 以下示例在 chinaeast2 位置创建名为 myRGNetwork 的资源组。
az group create --name myRGNetwork --location chinaeast2
创建虚拟网络
使用 az network vnet create 命令创建虚拟网络。 在此示例中,网络命名为 mvVNet ,并提供地址前缀 10.0.0.0/16。 还创建子网,名称 为 myFrontendSubnet ,前缀 为 10.0.1.0/24。 在本教程的后面部分,前端 VM 连接到此子网。
az network vnet create \
--resource-group myRGNetwork \
--name myVNet \
--address-prefix 10.0.0.0/16 \
--subnet-name myFrontendSubnet \
--subnet-prefix 10.0.1.0/24
创建子网
使用 az network vnet subnet create 命令将新子网添加到虚拟网络。 在此示例中,子网命名 为 myBackendSubnet ,并提供地址前缀 10.0.2.0/24。 此子网用于所有后端服务。
az network vnet subnet create \
--resource-group myRGNetwork \
--vnet-name myVNet \
--name myBackendSubnet \
--address-prefix 10.0.2.0/24
此时,网络已创建并细分为两个子网,一个用于前端服务,另一个用于后端服务。 在下一部分中,将创建虚拟机并连接到这些子网。
创建公共 IP 地址
公共 IP 地址允许在 Internet 上访问Azure资源。 公共 IP 地址的分配方法可以配置为动态或静态。 默认情况下,动态分配公共 IP 地址。 解除分配 VM 时会释放动态 IP 地址。 此行为会导致 IP 地址在包含 VM 解除分配的任何操作期间发生更改。
分配方法可以设置为静态,这可确保即使在解除分配状态期间,IP 地址仍会分配给 VM。 使用静态分配的 IP 地址时,不能指定 IP 地址本身。 而是从可用地址池中分配。
az network public-ip create --resource-group myRGNetwork --name myPublicIPAddress
使用 az vm create 命令创建 VM 时,默认的公共 IP 地址分配方法是动态的。 使用 az vm create 命令创建虚拟机时,请包含 --public-ip-address-allocation static 用于分配静态公共 IP 地址的参数。 本教程未演示此操作,但在下一部分中,动态分配的 IP 地址更改为静态分配的地址。
更改分配方法
可以使用 az network public-ip update 命令更改 IP 地址分配方法。 在此示例中,前端 VM 的 IP 地址分配方法更改为静态。
首先,解除分配 VM。
az vm deallocate --resource-group myRGNetwork --name myFrontendVM
使用 az network public-ip update 命令更新分配方法。 在这种情况下,将 --allocation-method 设置为 静态。
az network public-ip update --resource-group myRGNetwork --name myPublicIPAddress --allocation-method static
启动 VM。
az vm start --resource-group myRGNetwork --name myFrontendVM --no-wait
无公共 IP 地址
通常,无需通过 Internet 访问 VM。 若要创建没有公共 IP 地址的 VM,请将 --public-ip-address "" 参数与空的双引号集一起使用。 本教程稍后将演示此配置。
创建前端 VM
使用 az vm create 命令通过 myPublicIPAddress 创建名为 myFrontendVM 的 VM。
az vm create \
--resource-group myRGNetwork \
--name myFrontendVM \
--vnet-name myVNet \
--subnet myFrontendSubnet \
--nsg myFrontendNSG \
--public-ip-address myPublicIPAddress \
--image Ubuntu2204 \
--generate-ssh-keys
保护网络流量
网络安全组(NSG)包含一系列安全规则,这些规则允许或拒绝连接到Azure虚拟网络(VNet)的资源的网络流量。 NSG 可以关联到子网或单个网络接口。 当 NSG 与网络接口关联时,它仅应用关联的 VM。 将 NSG 关联到子网时,规则将应用于连接到子网的所有资源。
网络安全组规则
NSG 规则定义允许或拒绝流量的网络端口。 这些规则可以包括源和目标 IP 地址范围,以便在特定系统或子网之间控制流量。 NSG 规则还包括优先级(介于 1 到 4096 之间)。 规则按优先级顺序进行评估。 优先级为 100 的规则在优先级为 200 的规则之前进行评估。
所有 NSG 都包含一组默认规则。 默认规则无法删除,但由于给它们分配的优先级最低,可以用创建的规则来重写它们。
NSG 的默认规则如下:
- 虚拟网络 - 源自虚拟网络并发往虚拟网络的流量在入站和出站方向均被允许。
- Internet - 允许出站流量,但入站流量被阻止。
- 负载均衡器 - 允许Azure的负载均衡器探测 VM 和角色实例的运行状况。 如果不使用负载均衡集,则可以替代此规则。
创建网络安全组
可以使用 az vm create 命令与 VM 同时创建网络安全组。 执行此操作时,NSG 与 VM 网络接口相关联,并且会自动创建 NSG 规则以允许来自任何源的端口 22 上的流量。 在本教程的前面部分,前端 NSG 是使用前端 VM 自动创建的。 还为端口 22 自动创建了 NSG 规则。
在某些情况下,可能需要预先创建 NSG,例如不应创建默认 SSH 规则,或者 NSG 应附加到子网时。
使用 az network nsg create 命令创建网络安全组。
az network nsg create --resource-group myRGNetwork --name myBackendNSG
NSG 不是与网络接口关联,而是与子网关联。 在此配置中,附加到子网的任何 VM 将继承 NSG 规则。
使用新的 NSG 更新名为 myBackendSubnet 的现有子网。
az network vnet subnet update \
--resource-group myRGNetwork \
--vnet-name myVNet \
--name myBackendSubnet \
--network-security-group myBackendNSG
保护传入流量
创建前端 VM 时,会创建一个 NSG 规则,以允许端口 22 上的传入流量。 此规则允许通过 SSH 连接到 VM。 在此示例中,还应允许端口 80 上的流量。 此配置允许在 VM 上访问 Web 应用程序。
使用 az network nsg rule create 命令为端口 80 创建规则。
az network nsg rule create \
--resource-group myRGNetwork \
--nsg-name myFrontendNSG \
--name http \
--access allow \
--protocol Tcp \
--direction Inbound \
--priority 200 \
--source-address-prefix "*" \
--source-port-range "*" \
--destination-address-prefix "*" \
--destination-port-range 80
前端 VM 只能在端口 22 和端口 80 上访问。 所有其他传入流量在网络安全组中被阻止。 可视化 NSG 规则配置可能很有帮助。 使用 az network nsg rule list 命令返回 NSG 规则 配置。
az network nsg rule list --resource-group myRGNetwork --nsg-name myFrontendNSG --output table
保护 VM 到 VM 流量的安全
还可以在 VM 之间应用网络安全组规则。 在此示例中,前端 VM 需要与端口 22 和 3306 上的后端 VM 通信。 此配置允许来自前端 VM 的 SSH 连接,并允许前端 VM 上的应用程序与后端 MySQL 数据库通信。 前端和后端虚拟机之间应阻止所有其他流量。
使用 az network nsg rule create 命令为端口 22 创建规则。 请注意,该 --source-address-prefix 参数指定值 10.0.1.0/24。 此配置可确保仅允许来自前端子网的流量通过 NSG。
az network nsg rule create \
--resource-group myRGNetwork \
--nsg-name myBackendNSG \
--name SSH \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 100 \
--source-address-prefix 10.0.1.0/24 \
--source-port-range "*" \
--destination-address-prefix "*" \
--destination-port-range "22"
现在,在端口 3306 上为 MySQL 流量添加规则。
az network nsg rule create \
--resource-group myRGNetwork \
--nsg-name myBackendNSG \
--name MySQL \
--access Allow \
--protocol Tcp \
--direction Inbound \
--priority 200 \
--source-address-prefix 10.0.1.0/24 \
--source-port-range "*" \
--destination-address-prefix "*" \
--destination-port-range "3306"
最后,由于 NSG 具有允许同一 VNet 中的 VM 之间的所有流量的默认规则,因此可以为后端 NSG 创建一个规则来阻止所有流量。 请注意,这里的 --priority 被赋值为 300,该值低于 NSG 和 MySQL 规则这两者。 此配置可确保仍允许通过 NSG 的 SSH 和 MySQL 流量。
az network nsg rule create \
--resource-group myRGNetwork \
--nsg-name myBackendNSG \
--name denyAll \
--access Deny \
--protocol Tcp \
--direction Inbound \
--priority 300 \
--source-address-prefix "*" \
--source-port-range "*" \
--destination-address-prefix "*" \
--destination-port-range "*"
创建后端 VM
现在,创建附加到 myBackendSubnet 的虚拟机。 请注意,该 --nsg 参数的值为空双引号。 无需使用 VM 创建 NSG。 VM 附加到后端子网,该子网受预先创建的后端 NSG 的保护。 此 NSG 适用于 VM。 另外,请注意,该 --public-ip-address 参数的值为空双引号。 此配置创建没有公共 IP 地址的 VM。
az vm create \
--resource-group myRGNetwork \
--name myBackendVM \
--vnet-name myVNet \
--subnet myBackendSubnet \
--public-ip-address "" \
--nsg "" \
--image Ubuntu2204 \
--generate-ssh-keys
后端 VM 只能在来自前端子网的端口 22 和端口 3306 上访问。 所有其他传入流量在网络安全组中被阻止。 可视化 NSG 规则配置可能很有帮助。 使用 az network nsg rule list 命令返回 NSG 规则 配置。
az network nsg rule list --resource-group myRGNetwork --nsg-name myBackendNSG --output table
后续步骤
在本教程中,将创建和保护与虚拟机相关的Azure网络。 你已了解如何执行以下操作:
- 创建虚拟网络和子网
- 创建公共 IP 地址
- 创建前端 VM
- 保护网络流量
- 创建后端 VM
若要了解如何保护 VM 磁盘,请参阅 磁盘的备份和灾难恢复。