Azure CLI에서 vMX 구축
이 섹션에 있는 구축 스크립트 및 샘플 구성 파일은 Microsoft Azure 가상 네트워크에서 vMX 구축을 간소화합니다. 구성 파일에는 로그인 사용자 이름 및 NIC(네트워크 인터페이스)와 같이 vMX VM 구축을 사용자 지정할 수 있는 매개 변수가 포함되어 있습니다.
이 섹션에서 설명한 Azure CLI 방법을 사용하여 vMX를 수동으로 구축하는 대신 vMX VM을 구축하는 것이 좋습니다.
다음 단계
Azure CLI를 사용하여 vMX를 구축하기 전에
Azure CLI에서 vMX 구축을 시작하기 전에 다음을 수행합니다.
Microsoft Azure에 대한 계정 및 구독을 확보합니다. Microsoft Azure를 참조하십시오.
Microsoft 계정 사용자 이름과 암호를 사용하여 Microsoft Azure 포털에 로그인합니다. Azure 포털은 이 섹션의 후반부에서 Azure CLI 방법을 사용하여 vMX 구축을 검증하는 데 사용됩니다.
Azure 명령줄 인터페이스(Azure CLI)의 최신 버전을 설치합니다. Azure CLI 설치를 참조하십시오).
vMX 라이선스를 구입하거나 평가 라이센스를 요청합니다. 라이센스는 주니퍼 네트웍스 라이선스 관리 시스템(LMS)에서 조달할 수 있습니다.
vMX의 평가 라이센스에 대한 자세한 내용은 https://www.juniper.net/us/en/dm/free-vmx-trial/ 참조하십시오.
참고:Microsoft Azure에서는 클라우드에서 PAYG(Pay-as-You-Go) 또는 BYOL(Bring-Your-Own-License) 서비스로 서버와 서비스를 호스팅할 수 있습니다. PAYG 이미지는 주니퍼 네트웍스 라이선스를 필요로 하지 않습니다.
먼저 다음 Azure CLI 명령을 실행하여 구축하려는 특정 BYOL 또는 PAYG vMX 이미지에 대해 EULA(End User License Agreement) 조건을 받아들여야 합니다. 그렇지 않으면 이 섹션의 후반부에 설명된 구축 스크립트의 VM 생성 단계에서 MarketplacePurchaseEligibilityFailed Error가 발생합니다.
구축하려는 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 명령의 최신 버전으로 작성되었습니다. Azure CLI의 Pre-2.x 버전은 지원되지 않습니다.
구축 절차의 일부로 사용되는 셸 스크립트는 Linux 또는 Mac OS CLI에서만 실행할 수 있기 때문에 vMX를 Microsoft Azure로 구축하면 Microsoft Windows에서 Azure 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를 사용할 때 vMX에서 Azure로의 구축을 간소화하는 데 도움이 됩니다.
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//xx로 표시)를 포함한 인터페이스 수입니다. 이 숫자는 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는 이 어레이에 정의된 해당 서브넷을 갖습니다. 예를 들어, 4인 경우
number_of_nics
어레이에 4개의 항목이subnet_prefixes
존재합니다.vMX VM은 각 개별 인스턴스 그룹에 대해 2개의 퍼블릭 서브넷과 1개 이상의 퍼블릭 또는 프라이빗 서브넷을 필요로 합니다. 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 인스턴스에는 2개의 개별 가상 머신(VM),하나는 가상 포워딩 플레인 VMX FPC(VFP)를 위한 것이고 하나는 가상 컨트롤 플레인(VCP)을 위한 것입니다.
VFP에는 vMX의 <vm 이름>-vfp-nic에 매핑된 전용 관리 포트(eth0)가 있습니다.
VCP에는 vMX의 <vm 이름>-vcp-nic에 매핑된 전용 관리 포트(fxp0)가 있습니다.
리소스 그룹에서 구성된 공용 IP 주소는 vMX 리소스 그룹 > > vmname-vcp-nic입니다. vMX 이름은 SSH를 사용하여 VMX RE(VCP) FPC에 연결하는 데 사용하는 IP 주소입니다.
네트워크 인터페이스(NIC)의 수를 변경하려면:
셸 스크립트를 사용하여 vMX 구축
azure_vmx_deploy.sh 쉘 스크립트는 Azure Cloud 지리적 위치를 기반으로 하는 리소스 그룹에 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 구성 작업을 수행해야 합니다.