练习 - 配置网络访问

已完成

在本练习中,你将配置对之前在本模块中创建的虚拟机 (VM) 的访问权限。

重要

Microsoft Learn 沙盒应该仍在运行。 如果沙盒超时,则需要重做上一个练习(练习 - 创建 Azure 虚拟机)

若要验证之前创建的 VM 是否仍在运行,请使用以下命令:

az vm list


如果收到空响应 [],你需要再次完成本模块的第一个练习。 如果结果列出了当前 VM 及其设置,则可以继续。

现在,无法从 Internet 访问创建并安装 Nginx 的 VM。 你将创建一个网络安全组,该组通过允许端口 80 上的入站 HTTP 访问来对此情况进行更改。

任务 1:访问 Web 服务器

在此过程中,你将获得 VM 的 IP 地址,然后尝试访问 Web 服务器的主页。

  1. 运行以下 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)"    
    
  2. 运行以下 curl 命令来下载主页:

    curl --connect-timeout 5 http://$IPADDRESS
    

    --connect-timeout 参数指定最多允许 5 秒钟的时间进行连接。 5 秒钟后,将出现一条错误消息,该消息指出连接超时:

    curl: (28) Connection timed out after 5001 milliseconds
    

    此消息表示 VM 在超时期限内不可访问。

  3. 可选步骤是尝试通过浏览器访问 Web 服务器:

    1. 运行以下命令,将 VM 的 IP 地址打印到控制台:

      echo $IPADDRESS       
      

      将显示一个 IP 地址,例如 23.102.42.235

    2. 将显示的 IP 地址复制到剪贴板。

    3. 打开新的浏览器标签页,然后转到 Web 服务器。 片刻之后,你会看到没有建立连接。 如果等待浏览器超时,系统会显示如下所示的内容:

      Screenshot of a web browser showing an error message that says the connection timed out.

    4. 请将此浏览器选项卡保持为打开状态以供之后使用。

任务 2:列出当前的网络安全组规则

Web 服务器不可访问。 要找出原因,请检查你当前的 NSG 规则。

  1. 运行以下 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

  2. 运行以下 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 格式的文本。 在下一步中,你将运行类似的命令,使此输出更容易理解。

  3. 再次运行 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) 上进行入站访问。

  1. 运行以下 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。 在本例中,优先级无关紧要。 如果端口范围重叠,则需要考虑优先级。

  2. 若要验证配置,请运行 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 后,更新后的规则可能需要一些时间才能传播。 重试下一步,并在尝试之间暂停,直到获得所需的结果。

  1. 运行之前运行过的 curl 命令:

    curl --connect-timeout 5 http://$IPADDRESS
    

    可看到以下内容:

    <html><body><h2>Welcome to Azure! My name is my-vm.</h2></body></html>
    
  2. 可选步骤是刷新指向 Web 服务器的浏览器标签页。 可看到以下内容:

    A screenshot of a web browser showing the home page from the web server. The home page displays a welcome message.

干得好。 实际上,你可创建一个独立的网络安全组,其中包括所需的入站和出站网络访问规则。 如果有多个用途相同的 VM,则可在创建 NSG 时将其分配给每个 VM。 这样的话,你就可在一个集中的规则集中控制对多个 VM 的网络访问。

清理

完成本模块后,沙盒会自动清理资源。

使用自己的订阅时,最好在项目结束时确定是否仍然需要所创建的资源。 让资源保持运行状态会耗费成本。 可以逐个删除资源,也可以删除资源组以删除整个资源集。