从 Azure vMX部署 CLI
本部分中的部署脚本和示例配置文件可简化在 Microsoft Azure 虚拟网络vMX虚拟机部署。配置文件中包含参数,使您能够自定义虚拟机vMX,例如登录用户名和网络接口 (NIPC)。
建议您使用本部分CLI介绍的 Azure vMX 部署虚拟机,而不是使用 Azure 门户手动vMX虚拟机。
下一步该做什么
使用 Azure vMX先部署CLI
开始从 Azure vMX部署新CLI:
获取 Microsoft Azure 帐户和订阅。请参阅 Microsoft Azure。
使用 Microsoft 帐户用户名和密码登录 Microsoft Azure 门户。本部分稍后将介绍 Azure 门户以验证是否vMX Azure CLI方法。
安装 Azure 命令行界面 (Azure CLI)。请参阅 安装 Azure CLI)。
购买 vMX或请求评估许可证。可以从许可证管理系统 (LMS) 瞻博网络采购许可证。
有关该评估许可证vMX, 请参阅https://www.juniper.net/us/en/dm/free-vmx-trial/ 。
注意:在 Microsoft Azure 中,您可以将服务器和服务作为即用即付 (PAYG) 或自带许可证 (BYOL) 服务托管在云端。PAYG 图像不需要任何瞻博网络许可。
您必须先运行以下 Azure CLI 命令,接受要部署的特定 BYOL 或 PAYG vMX最终用户许可协议 (EULA) 条款。否则,在本节稍后讨论部署脚本的虚拟机创建阶段,您将遇到 市场用途E7Failed 错误。
对于要部署的 PAYG 或 BYOL 映像类型,CLI只需运行以下 CLI 命令。
az vm image terms accept --urn juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:18.3.2
Azure vMX脚本的版本在 shell 中编写,并且最新版本的 Azure CLI 命令。不支持 Azure 版本CLI 2.x 之前的版本。
将 vMX部署到 Microsoft Azure 不支持使用 Microsoft Windows 中的 Azure CLI,因为作为部署过程一部分使用的 shell 脚本只能从 Linux 或 Mac OS CLI。
从 Azure vMX部署CLI
使用以下过程在 Microsoft Azure 虚拟网络vMX Azure 虚拟机管理平台部署和CLI。
- 使用 Microsoft Azure CLI
- 使用vMX部署工具
- 修改vMX的配置参数
- 使用 Shell vMX部署应用程序
- 验证将 vMX部署到 Microsoft Azure
- 登录新vMX实例
- 服务初始vMX
使用 Microsoft Azure CLI
要运行提供的 Azure CLI脚本,您可以在服务器上CLI Azure 脚本。
为您选择的方法执行以下任务之一:
安装 Azure CLI
要安装并登录 Azure CLI:
使用vMX部署工具
瞻博网络提供一组脚本和配置文件。这些工具旨在帮助在使用 Azure 云时vMX向 Azure 部署 CLI。
azure.config 配置文件
azure_vmx_deploy.sh shell 脚本
azure_vmx_deploy.sh 使用 azure.config 配置文件中的参数自动vMX虚拟机 (VM) 和虚拟网络的部署。 azure_vmx_deploy.sh shell 脚本将创建网络接口、虚拟网络、虚拟子网和 VM。
要复制 azure_vmx_deploy.sh 和 azure.config files:
保存文件后,可以修改 azure.config 文件进行配置并运行 azure_vmx_deploy.sh 脚本。
azure.config 文件
# # Sample VMX deployment settings for Microsoft Azure # # Account config account="12345bf4b32bf-1234-5678-aaaa-4b348978e06a" grpname="vmxcloudv2" location="westus" # VM config vmname="vmx183-x3" admin="azuser" vmximagename="juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:18.3.2" # Network Config number_of_nics=4 addressprefix="30.0.0.0/16" PrivateIpAddress="30.0.0.10" PrivateIpAddress2="30.0.1.10" subnet_prefixes=( 30.0.0.0/24 30.0.1.0/24 30.0.2.0/24 30.0.3.0/24 )
azure_vmx_deploy.sh 文件
#!/bin/sh # Copyright (c) 2020, Juniper Networks, Inc. # All rights reserved. # # # Sample deployment script for vMX on Microsoft Azure # source ./azure.config stor="stor" cont="cont" vm="_image" vnet=$grpname-vnet1 base_subnet=$vnet-vsubnet base_nic=$vmname-wan-nic mdisk="_Managed_Disk" storageacc=$grpname$stor STORAGE_CONT=$grpname$cont az account set -s $account echo "Creating resource group" az group create -n $grpname -l $location -o table echo "Created group $grpname" echo "Creating storage account" # Create storage account az storage account create --sku Standard_LRS --location $location --kind Storage --resource-group $grpname --name $storageacc --output table echo "Created storage account $storageacc" # Get connection string for the storage account KEY1=`az storage account keys list --account-name $storageacc --resource-group $grpname | grep -m 1 \"value\": | awk '{print $2}'` # Create storage container az storage container create --account-name $storageacc --name $STORAGE_CONT --account-key $KEY1 --output table echo "Created container $STORAGE_CONT" count=$(( $number_of_nics - 1 )) while [ $count -ge 0 ] do subnet_names[$count]=$base_subnet"$count" nic_names[$count]=$base_nic"$count" count=$(( $count - 1 )) done skip=1 az network vnet show -g $grpname --name $vnet > /dev/null 2>&1 if [ $? -eq 0 ]; then skip=2 echo "Vnet \"$vnet\" already exists, skipping vnet and subnet creation" fi if [ $skip -eq 1 ]; then # Create VNET echo "Creating Azure virtual network $vnet...." az network vnet create \ --resource-group $grpname \ --name $vnet \ --address-prefix $addressprefix \ --location $location \ --output table echo "Done creating Azure virtual network $vnet" # Create as many subnets as there are NICs i=0 for prefix in "${subnet_prefixes[@]}" do echo "Creating virtual subnet ${subnet_names[$i]} $prefix.." az network vnet subnet create \ --address-prefix $prefix \ --name ${subnet_names[$i]} \ --resource-group $grpname \ --vnet-name $vnet \ --output table echo "Done creating subnet ${subnet_names[$i]} with prefix $prefix" let i++ done fi # # Creating routing tables for vMX WAN ports (add tables as needed for more than 2 wan ports) # echo "Creating routing tables..." az network route-table create --name $grpname-rt-to-subnet2 --resource-group $grpname --location $location --output table az network route-table create --name $grpname-rt-to-subnet3 --resource-group $grpname --location $location --output table az network vnet subnet update --resource-group $grpname --vnet-name $vnet --name $vnet-vsubnet2 --route-table $grpname-rt-to-subnet3 --output table az network vnet subnet update --resource-group $grpname --vnet-name $vnet --name $vnet-vsubnet3 --route-table $grpname-rt-to-subnet2 --output table # # Create all NICs # echo "Creating public IP addresses and NICs..." i=0 for nic in "${nic_names[@]}" do if [ $i -eq 0 ]; then # Create Public IP for first NIC: ip=$vmname-vfp-public-ip az network public-ip create \ --name $ip \ --allocation-method Static \ --resource-group $grpname \ --location $location \ --output table # Create 1st NIC nic=$vmname-vfp-nic allnics="$allnics ""$nic" az network nic create \ --resource-group $grpname \ --location $location \ --name $nic \ --vnet-name $vnet \ --subnet ${subnet_names[$i]} \ --public-ip-address $ip \ --private-ip-address $PrivateIpAddress \ --output table echo "Created NIC $nic with public IP..." elif [ $i -eq 1 ]; then # Create Public IP for first NIC: ip2=$vmname-vcp-public-ip az network public-ip create \ --name $ip2 \ --allocation-method Static \ --resource-group $grpname \ --location $location \ --output table # Create 2nd NIC nic=$vmname-vcp-nic allnics="$allnics ""$nic" az network nic create \ --resource-group $grpname \ --location $location \ --name $nic \ --vnet-name $vnet \ --subnet ${subnet_names[$i]} \ --public-ip-address $ip2 \ --private-ip-address $PrivateIpAddress2 \ --output table echo "Created NIC $nic with public IP..." else allnics="$allnics ""$nic" az network nic create \ --resource-group $grpname \ --location $location \ --accelerated-networking true \ --name $nic \ --vnet-name $vnet \ --subnet ${subnet_names[$i]} \ --output table echo "Created NIC $nic..." fi let i++ done # # Add routes to route tables # echo "Adding routes to routing tables" ip=`az network nic show -g $grpname --name $base_nic"2"|grep privateIpAddress\"|awk '{print $2}'|sed -e s/\"//g -e s/\,//` az network route-table route create -g $grpname --route-table-name $grpname-rt-to-subnet3 --next-hop-type VirtualAppliance --name ToSubnet3 --next-hop-ip-address $ip --address-prefix ${subnet_prefixes[3]} --output table ip=`az network nic show -g $grpname --name $base_nic"3"|grep privateIpAddress\"|awk '{print $2}'|sed -e s/\"//g -e s/\,//` az network route-table route create -g $grpname --route-table-name $grpname-rt-to-subnet2 --next-hop-type VirtualAppliance --name ToSubnet2 --next-hop-ip-address $ip --address-prefix ${subnet_prefixes[2]} --output table # # Create vMX VM # echo "Creating vMX VM..." az vm create \ --name $vmname \ --size Standard_F8 \ --image $vmximagename \ --nics $allnics \ --resource-group $grpname \ --location $location \ --authentication-type ssh \ --admin-username $admin \ --generate-ssh-keys \ --storage-sku Standard_LRS \ --boot-diagnostics-storage ${grpname}stor \ --output table echo "vMX deployment complete"
修改vMX的配置参数
要部署vMX,可能需要通过执行以下任务来修改配置参数:
更改 Azure 配置参数
在 azure.config 文件中,设置以下参数:
account=”account subscription id”
—这是 Microsoft Azure 帐户订阅 ID。grpname="group-name"
—资源组名称。输入现有资源组。资源组名称可以包含字母数字字符、句点 (.)、点符号 (_)、连字符 (-) 和括号 (),但名称不能以句点结尾。location="region"
—资源组位置。选择打算用于部署 VM 的 Microsoft Azure 数据中心位置。指定大多数资源将驻留在何处。通常,选择最靠近您的物理位置的位置。vmname="vm-name"
—vMX VM 名称。VM 名称不能包含非 ASCII 或特殊字符。admin="admin-username"
—使用 SSH 登录虚拟机的用户名称。用户名不能包含大写字符或特殊字符,并且不能以美元符号 ($) 或连字符 (-) 开头。vmximagename="image-name"
—vMX名称。number_of_nics=number-of-interfaces
—接口数,包括 VFP (eth0)、VCP (fxp0) 以及任何 WAN 端口(WAN 端口在交换机上显示为 ge- x / x x vMX)。此数字必须介于 3 和 8 之间。addressprefix="address-prefix"
—地址空间。输入虚拟网络的地址范围,以表示CIDR表示。默认情况下,地址范围为 30.0.0.0/16。注意:确保地址空间不会与现有网络重叠
PrivateIpAddress="ip-address"
—VFP (eth0) 管理端口的专用 IP 地址。必须按参数中的定义由虚拟网络的地址空间addressprefix
包含。PrivateIpAddress2="ip-address"
—VCP (fxp0) 管理端口的专用 IP 地址。必须按参数中的定义由虚拟网络的地址空间addressprefix
包含。subnet_prefixes=(subnet-prefix0 subnet-prefix1 subnet-prefix2 subnet-prefix3 )
—虚拟网络下每个子网的子网地址范围阵列。按表示法输入每个网络CIDR地址范围。必须按参数中的定义由虚拟网络的地址空间addressprefix
包含。子网地址范围不能重叠。子网是虚拟网络中的一系列 IP 地址,用于隔离虚拟机。公共子网可以访问 Internet 网关,但专用子网无法访问。
输入阵列中与接口数量一样多的子网。每个NIC都在此阵列中定义一个对应的子网。例如,如果
number_of_nics
为 4,则阵列中将包含四subnet_prefixes
个条目。虚拟机vMX需要两个公共子网,每个单个实例组需要一个或多个公共或私有子网。VFP (eth0) 和 VCP (fxp0) 的管理接口使用公共子网,收入(数据)接口可使用公共子网或专用子网。连接到另一个vMX接口的专用子网可确保专用子网与 Internet 上的应用程序之间的所有流量都必须通过vMX实例。
例如,为要创建的四个 NIC 有四个子网的虚拟网络具有以下设置:
subnet_prefixes=( 30.0.0.0/24 30.0.1.0/24 30.0.2.0/24 30.0.3.0/24)
。
例如 ,azure.config 文件可能类似于以下内容:
grpname="vmxcloudv2" location="westus" # VM config vmname="vmxv2" admin="azuser" vmximagename="juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:18.3.2" number_of_nics=4 # Network Config addressprefix="30.0.0.0/16" PrivateIpAddress="30.0.0.1" PrivateIpAddress2=”30.0.1.10” subnet_prefixes=( 30.0.0.0/24 30.0.1.0/24 30.0.2.0/24 30.0.3.0/24 )
您可以使用以下命令vMX获取图像详细信息:
az vm image list --all --publisher juniper-networks
将 NIC 添加到配置中
该Standard_F8 CPU 类型总共支持 8 个端口。每个 vMX 都需要在 Azure 上创建两个管理端口,最多保留 6 个 WAN 端口。
该vMX实例包含两台独立的虚拟机 (VM),一台用于虚拟转发平面 VMX FPC (VFP),另一个用于虚拟控制平面 (VCP)
VFP 有一个专用管理端口 (eth0),映射到 <vm-name>-vfp-nic vMX。
VCP 有一个专用管理端口 (fxp0),映射到 <vm-name>-vcp-nic vMX。
在资源组 > vMX 资源组 > -vcp-nic 中配置的公共 IP 地址。 vMX 名称是要使用 SSH 连接到 vmname VMX RE (VCP) FPC 的 IP 地址。
要更改网络接口 (NIC) 的数量:
使用 Shell vMX部署应用程序
azure_vmx_deploy.sh shell脚本基于 azure 云的地理位置vMX资源组中部署虚拟机 (VM)。
要vMX Azure 虚拟网络,请运行 azure_vmx_deploy.sh 脚本以创建虚拟网络子网、NIC 和 VM。在 azure.config 配置文件中定义的 参数用于部署 vMX。
例如,如果 azure.config 文件包含以下参数:
grpname="vmxcloudv2" location="westus" # VM config vmname="vmxv2" admin="user" vmximagename="juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:18.3.2" number_of_nics=4 # Network Config addressprefix="30.0.0.0/16" PrivateIpAddress="30.0.0.10" subnet_prefixes=( 30.0.0.0/24 30.0.1.0/24 30.0.2.0/24 30.0.3.0/24 )
运行 azure_vmx_deploy.sh 脚本将生成以下输出。
$ ./azure_vmx_deploy.sh Creating resource group Location Name ---------- ----------- westus vmxcloudv2 Created group vmxcloudv2 Creating storage account CreationTime EnableHttpsTrafficOnly Kind Location Name PrimaryLocation ProvisioningState ResourceGroup StatusOfPrimary -------------------------------- ------------------------ ------- ---------- --------------- ----------------- ------------------- --------------- ----------------- 2020-03-11T00:12:55.943835+00:00 True Storage westus vmxcloudv2stor westus Succeeded vmxcloudv2 available Created storage account vmxcloudv2stor Created --------- False Created container vmxcloudv2cont Creating Azure virtual network vmxcloudv2-vnet1.... Done creating Azure virtual network vmxcloudv2-vnet1 Creating virtual subnet vmxcloudv2-vnet1-vsubnet0 30.0.0.0/24.. AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup --------------- -------------------------- -------------------------------- ----------------------------------- ------------------- --------------- 30.0.0.0/24 vmxcloudv2-vnet1-vsubnet0 Enabled Enabled Succeeded vmxcloudv2 Done creating subnet vmxcloudv2-vnet1-vsubnet0 with prefix 30.0.0.0/24 Creating virtual subnet vmxcloudv2-vnet1-vsubnet1 30.0.1.0/24.. AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup --------------- -------------------------- -------------------------------- ----------------------------------- ------------------- --------------- 30.0.1.0/24 vmxcloudv2-vnet1-vsubnet1 Enabled Enabled Succeeded vmxcloudv2 Done creating subnet vmxcloudv2-vnet1-vsubnet1 with prefix 30.0.1.0/24 Creating virtual subnet vmxcloudv2-vnet1-vsubnet2 30.0.2.0/24.. AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup --------------- -------------------------- -------------------------------- ----------------------------------- ------------------- --------------- 30.0.2.0/24 vmxcloudv2-vnet1-vsubnet2 Enabled Enabled Succeeded vmxcloudv2 Done creating subnet vmxcloudv2-vnet1-vsubnet2 with prefix 30.0.2.0/24 Creating virtual subnet vmxcloudv2-vnet1-vsubnet3 30.0.3.0/24.. AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup --------------- -------------------------- -------------------------------- ----------------------------------- ------------------- --------------- 30.0.3.0/24 vmxcloudv2-vnet1-vsubnet3 Enabled Enabled Succeeded vmxcloudv2 Done creating subnet vmxcloudv2-vnet1-vsubnet3 with prefix 30.0.3.0/24 Creating routing tables... DisableBgpRoutePropagation Location Name ProvisioningState ResourceGroup ---------------------------- ---------- ------------------------- ------------------- --------------- False westus vmxcloudv2-rt-to-subnet2 Succeeded vmxcloudv2 DisableBgpRoutePropagation Location Name ProvisioningState ResourceGroup ---------------------------- ---------- ------------------------- ------------------- --------------- False westus vmxcloudv2-rt-to-subnet3 Succeeded vmxcloudv2 AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup --------------- -------------------------- -------------------------------- ----------------------------------- ------------------- --------------- 30.0.2.0/24 vmxcloudv2-vnet1-vsubnet2 Enabled Enabled Succeeded vmxcloudv2 AddressPrefix Name PrivateEndpointNetworkPolicies PrivateLinkServiceNetworkPolicies ProvisioningState ResourceGroup --------------- -------------------------- -------------------------------- ----------------------------------- ------------------- --------------- 30.0.3.0/24 vmxcloudv2-vnet1-vsubnet3 Enabled Enabled Succeeded vmxcloudv2 Creating public IP addresses and NICs... Created NIC vmx183-x3-vfp-nic with public IP... Created NIC vmx183-x3-vcp-nic with public IP... Created NIC vmx183-x3-wan-nic2... Created NIC vmx183-x3-wan-nic3... Adding routes to routing tables AddressPrefix Name NextHopIpAddress NextHopType ProvisioningState ResourceGroup --------------- --------- ------------------ ---------------- ------------------- --------------- 30.0.3.0/24 ToSubnet3 30.0.2.4 VirtualAppliance Succeeded vmxcloudv2 AddressPrefix Name NextHopIpAddress NextHopType ProvisioningState ResourceGroup --------------- --------- ------------------ ---------------- ------------------- --------------- 30.0.2.0/24 ToSubnet2 30.0.3.4 VirtualAppliance Succeeded vmxcloudv2 Creating vMX VM... ResourceGroup PowerState PublicIpAddress Fqdns PrivateIpAddress MacAddress Location Zones --------------- ------------ ------------------------ ------- ------------------------------------- ----------------------------------------------------------------------- ---------- ------- vmxcloudv2 VM running 52.160.86.48,40.83.167.5 30.0.0.10,30.0.1.10,30.0.2.4,30.0.3.4 00-0D-3A-5C-0B-1D,00-0D-3A-5C-08-9C,00-0D-3A-5C-09-83,00-0D-3A-5C-0E-D8 westus vMX deployment complete
验证将 vMX部署到 Microsoft Azure
要验证将 vMX实例部署到 Microsoft Azure:
登录新vMX实例
完成vMX部署后,vMX实例将自动打开电源并启动。此时,您可以使用 SSH 客户端登录该vMX实例。
完成部署过程可能需要 15 分钟vMX并准备通过 SSH 登录。
要登录虚拟机vMX:
服务初始vMX
至少,登录后,您必须执行Junos OS初始配置任务,才能vMX: