练习 - 配置网络访问
在本练习中,你需要配置对之前在本模块中创建的虚拟机 (VM) 的访问权限。
重要
Microsoft Learn 沙盒应该仍在运行。 如果沙盒超时,则需要重做上一个练习(练习 - 创建 Azure 虚拟机)。
若要验证之前创建的 VM 是否仍在运行,请使用以下命令:
az vm list
如果收到空响应 []
,你需要再次完成本模块的第一个练习。 如果结果列出了当前 VM 及其设置,则可以继续。
现在,无法从 Internet 访问创建并安装 Nginx 的 VM。 你需要创建一个网络安全组,该组通过允许端口 80 上的入站 HTTP 访问来对此情况进行更改。
任务 1:访问 Web 服务器
在此过程中,你将获得 VM 的 IP 地址,然后尝试访问 Web 服务器的主页。
运行以下
az vm list-ip-addresses
命令,获取 VM 的 IP 地址并将结果存储为 Bash 变量:IPADDRESS="$(az vm list-ip-addresses \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name my-vm \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)"
运行以下
curl
命令来下载主页:curl --connect-timeout 5 http://$IPADDRESS
--connect-timeout
参数指定最多允许 5 秒钟的时间进行连接。 5 秒钟后,将出现一条错误消息,该消息指出连接超时:curl: (28) Connection timed out after 5001 milliseconds
此消息表示 VM 在超时期限内不可访问。
可选步骤是尝试通过浏览器访问 Web 服务器:
运行以下命令,将 VM 的 IP 地址打印到控制台:
echo $IPADDRESS
将显示一个 IP 地址,例如 23.102.42.235。
将显示的 IP 地址复制到剪贴板。
打开新的浏览器标签页,然后转到 Web 服务器。 片刻之后,你会看到没有建立连接。 如果等待浏览器超时,系统会显示如下所示的内容:
请将此浏览器选项卡保持为打开状态以供之后使用。
任务 2:列出当前的网络安全组规则
Web 服务器不可访问。 要找出原因,请检查你当前的 NSG 规则。
运行以下
az network nsg list
命令,列出与你的 VM 关联的网络安全组:az network nsg list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --query '[].name' \ --output tsv
你会看到此输出:
my-vmNSG
Azure 上的每个 VM 至少与一个网络安全组关联。 在本例中,Azure 创建了一个名为 my-vmNSG 的 NSG。
运行以下
az network nsg rule list
命令,列出与名为 my-vmNSG 的 NSG 相关的规则:az network nsg rule list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --nsg-name my-vmNSG
你会在输出中看到一大片采用 JSON 格式的文本。 在下一步中,你将运行类似的命令,使此输出更容易理解。
再次运行
az network nsg rule list
命令。 这次,使用--query
参数仅检索每条规则的名称、优先级、受影响的端口和访问权限(允许或拒绝)。--output
参数将输出格式设置为表格,以便于理解。az network nsg rule list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --nsg-name my-vmNSG \ --query '[].{Name:name, Priority:priority, Port:destinationPortRange, Access:access}' \ --output table
你会看到此输出:
Name Priority Port Access ----------------- ---------- ------ -------- default-allow-ssh 1000 22 Allow
你会看到默认规则 default-allow-ssh。 此规则允许通过端口 22 (SSH) 进行入站连接。 SSH(安全外壳)是 Linux 上使用的协议,它使管理员能够远程访问系统。 此规则的优先级为 1000。 规则按优先级顺序进行处理,其中编号更小的规则先于编号更大的数字进行处理。
默认情况下,Linux VM 的 NSG 仅允许在端口 22 上进行网络访问。 此端口使管理员可以访问系统。 你还需要允许端口 80 上的入站连接,这允许通过 HTTP 进行访问。
任务 3:创建网络安全规则
在这里,你要创建一条网络安全规则来允许在端口 80 (HTTP) 上进行入站访问。
运行以下
az network nsg rule create
命令创建一条名为 allow-http 的规则,该规则允许在端口 80 上进行入站访问:az network nsg rule create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --nsg-name my-vmNSG \ --name allow-http \ --protocol tcp \ --priority 100 \ --destination-port-range 80 \ --access Allow
为了方便学习,此处将优先级设置为 100。 在本例中,优先级无关紧要。 如果端口范围重叠,则需要考虑优先级。
若要验证配置,请运行
az network nsg rule list
查看更新后的规则列表:az network nsg rule list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --nsg-name my-vmNSG \ --query '[].{Name:name, Priority:priority, Port:destinationPortRange, Access:access}' \ --output table
你会同时看到规则 default-allow-ssh 和新规则 allow-http:
Name Priority Port Access ----------------- ---------- ------ -------- default-allow-ssh 1000 22 Allow allow-http 100 80 Allow
任务 4:再次访问 Web 服务器
你现已将网络访问配置为端口 80,接下来尝试再次访问 Web 服务器。
注意
更新 NSG 后,更新后的规则可能需要一些时间才能传播。 重试下一步,并在尝试之间暂停,直到获得所需的结果。
运行之前运行过的
curl
命令:curl --connect-timeout 5 http://$IPADDRESS
你会看到此响应:
<html><body><h2>Welcome to Azure! My name is my-vm.</h2></body></html>
可选步骤是刷新指向 Web 服务器的浏览器标签页。 你会看到主页:
干得好。 实际上,你可创建一个独立的网络安全组,其中包括所需的入站和出站网络访问规则。 如果有多个用途相同的 VM,则可在创建 NSG 时将其分配给每个 VM。 这样的话,你就可在一个集中的规则集中控制对多个 VM 的网络访问。
清理
完成本模块后,沙盒会自动清理资源。
使用自己的订阅时,最好在项目结束时确定是否仍然需要所创建的资源。 让资源保持运行状态会耗费成本。 可以逐个删除资源,也可以删除资源组以删除整个资源集。