本文介绍如何使用 Azure 门户在 Azure 中创建虚拟机。 在创建过程中,会将虚拟机与双堆栈网络一起创建。 从 Azure 门户、Azure CLI 或 Azure PowerShell 中进行选择,以完成本文中的步骤。 完成后,虚拟机支持 IPv4 和 IPv6 通信。
先决条件
可以使用本地 Azure CLI。
- 本教程需要 Azure CLI 版本 2.0.28 或更高版本。
- 具有活动订阅的 Azure 帐户。
创建帐户。
- 在本地安装了 Azure PowerShell。
- 登录 Azure PowerShell,并选择要使用的订阅。 有关详细信息,请参阅使用 Azure PowerShell 登录。
- 确保你的可用性区域。 Network 模块为 4.3.0 或更高版本。 要验证已安装的模块,使用命令 Get-InstalledModule -Name "Az.Network"。 如果模块需要更新,请使用命令 Update-Module -Name "Az. 网络”。
如果选择在本地安装并使用 PowerShell,则本文需要 Azure PowerShell 模块 5.4.1 或更高版本。 运行 Get-Module -ListAvailable Az 查找已安装的版本。 如果需要进行升级,请参阅 Install Azure PowerShell module(安装 Azure PowerShell 模块)。 如果在本地运行 PowerShell,则还需运行 Connect-AzAccount 以创建与 Azure 的连接。
创建资源组和虚拟网络
在本部分中,你将在 Azure 门户中为虚拟机创建资源组和双堆栈虚拟网络。
创建资源组
登录到 Azure 门户。
在门户中,搜索并选择“资源组”。
选择“+ 新建”。
在 “基本信息 ”选项卡上,输入或选择以下值:
| 设置 |
值 |
|
Subscription |
选择订阅。 |
|
资源组 |
输入 myResourceGroup。 |
|
Region |
选择“(亚洲)中国北部 3”。 |
选择“查看 + 创建”,然后选择“创建”。
创建虚拟网络
在门户顶部的搜索框中,输入“虚拟网络”。 在搜索结果中,选择“虚拟网络”。
选择“+ 新建”。
在“创建虚拟网络”的“基本信息”选项卡中输入或选择以下信息。
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“myResourceGroup”。 |
|
实例详细信息 |
|
| 名称 |
输入 myVNet。 |
| 区域 |
选择“中国北部 3”。 |
选择“IP 地址”选项卡或选择“下一步”“下一步”>。
保留默认 IPv4 地址空间“10.0.0.0/16”。 如果默认值不存在或不同,请输入 IPv4 地址空间“10.0.0.0/16”。
选择“default”子网。
在“编辑子网”页上,在“子网名称”中输入“myBackendSubnet”,然后选择“保存”。
从下拉菜单中选择“添加 IPv6 地址空间”。
在“IPv6 地址空间”中,编辑默认地址空间并将其值更改为“2404:f800:8000:122::/63”。
若要添加 IPv6 子网,请选择“+ 添加子网”,然后输入或选择以下信息:
| 设置 |
值 |
|
子网 |
|
| 子网名称 |
输入 myBackendSubnet。 |
| 地址范围 |
保留默认值“2404:f800:8000:122::”。 |
| 大小 |
保留默认值“/64”。 |
选择添加。
选择“查看 + 创建”。
选择创建。
在本部分中,你将在 Azure CLI 中为虚拟机创建资源组双堆栈虚拟网络。
使用 az group create 在 eastus2 位置创建名为“myResourceGroup”的资源组。
az group create \
--name myResourceGroup \
--location eastus2
使用 az network vnet create 创建虚拟网络。
az network vnet create \
--resource-group myResourceGroup \
--location eastus2 \
--name myVNet \
--address-prefixes 10.0.0.0/16 2404:f800:8000:122::/63 \
--subnet-name myBackendSubnet \
--subnet-prefixes 10.0.0.0/24 2404:f800:8000:122::/64
在本部分中,你将使用 Azure PowerShell 为虚拟机创建双堆栈虚拟网络。
使用 New-AzResourceGroup 在 eastus2 位置创建一个名为 myResourceGroup 的资源组。
$rg =@{
Name = 'myResourceGroup'
Location = 'eastus2'
}
New-AzResourceGroup @rg
使用 New-AzVirtualNetwork 和 New-AzVirtualNetworkSubnetConfig 创建虚拟网络。
## Create backend subnet config ##
$subnet = @{
Name = 'myBackendSubnet'
AddressPrefix = '10.0.0.0/24','2404:f800:8000:122::/64'
}
$subnetConfig = New-AzVirtualNetworkSubnetConfig @subnet
## Create the virtual network ##
$net = @{
Name = 'myVNet'
ResourceGroupName = 'myResourceGroup'
Location = 'eastus2'
AddressPrefix = '10.0.0.0/16','2404:f800:8000:122::/63'
Subnet = $subnetConfig
}
New-AzVirtualNetwork @net
创建公共 IP 地址
在本部分中,你要在 Azure 门户中创建两个公共 IP 地址:IPv4 和 IPv6。
创建 IPv4 公共 IP 地址
在门户顶部的搜索框中,输入“公共 IP 地址”。 在搜索结果中,选择“公共 IP 地址”。
选择“+ 新建”。
在“创建公共 IP 地址”中,输入或选择以下信息。
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“myResourceGroup”。 |
| 位置 |
选择“中国北部 3”。 |
| 可用性区域 |
选择“区域冗余”。 |
|
实例详细信息 |
|
| 名称 |
输入“myPublicIP-IPv4”。 |
| IP 版本 |
选择“IPv4”。 |
| SKU |
保留默认值“标准”。 |
| 层级 |
保留默认选项“区域”。 |
| IP 地址分配 |
|
| 路由首选项 |
保留默认值“Microsoft 网络”。 |
| 空闲超时(分钟) |
保留默认值“4”。 |
| DNS 名称标签 |
输入“myPublicIP-IPv4”。 |
选择“查看 + 创建”,然后选择“创建”。
创建 IPv6 公共 IP 地址
在门户顶部的搜索框中,输入“公共 IP 地址”。 在搜索结果中,选择“公共 IP 地址”。
选择“+ 新建”。
在“创建公共 IP 地址”中,输入或选择以下信息。
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“myResourceGroup”。 |
| 位置 |
选择“中国北部 3”。 |
| 可用性区域 |
选择“区域冗余”。 |
|
实例详细信息 |
|
| 名称 |
输入“myPublicIP-IPv6”。 |
| IP 版本 |
选择“IPv6”。 |
| SKU |
保留默认值“标准”。 |
| 层级 |
保留默认选项“区域”。 |
| IP 地址分配 |
|
| DNS 名称标签 |
输入“myPublicIP-IPv6”。 |
选择“查看 + 创建”,然后选择“创建”。
在本部分中,使用 Azure CLI 创建两个公共 IP 地址:IPv4 和 IPv6。
使用 az network public-ip create 创建公共 IP 地址。
az network public-ip create \
--resource-group myResourceGroup \
--name myPublicIP-Ipv4 \
--sku Standard \
--version IPv4 \
--zone 1 2 3
az network public-ip create \
--resource-group myResourceGroup \
--name myPublicIP-Ipv6 \
--sku Standard \
--version IPv6 \
--zone 1 2 3
在此部分中,你要创建两个公共 IP 地址:IPv4 和 IPv6。
使用New-AzPublicIpAddress创建公共 IP 地址。
$ip4 = @{
Name = 'myPublicIP-IPv4'
ResourceGroupName = 'myResourceGroup'
Location = 'chinanorth3'
Sku = 'Standard'
AllocationMethod = 'Static'
IpAddressVersion = 'IPv4'
Zone = 1,2,3
}
New-AzPublicIpAddress @ip4
$ip6 = @{
Name = 'myPublicIP-IPv6'
ResourceGroupName = 'myResourceGroup'
Location = 'chinanorth3'
Sku = 'Standard'
AllocationMethod = 'Static'
IpAddressVersion = 'IPv6'
Zone = 1,2,3
}
New-AzPublicIpAddress @ip6
创建虚拟机
在本部分中,你要创建虚拟机及其支持资源。
创建虚拟机
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择+ 创建,然后选择Azure 虚拟机。
在“基本信息”选项卡中,输入或选择以下信息。
| 设置 |
值 |
|
项目详细信息 |
|
| 订阅 |
选择订阅。 |
| 资源组 |
选择“myResourceGroup”。 |
|
实例详细信息 |
|
| 虚拟机名称 |
输入myVM。 |
| 区域 |
选择“中国北部 3”。 |
| 可用性选项 |
选择“无需基础结构冗余”。 |
| 安全类型 |
选择“标准”。 |
| 图像 |
选择“Ubuntu Server 20.04 LTS - Gen2”。 |
| 大小 |
选择默认大小。 |
|
管理员帐户 |
|
| 身份验证类型 |
选择“SSH 公钥”。 |
| 用户名 |
输入用户名。 |
| SSH 公钥源 |
选择“生成新密钥对”。 |
| 密钥对名称 |
输入“mySSHKey”。 |
|
入站端口规则 |
|
| 公共入站端口 |
选择“无”。 |
选择“网络”选项卡,或者选择“下一步: 磁盘”,然后选择“下一步: 网络”。
在“网络”选项卡中,输入或选择以下信息。
| 设置 |
值 |
|
网络接口 |
|
| 虚拟网络 |
选择“myVNet”。 |
| 子网 |
选择“myBackendSubnet (10.1.0.0/24,2404:f800:8000:122:/64)”。 |
| 公共 IP |
选择“myPublicIP-IPv4”。 |
| NIC 网络安全组 |
选择“高级”。 |
| 配置网络安全组 |
选择“新建”。
在“名称”中,输入“myNSG”。
选择“确定”。 |
选择“查看 + 创建”。
选择创建。
此时会显示“生成新密钥对”。 选择“下载私钥并创建资源”。
私钥将下载到本地计算机。 将私钥复制到计算机上的目录。 下面的示例中采用的是 ~/.ssh。
在创建期间,网络接口会自动创建并附加到所选虚拟网络。 在本部分,你将向现有网络接口添加 IPv6 配置。
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择“myVM”或现有虚拟机名称。
在“设置”中选择“网络” 。
默认网络接口的名称将是“myvmxx”,其中 xx 是一个随机数。 在此示例中,即为 myvm281。 选择网络接口:旁边的myvm281。
在网络接口属性中,在“设置”中选择“IP 配置”。
在“IP 配置”中,选择“+ 添加” 。
在“添加 IP 配置”中,输入或选择以下信息。
| 设置 |
值 |
| 名称 |
输入“Ipv6config”。 |
| IP 版本 |
选择“IPv6”。 |
|
专用 IP 地址设置 |
|
| 分配 |
保留默认值“动态”。 |
| 公共 IP 地址 |
选择“关联”。 |
| 公共 IP 地址 |
选择“myPublicIP-IPv6”。 |
选择“确定”。
在本部分中,你要创建虚拟机及其支持资源。
创建网络安全组
使用 az network nsg create 创建网络安全组。 网络安全组中的默认规则拒绝来自 Internet 的所有入站访问。
az network nsg create \
--resource-group myResourceGroup \
--name myNSG
创建网络接口
使用 az network nic create 为虚拟机创建网络接口。 先前创建的公共 IP 地址和 NSG 与 NIC 关联。 网络接口已连接到之前创建的虚拟网络。
az network nic create \
--resource-group myResourceGroup \
--name myNIC1 \
--vnet-name myVNet \
--subnet myBackEndSubnet \
--network-security-group myNSG \
--public-ip-address myPublicIP-IPv4
创建 IPv6 IP 配置
使用 az network nic ip-config create 创建 NIC 的 IPv6 配置。
az network nic ip-config create \
--resource-group myResourceGroup \
--name myIPv6config \
--nic-name myNIC1 \
--private-ip-address-version IPv6 \
--vnet-name myVNet \
--subnet myBackendSubnet \
--public-ip-address myPublicIP-IPv6
创建虚拟机
使用 az vm create 创建虚拟机。
az vm create \
--resource-group myResourceGroup \
--name myVM \
--nics myNIC1 \
--image Ubuntu2204 \
--admin-username azureuser \
--authentication-type ssh \
--generate-ssh-keys
在本部分中,你要创建虚拟机及其支持资源。
创建网络安全组
使用 New-AzNetworkSecurityGroup 创建网络安全组。 网络安全组中的默认规则拒绝来自 Internet 的所有入站访问。
$nsg = @{
Name = 'myNSG'
ResourceGroupName = 'myResourceGroup'
Location = 'eastus2'
}
New-AzNetworkSecurityGroup @nsg
创建网络接口
使用 New-AzNetworkInterface 和 New-AzNetworkInterfaceIpConfig 创建虚拟机的网络接口。 先前创建的公共 IP 地址和 NSG 与 NIC 关联。 网络接口已连接到之前创建的虚拟网络。
## Place the virtual network into a variable. ##
$net = @{
Name = 'myVNet'
ResourceGroupName = 'myResourceGroup'
}
$vnet = Get-AzVirtualNetwork @net
## Place the network security group into a variable. ##
$ns = @{
Name = 'myNSG'
ResourceGroupName = 'myResourceGroup'
}
$nsg = Get-AzNetworkSecurityGroup @ns
## Place the IPv4 public IP address into a variable. ##
$pub4 = @{
Name = 'myPublicIP-IPv4'
ResourceGroupName = 'myResourceGroup'
}
$pubIPv4 = Get-AzPublicIPAddress @pub4
## Place the IPv6 public IP address into a variable. ##
$pub6 = @{
Name = 'myPublicIP-IPv6'
ResourceGroupName = 'myResourceGroup'
}
$pubIPv6 = Get-AzPublicIPAddress @pub6
## Create IPv4 configuration for NIC. ##
$IP4c = @{
Name = 'ipconfig-ipv4'
Subnet = $vnet.Subnets[0]
PrivateIpAddressVersion = 'IPv4'
PublicIPAddress = $pubIPv4
}
$IPv4Config = New-AzNetworkInterfaceIpConfig @IP4c
## Create IPv6 configuration for NIC. ##
$IP6c = @{
Name = 'ipconfig-ipv6'
Subnet = $vnet.Subnets[0]
PrivateIpAddressVersion = 'IPv6'
PublicIPAddress = $pubIPv6
}
$IPv6Config = New-AzNetworkInterfaceIpConfig @IP6c
## Command to create network interface for VM ##
$nic = @{
Name = 'myNIC1'
ResourceGroupName = 'myResourceGroup'
Location = 'eastus2'
NetworkSecurityGroup = $nsg
IpConfiguration = $IPv4Config,$IPv6Config
}
New-AzNetworkInterface @nic
创建虚拟机
使用以下命令创建虚拟机:
$cred = Get-Credential
## Place network interface into a variable. ##
$nic = @{
Name = 'myNIC1'
ResourceGroupName = 'myResourceGroup'
}
$nicVM = Get-AzNetworkInterface @nic
## Create a virtual machine configuration for VMs ##
$vmsz = @{
VMName = 'myVM'
VMSize = 'Standard_DS1_v2'
}
$vmos = @{
ComputerName = 'myVM'
Credential = $cred
}
$vmimage = @{
PublisherName = 'Debian'
Offer = 'debian-11'
Skus = '11'
Version = 'latest'
}
$vmConfig = New-AzVMConfig @vmsz `
| Set-AzVMOperatingSystem @vmos -Linux `
| Set-AzVMSourceImage @vmimage `
| Add-AzVMNetworkInterface -Id $nicVM.Id
## Create the virtual machine for VMs ##
$vm = @{
ResourceGroupName = 'myResourceGroup'
Location = 'eastus2'
VM = $vmConfig
SshKeyName = 'mySSHKey'
}
New-AzVM @vm -GenerateSshKey
安装 nginx
在本部分中,你将创建网络安全组规则,以允许 HTTP 流量,并使用“运行命令”功能在虚拟机上安装 nginx。
创建入站安全规则
在门户顶部的搜索框中,输入“网络安全组”。 在搜索结果中选择“网络安全组”。
选择“myNSG”。
在“设置”中选择“入站安全规则”。
选择+ 添加。
输入或选择以下信息:
| 设置 |
值 |
| 来源 |
保留默认值“任意”。 |
| 源端口范围 |
保留默认值 *。 |
| 目的地 |
保留默认值“任意”。 |
| Service |
选择“HTTP”。 |
| Action |
保留默认值“允许”。 |
| 优先级 |
输入 100。 |
| 名称 |
输入 myNSGRuleHTTP。 |
选择添加。
使用 Run Command 安装 nginx
在门户顶部的搜索框中,输入“虚拟机”。 在搜索结果中,选择“虚拟机”。
选择“myVM”。
在“操作”中,选择“运行命令”。
选择 “RunShellScript”。
输入以下命令:
sudo apt-get update
sudo apt-get install -y nginx
选择运行。
等待命令完成。 输出窗格显示“ 启用成功” (完成后)。
创建入站安全规则
使用 az network nsg rule create 创建网络安全组规则以允许 HTTP 流量。
az network nsg rule create \
--resource-group myResourceGroup \
--nsg-name myNSG \
--name myNSGRuleHTTP \
--protocol '*' \
--direction inbound \
--source-address-prefix '*' \
--source-port-range '*' \
--destination-address-prefix '*' \
--destination-port-range 80 \
--access allow \
--priority 100
安装 nginx
使用 az vm run-command invoke 在虚拟机上安装 nginx。
az vm run-command invoke \
--resource-group myResourceGroup \
--name myVM \
--command-id RunShellScript \
--scripts "sudo apt-get update && sudo apt-get install -y nginx"
创建入站安全规则
使用 Get-AzNetworkSecurityGroup 和 Add-AzNetworkSecurityRuleConfig 创建网络安全组规则以允许 HTTP 流量。
## Place the network security group into a variable. ##
$nsg = @{
Name = 'myNSG'
ResourceGroupName = 'myResourceGroup'
}
$nsgObj = Get-AzNetworkSecurityGroup @nsg
## Create the network security group rule. ##
$nsgRule = @{
Name = 'myNSGRuleHTTP'
Protocol = '*'
Direction = 'Inbound'
Priority = 100
SourceAddressPrefix = '*'
SourcePortRange = '*'
DestinationAddressPrefix = '*'
DestinationPortRange = 80
Access = 'Allow'
}
$nsgObj | Add-AzNetworkSecurityRuleConfig @nsgRule | Set-AzNetworkSecurityGroup
安装 nginx
使用 Invoke-AzVMRunCommand 在虚拟机上安装 nginx。
$vm = @{
ResourceGroupName = 'myResourceGroup'
Name = 'myVM'
CommandId = 'RunShellScript'
ScriptString = 'sudo apt-get update && sudo apt-get install -y nginx'
}
Invoke-AzVMRunCommand @vm
测试双堆栈连接
通过连接到虚拟机的公共 IPv4 地址来验证 nginx 是否正在运行。
在门户顶部的搜索框中,输入“公共 IP 地址”。 在搜索结果中,选择“公共 IP 地址”。
选择“myPublicIP-IPv4”。
请注意 IP 地址下的 “概述 ”中的公共 IPv4 地址。 在此示例中,它是 203.0.113.77。
打开 Web 浏览器并浏览到 http://203.0.113.77。 将 IP 地址替换为虚拟机的公共 IPv4 地址。
将显示默认 nginx 欢迎页,确认 Web 服务器正在运行并通过 IPv4 访问。
使用 az network public-ip show 显示虚拟机的 IP 地址。
az network public-ip show \
--resource-group myResourceGroup \
--name myPublicIP-IPv4 \
--query ipAddress \
--output tsv
打开 Web 浏览器并浏览到显示的 IPv4 地址。 默认 nginx 欢迎页确认 Web 服务器正在运行且可访问。
使用以下命令显示 IPv6 地址:
az network public-ip show \
--resource-group myResourceGroup \
--name myPublicIP-IPv6 \
--query ipAddress \
--output tsv
使用 Get-AzPublicIpAddress 显示虚拟机的 IP 地址。
$ip4 = @{
ResourceGroupName = 'myResourceGroup'
Name = 'myPublicIP-IPv4'
}
Get-AzPublicIPAddress @ip4 | select IpAddress
打开 Web 浏览器并浏览到显示的 IPv4 地址。 默认 nginx 欢迎页确认 Web 服务器正在运行且可访问。
使用以下命令显示 IPv6 地址:
$ip6 = @{
ResourceGroupName = 'myResourceGroup'
Name = 'myPublicIP-IPv6'
}
Get-AzPublicIPAddress @ip6 | select IpAddress
清理资源
完成本文创建的资源后,请删除资源组及其包含的所有资源:
在门户顶部的搜索框中输入“myResourceGroup” 。 在“资源组”的搜索结果中,选择“myResourceGroup”。
选择“删除资源组”。
对于“键入资源组名称”,请输入“myResourceGroup”,然后选择“删除”。
不再需要上述资源组、虚拟机和所有相关资源时,请使用 az group delete 命令将其删除。
az group delete \
--name myResourceGroup
后续步骤
本文已介绍如何创建具有双堆栈网络的 Azure 虚拟机。
有关 Azure 中 IPv6 和 IP 地址的详细信息,请参阅: