Azure CLI에서 vMX 구축
이 섹션의 구축 스크립트 및 샘플 구성 파일은 Microsoft Azure 가상 네트워크에서 vMX의 구축을 간소화합니다. 구성 파일에는 로그인 사용자 이름 및 네트워크 인터페이스(NIC)와 같이 vMX VM 구축을 사용자 지정할 수 있는 매개 변수가 포함되어 있습니다.
vMX를 수동으로 구축하기 위해 Azure Portal을 사용하는 대신 이 섹션에서 설명한 Azure CLI 방법을 사용하여 vMX VM을 구축하는 것이 좋습니다.
다음은 뭘까요
Azure CLI를 사용하여 vMX를 구축하기 전에
Azure CLI에서 vMX 구축을 시작하기 전에 다음을 수행합니다.
Microsoft Azure에 대한 계정 및 구독을 가져옵니다. Microsoft Azure를 참조하세요.
Microsoft 계정 사용자 이름 및 암호를 사용하여 Microsoft Azure Portal에 로그인합니다. Azure Portal은 이 섹션의 뒷부분에서 Azure CLI 방법을 사용하여 vMX의 구축을 확인하는 데 사용됩니다.
최신 버전의 Azure 명령줄 인터페이스(Azure CLI)를 설치합니다.
vMX 라이선스를 구매하거나 평가판 라이선스를 요청합니다. 라이선스는 주니퍼 네트웍스 LMS(라이선스 관리 시스템)에서 조달할 수 있습니다.
vMX 평가판 라이선스에 대한 자세한 내용은 https://www.juniper.net/us/en/dm/free-vmx-trial/ 를 참조하십시오.
메모:Microsoft Azure에서는 클라우드에서 서버 및 서비스를 PAYG(종량제) 또는 BYOL(Bring-Your-Own-License) 서비스로 호스팅할 수 있습니다. PAYG 이미지에는 주니퍼 네트웍스 라이선스가 필요하지 않습니다.
먼저 다음 Azure CLI 명령을 실행하여 배포하려는 특정 BYOL 또는 PAYG vMX 이미지에 대한 EULA(최종 사용자 사용권 계약) 조건에 동의해야 합니다. 그렇지 않으면 이 섹션의 뒷부분에서 설명하는 배포 스크립트의 VM 만들기 단계에서 MarketplacePurchaseEligibilityFailed 오류가 발생합니다.
배포하려는 PAYG 또는 BYOL 이미지 유형에 대해 다음 CLI 명령을 한 번만 실행하면 됩니다.
az vm image terms accept --urn juniper-networks:vmx-services-gateway-byol:vmx-services-gateway-byol:18.3.2
Azure용 vMX 구축 스크립트는 셸 및 최신 버전의 Azure CLI 명령으로 작성됩니다. 2.x 이전 버전의 Azure CLI는 지원되지 않습니다.
vMX를 Microsoft Azure에 구축하면 Microsoft Windows에서 Azure CLI를 사용할 수 없습니다. 구축 절차의 일부로 사용되는 Shell 스크립트는 Linux 또는 Mac OS CLI에서만 실행할 수 있기 때문입니다.
Azure CLI에서 vMX 구축
Azure CLI에서 Microsoft Azure 가상 네트워크에 vMX를 구축 및 구성하려면 다음 절차를 따르십시오.
- Microsoft Azure CLI 사용
- vMX 구축 도구 사용
- 구축을 위한 vMX 구성 매개 변수 수정
- 셸 스크립트를 사용하여 vMX 구축
- Microsoft Azure에 vMX 구축 확인
- vMX 인스턴스에 로그인
- vMX의 초기 구성
Microsoft Azure CLI 사용
제공된 Azure CLI 스크립트를 실행하기 위해 서버에 Azure CLI를 설치할 수 있습니다.
선택한 방법에 대해 다음 작업 중 하나를 수행합니다.
Azure CLI 설치
Azure CLI를 설치하고 로그인하려면 다음을 수행합니다.
vMX 구축 도구 사용
주니퍼 네트웍스는 일련의 스크립트 및 구성 파일을 제공합니다. 이러한 도구는 Azure CLI를 사용할 때 Azure에 vMX를 간편하게 구축할 수 있도록 하기 위한 것입니다.
azure.config 구성 파일
azure_vmx_deploy.sh 셸 스크립트
azure_vmx_deploy.sh 는 azure.config 구성 파일의 매개 변수를 사용하여 vMX VM(가상 머신) 및 가상 네트워크의 구축을 각각 자동화합니다. azure_vmx_deploy.sh 셸 스크립트는 네트워크 인터페이스, 가상 네트워크, 가상 서브넷 및 VM을 만듭니다.
azure_vmx_deploy.sh 및 azure.config 파일을 복사하려면 다음을 수행합니다.
파일을 저장한 후 구성에 맞게 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를 사용하여 VM에 로그인하는 사용자의 이름입니다. 사용자 이름은 대문자나 특수 문자를 포함할 수 없으며 달러 기호($) 또는 하이픈(-)으로 시작할 수 없습니다.vmximagename="image-name"- vMX 이미지의 이름입니다.number_of_nics=number-of-interfaces- VFP(eth0), VCP(fxp0) 및 모든 WAN 포트(WAN 포트는 vMX에서 ge-x/x/로x 나타남)를 포함한 인터페이스 수입니다. 이 숫자는 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대로 가상 네트워크의 주소 공간에 포함되어야 합니다. 서브넷 주소 범위는 서로 겹칠 수 없습니다.서브넷은 VM을 격리하기 위한 가상 네트워크의 IP 주소 범위입니다. 퍼블릭 서브넷은 인터넷 게이트웨이에 액세스할 수 있지만 프라이빗 서브넷은 액세스할 수 없습니다.
인터페이스 수만큼 배열에 있는 서브넷을 입력합니다. 각 NIC에는 이 배열에 정의된 해당 서브넷이 있습니다. 예를 들어
number_of_nics가 4이면 배열에subnet_prefixes4개의 항목이 있습니다.vMX VM에는 두 개의 퍼블릭 서브넷과 각 개별 인스턴스 그룹에 대한 하나 이상의 퍼블릭 또는 프라이빗 서브넷이 필요합니다. VFP(eth0) 및 VCP(fxp0)의 관리 인터페이스는 퍼블릭 서브넷을 사용하며 수익(데이터) 인터페이스는 퍼블릭 또는 프라이빗 서브넷을 사용할 수 있습니다. 다른 vMX 인터페이스에 연결된 프라이빗 서브넷은 프라이빗 서브넷의 애플리케이션과 인터넷 간의 모든 트래픽이 vMX 인스턴스를 통과하도록 보장합니다.
예를 들어 생성될 4개의 NIC에 대해 4개의 서브넷이 있는 가상 네트워크에는 다음 설정이
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에 2개의 관리 포트가 필요하므로 최대 6개의 WAN 포트가 남아 있습니다.
vMX 인스턴스에는 두 개의 개별 가상 머신(VM)이 포함되어 있는데, 하나는 가상 포워딩 플레인 VMX FPC(VFP)를 위한 것이고 다른 하나는 가상 컨트롤 플레인(VCP)을 위한 것입니다
VFP에는 vMX의 <vm-name>-vfp-nic에 매핑된 전용 관리 포트(eth0)가 있습니다.
VCP에는 vMX의 <vm-name>-vcp-nic에 매핑된 전용 관리 포트(fxp0)가 있습니다.
리소스 그룹 > vMX 리소스 그룹 > vmname-vcp-nic에서 구성된 공용 IP 주소입니다. vMX 이름은 SSH를 사용하여 VMX RE(VCP) FPC에 연결하는 데 사용할 IP 주소입니다.
네트워크 인터페이스(NIC) 수를 변경하려면:
셸 스크립트를 사용하여 vMX 구축
azure_vmx_deploy.sh 셸 스크립트는 Azure 클라우드 지리적 위치를 기반으로 하는 리소스 그룹에 vMX VM(가상 머신)을 배포합니다.
Azure 가상 네트워크에 vMX를 구축하려면 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
Microsoft Azure에 vMX 구축 확인
Microsoft Azure에 vMX 인스턴스 구축을 확인하려면,
vMX 인스턴스에 로그인
vMX 구축이 완료되면 vMX 인스턴스의 전원이 자동으로 켜지고 실행됩니다. 이 시점에서 SSH 클라이언트를 사용하여 vMX 인스턴스에 로그인할 수 있습니다.
vMX가 구축을 완료하고 SSH를 통해 로그인할 준비가 되려면 15분 이상 걸릴 수 있습니다.
vMX VM에 로그인하려면 다음을 수행합니다.
vMX의 초기 구성
vMX에 로그인한 후 최소한 다음과 같은 초기 Junos OS 구성 작업을 수행해야 합니다.

