使用 Azure CLI 2.0 创建具有静态公共 IP 地址的 VM

可以在 Azure 中创建虚拟机 (VM),然后通过使用公共 IP 地址向公共 Internet 公开这些虚拟机。 默认情况下,公共 IP 是动态的,并且在删除 VM 时,关联到它们的地址可能会更改。 若要确保 VM 始终使用同一公共 IP 地址,需要创建一个静态公共 IP。

在 VM 中实现静态公共 IP 之前,有必要了解何时可以使用静态公共 IP,以及如何使用它们。 阅读 IP 寻址概述,了解有关 Azure 中 IP 寻址的详细信息。

Azure 具有用于创建和处理资源的两个不同的部署模型:Resource Manager 和经典。 本文介绍如何使用 Resource Manager 部署模型。Azure 建议对大多数新的部署使用该模型,而不是经典部署模型。

方案

本文档将指导完成使用分配给虚拟机 (VM) 的静态公共 IP 地址的部署。 在此方案中,你有一个具有自己的静态公共 IP 地址的 VM。 VM 属于名为 FrontEnd 的子网,并且在该子网中还具有一个静态专用 IP 地址 (192.168.1.101)。

需要 SSL 连接并且其中的 SSL 证书链接到 IP 地址的 Web 服务器可能需要静态 IP 地址。

图像说明

你可以按照以下步骤来部署上图中所示的环境。

创建 VM

可以使用 Azure CLI 2.0(本文)或 Azure CLI 1.0 完成此任务。 在以下步骤中,"" 中的变量值使用本方案的设置创建资源。 根据需要更改环境值。

Note

在 Azure 中国区使用 Azure CLI 2.0 之前,请先运行 az cloud set -n AzureChinaCloud 来改变云环境。如果想切回国际版 Azure,请再次运行 az cloud set -n AzureCloud

  1. 安装 Azure CLI 2.0 (若尚未安装)。
  2. 通过完成为 Linux VM 创建 SSH 公钥和私钥对中的步骤创建适用于 Linux VM 的 SSH 公钥和私钥对。
  3. 从命令行界面,使用 az login命令登录。
  4. 执行 Linux 或 Mac 计算机上的脚本进行 VM 创建。 Azure 公共 IP 地址、虚拟网络、网络接口和 VM 资源必须存在于同一位置。 虽然资源并非都必须位于同一资源组,但在以下脚本中如此。
RgName="IaaSStory"
Location="chinanorth"

# Create a resource group.

az group create \
--name $RgName \
--location $Location

# Create a public IP address resource with a static IP address using the --allocation-method Static option.
# If you do not specify this option, the address is allocated dynamically. The address is assigned to the
# resource from a pool of IP adresses unique to each Azure region. The DnsName must be unique within the
# Azure location it's created in. Download and view the file from https://www.microsoft.com/download/details.aspx?id=41653#
# that lists the ranges for each region.

PipName="PIPWEB1"
DnsName="iaasstoryws1"
az network public-ip create \
--name $PipName \
--resource-group $RgName \
--location $Location \
--allocation-method Static \
--dns-name $DnsName

# Create a virtual network with one subnet

VnetName="TestVNet"
VnetPrefix="192.168.0.0/16"
SubnetName="FrontEnd"
SubnetPrefix="192.168.1.0/24"
az network vnet create \
--name $VnetName \
--resource-group $RgName \
--location $Location \
--address-prefix $VnetPrefix \
--subnet-name $SubnetName \
--subnet-prefix $SubnetPrefix

# Create a network interface connected to the VNet with a static private IP address and associate the public IP address
# resource to the NIC.

NicName="NICWEB1"
PrivateIpAddress="192.168.1.101"
az network nic create \
--name $NicName \
--resource-group $RgName \
--location $Location \
--subnet $SubnetName \
--vnet-name $VnetName \
--private-ip-address $PrivateIpAddress \
--public-ip-address $PipName

# Create a new VM with the NIC

VmName="WEB1"

# Replace the value for the VmSize variable with a value from the
# https://docs.azure.cn/virtual-machines/virtual-machines-linux-sizes article.
VmSize="Standard_DS1"

# Replace the value for the OsImage variable with a value for *urn* from the output returned by entering
# the `az vm image list` command. 

OsImage="credativ:Debian:8:latest"
Username='adminuser'

# Replace the following value with the path to your public key file.
SshKeyValue="~/.ssh/id_rsa.pub"

az vm create \
--name $VmName \
--resource-group $RgName \
--image $OsImage \
--location $Location \
--size $VmSize \
--nics $NicName \
--admin-username $Username \
--ssh-key-value $SshKeyValue
# If creating a Windows VM, remove the previous line and you'll be prompted for the password you want to configure for the VM.

除了创建 VM,该脚本还创建:

  • 单个高级托管磁盘(默认情况下),但对于可以创建的磁盘类型,可以有其他选择。 有关详细信息,请阅读使用 Azure CLI 2.0 创建 Linux VM 一文。
  • 虚拟网络、子网、NIC 和公共 IP 地址资源。 也可以使用 现有 虚拟网络、子网、NIC 或公共 IP 地址资源。 若要了解如何使用现有网络资源,而不是创建其他资源,请输入 az vm create -h

验证 VM 创建和公共 IP 地址

  1. 输入命令 az resource list --resouce-group IaaSStory --output table ,查看由脚本创建的资源的列表。 返回的输出中应该有五个资源:网络接口、磁盘、公共 IP 地址、虚拟网络和虚拟机。
  2. 输入命令 az network public-ip show --name PIPWEB1 --resource-group IaaSStory --output table。 在返回的输出中,记下 IpAddress 的值,并且 PublicIpAllocationMethod 的值是 Static
  3. 在执行以下命令前,请删除 <>,将 Username 替换为用于脚本中 Username 变量的名称,并将 ipAddress 替换为上一步中的 ipAddress。 输入以下命令以连接到 VM:ssh -i ~/.ssh/azure_id_rsa <Username>@<ipAddress>

删除 VM 和关联的资源

如果生产环境中不会使用此练习中创建的资源,建议将其删除。 VM、公共 IP 地址和磁盘资源在预配后将产生费用。 若要删除此练习中创建的资源,请完成以下步骤:

  1. 若要查看资源组中的资源,请运行 az resource list --resource-group IaaSStory 命令。
  2. 请确认在资源组中除了本文中脚本创建的资源外没有其他资源。
  3. 若要删除本练习中创建的所有资源,请运行 az group delete -n IaaSStory 命令。 该命令将删除资源组及其包含的所有资源。

后续步骤

任何网络流量都可流入和流出本文中创建的 VM。 可以在 NSG 中定义入站和出站规则,以限制可以流入和流出网络接口和/或子网的流量。 若要了解有关 NSG 的详细信息,请阅读 NSG 概述一文。