Azure CLI를 사용하여 IPv6로 공용 부하 분산 장치 만들기
참고 항목
이 문서에서는 기본 부하 분산 장치에서 IPv4 및 IPv6 연결을 모두 제공할 수 있도록 하는 초기 IPv6 기능에 대해 설명합니다. 이제 IPv6 연결을 가상 네트워크와 통합하고 IPv6 네트워크 보안 그룹 규칙, IPv6 사용자 정의 라우팅, IPv6 기본 및 표준 부하 분산 등의 주요 기능을 포함하는 Azure VNET용 IPv6에서 포괄적인 IPv6 연결을 사용할 수 있습니다. Azure VNET용 IPv6은 Azure의 IPv6 애플리케이션에 권장되는 표준입니다. Azure VNET용 IPv6 PowerShell 배포를 참조하세요.
Azure 부하 분산 장치는 계층 4(TCP, UDP) 부하 분산 장치입니다. 부하 분산 장치는 클라우드 서비스의 정상 서비스 인스턴스 또는 부하 분산 장치 집합의 가상 머신 간에 들어오는 트래픽을 배포하여 고가용성을 제공합니다. 부하 분산 장치는 여러 포트, 여러 IP 주소 또는 둘 다에서 이러한 서비스를 제공할 수도 있습니다.
예제 배포 시나리오
다음 다이어그램은 이 문서에서 설명한 예제 템플릿을 사용하여 배포된 부하 분산 솔루션을 보여줍니다.
이 시나리오에서는 다음과 같은 Azure 리소스를 만듭니다.
- 2대의 가상 머신(VM)
- 할당된 IPv4 및 IPv6 주소를 사용하는 각 VM에 대한 가상 네트워크 인터페이스
- IPv4 및 IPv6 공용 IP 주소를 사용하는 공용 부하 분산 장치
- 두 개의 VM이 포함된 가용성 집합
- 공용 VIP를 프라이빗 엔드포인트로 매핑하기 위한 두 개의 부하 분산 규칙
Azure CLI를 사용하여 솔루션 배포
다음 단계에서는 Azure CLI를 사용하여 공용 부하 분산 장치를 만드는 방법을 보여줍니다. CLI를 사용하면 각 개체를 개별적으로 만들고 구성한 다음 함께 리소스를 만듭니다.
부하 분산 장치를 배포하려면 다음 개체를 만들고 구성합니다.
- 프런트 엔드 IP 구성: 들어오는 네트워크 트래픽에 대한 공용 IP 주소를 포함합니다.
- 백 엔드 주소 풀: 부하 분산 장치에서 네트워크 트래픽을 수신하는 가상 머신에 대한 NIC(네트워크 인터페이스)를 포함합니다.
- 부하 분산 규칙: 부하 분산 장치의 공용 포트를 백 엔드 주소 풀의 포트에 매핑하는 규칙을 포함합니다.
- 인바운드 NAT 규칙: 부하 분산 장치의 공용 포트를 백 엔드 주소 풀의 특정 가상 머신에 대한 포트에 매핑하는 NAT(네트워크 주소 변환) 규칙을 포함합니다.
- 프로브: 백 엔드 주소 풀에서 가상 머신 인스턴스의 가용성을 검사 데 사용되는 상태 프로브를 포함합니다.
Azure CLI 설치
이 예제의 PowerShell 명령 창에서 Azure CLI 도구를 실행합니다. 가독성 및 재사용을 개선하기 위해 Azure PowerShell cmdlet이 아닌 PowerShell의 스크립팅 기능을 사용합니다.
연결된 문서의 단계에 따라 Azure CLI를 설치 및 구성하고 Azure 계정에 로그인합니다.
Azure CLI 명령과 함께 사용할 PowerShell 변수를 설정합니다.
$subscriptionid = "########-####-####-####-############" # enter subscription id $location = "southcentralus" $rgName = "pscontosorg1southctrlus09152016" $vnetName = "contosoIPv4Vnet" $vnetPrefix = "10.0.0.0/16" $subnet1Name = "clicontosoIPv4Subnet1" $subnet1Prefix = "10.0.0.0/24" $subnet2Name = "clicontosoIPv4Subnet2" $subnet2Prefix = "10.0.1.0/24" $dnsLabel = "contoso09152016" $lbName = "myIPv4IPv6Lb"
리소스 그룹, 부하 분산 장치, 가상 네트워크 및 서브넷 만들기
리소스 그룹 만들기:
az group create --name $rgName --location $location
부하 분산 장치 만들기:
$lb = az network lb create --resource-group $rgname --location $location --name $lbName
가상 네트워크를 만듭니다.
$vnet = az network vnet create --resource-group $rgname --name $vnetName --location $location --address-prefixes $vnetPrefix
가상 네트워크에서 두 서브넷을 만듭니다.
$subnet1 = az network vnet subnet create --resource-group $rgname --name $subnet1Name --address-prefix $subnet1Prefix --vnet-name $vnetName $subnet2 = az network vnet subnet create --resource-group $rgname --name $subnet2Name --address-prefix $subnet2Prefix --vnet-name $vnetName
프런트 엔드 풀에 대한 공용 IP 주소 만들기
PowerShell 변수를 설정합니다.
$publicIpv4Name = "myIPv4Vip" $publicIpv6Name = "myIPv6Vip"
프런트 엔드 IP 풀에 대한 공용 IP 주소를 만듭니다.
$publicipV4 = az network public-ip create --resource-group $rgname --name $publicIpv4Name --location $location --version IPv4 --allocation-method Dynamic --dns-name $dnsLabel $publicipV6 = az network public-ip create --resource-group $rgname --name $publicIpv6Name --location $location --version IPv6 --allocation-method Dynamic --dns-name $dnsLabel
Important
부하 분산 장치는 공용 IP의 도메인 레이블을 FQDN(정규화된 도메인 이름)으로 사용합니다. 이는 클래식 배포의 변경으로, 클라우드 서비스 이름을 부하 분산 장치 FQDN으로 사용합니다.
이 예제에서 FQDN은 contoso09152016.southcentralus.cloudapp.azure.com입니다.
프런트 엔드 및 백 엔드 풀 만들기
이 섹션에서는 다음과 같은 IP 풀을 만듭니다.
- 부하 분산 장치에서 들어오는 네트워크 트래픽을 수신하는 프런트 엔드 IP 풀입니다.
- 프런트 엔드 풀이 부하 분산된 네트워크 트래픽을 보내는 백 엔드 IP 풀입니다.
PowerShell 변수를 설정합니다.
$frontendV4Name = "FrontendVipIPv4" $frontendV6Name = "FrontendVipIPv6" $backendAddressPoolV4Name = "BackendPoolIPv4" $backendAddressPoolV6Name = "BackendPoolIPv6"
프런트 엔드 IP 풀을 만들고 이전 단계에서 만든 공용 IP 및 부하 분산 장치와 연결합니다.
$frontendV4 = az network lb frontend-ip create --resource-group $rgname --name $frontendV4Name --public-ip-address $publicIpv4Name --lb-name $lbName $frontendV6 = az network lb frontend-ip create --resource-group $rgname --name $frontendV6Name --public-ip-address $publicIpv6Name --lb-name $lbName $backendAddressPoolV4 = az network lb address-pool create --resource-group $rgname --name $backendAddressPoolV4Name --lb-name $lbName $backendAddressPoolV6 = az network lb address-pool create --resource-group $rgname --name $backendAddressPoolV6Name --lb-name $lbName
프로브 부하, NAT 규칙 및 분산 장치 규칙 만들기
이 예제에서는 다음 항목을 만듭니다.
- TCP 포트 80에 대한 연결을 확인하기 위한 프로브 규칙
- RDP에서 포트 3389에 들어오는 모든 트래픽을 포트 3389로 변환하는 NAT 규칙*
- RDP(원격 데스크톱 프로토콜)에서 포트 3391에 들어오는 모든 트래픽을 포트 3389로 변환하는 NAT 규칙*
- 백 엔드 풀의 주소에서 포트 80에서 포트 80으로 들어오는 모든 트래픽의 균형을 맞추는 부하 분산 장치 규칙입니다.
* NAT 규칙은 부하 분산 장치 뒤에 특정 가상 머신 인스턴스와 관련이 있습니다. 포트 3389에 도달하는 네트워크 트래픽은 NAT 규칙과 연결된 특정 가상 머신 및 포트에 보내집니다. NAT 규칙에 대한 프로토콜(UDP 또는 TCP)을 지정해야 합니다. 프로토콜을 모두 동일한 포트를 할당할 수 없습니다.
PowerShell 변수를 설정합니다.
$probeV4V6Name = "ProbeForIPv4AndIPv6" $natRule1V4Name = "NatRule-For-Rdp-VM1" $natRule2V4Name = "NatRule-For-Rdp-VM2" $lbRule1V4Name = "LBRuleForIPv4-Port80" $lbRule1V6Name = "LBRuleForIPv6-Port80"
프로브를 만듭니다.
다음 예제에서는 15초마다 백 엔드 TCP 포트 80에 대한 연결을 검사 TCP 프로브를 만듭니다. 두 번의 연속 실패 후 백 엔드 리소스를 사용할 수 없음으로 표시합니다.
$probeV4V6 = az network lb probe create --resource-group $rgname --name $probeV4V6Name --protocol tcp --port 80 --interval 15 --threshold 2 --lb-name $lbName
백 엔드 리소스에 대한 RDP 연결을 허용하는 인바운드 NAT 규칙을 만듭니다.
$inboundNatRuleRdp1 = az network lb inbound-nat-rule create --resource-group $rgname --name $natRule1V4Name --frontend-ip-name $frontendV4Name --protocol Tcp --frontend-port 3389 --backend-port 3389 --lb-name $lbName $inboundNatRuleRdp2 = az network lb inbound-nat-rule create --resource-group $rgname --name $natRule2V4Name --frontend-ip-name $frontendV4Name --protocol Tcp --frontend-port 3391 --backend-port 3389 --lb-name $lbName
요청을 받은 프런트 엔드에 따라 트래픽을 다른 백 엔드 포트로 보내는 부하 분산 장치 규칙을 만듭니다.
$lbruleIPv4 = az network lb rule create --resource-group $rgname --name $lbRule1V4Name --frontend-ip-name $frontendV4Name --backend-pool-name $backendAddressPoolV4Name --probe-name $probeV4V6Name --protocol Tcp --frontend-port 80 --backend-port 80 --lb-name $lbName $lbruleIPv6 = az network lb rule create --resource-group $rgname --name $lbRule1V6Name --frontend-ip-name $frontendV6Name --backend-pool-name $backendAddressPoolV6Name --probe-name $probeV4V6Name --protocol Tcp --frontend-port 80 --backend-port 8080 --lb-name $lbName
설정을 확인합니다.
az network lb show --resource-group $rgName --name $lbName
예상 출력:
info: Executing command network lb show info: Looking up the load balancer "myIPv4IPv6Lb" data: Id : /subscriptions/########-####-####-####-############/resourceGroups/pscontosorg1southctrlus09152016/providers/Microsoft.Network/loadBalancers/myIPv4IPv6Lb data: Name : myIPv4IPv6Lb data: Type : Microsoft.Network/loadBalancers data: Location : southcentralus data: Provisioning state : Succeeded data: data: Frontend IP configurations: data: Name Provisioning state Private IP allocation Private IP Subnet Public IP data: --------------- ------------------ --------------------- ----------- ------ --------- data: FrontendVipIPv4 Succeeded Dynamic myIPv4Vip data: FrontendVipIPv6 Succeeded Dynamic myIPv6Vip data: data: Probes: data: Name Provisioning state Protocol Port Path Interval Count data: ------------------- ------------------ -------- ---- ---- -------- ----- data: ProbeForIPv4AndIPv6 Succeeded Tcp 80 15 2 data: data: Backend Address Pools: data: Name Provisioning state data: --------------- ------------------ data: BackendPoolIPv4 Succeeded data: BackendPoolIPv6 Succeeded data: data: Load Balancing Rules: data: Name Provisioning state Load distribution Protocol Frontend port Backend port Enable floating IP Idle timeout in minutes data: -------------------- ------------------ ----------------- -------- ------------- ------------ ------------------ ----------------------- data: LBRuleForIPv4-Port80 Succeeded Default Tcp 80 80 false 4 data: LBRuleForIPv6-Port80 Succeeded Default Tcp 80 8080 false 4 data: data: Inbound NAT Rules: data: Name Provisioning state Protocol Frontend port Backend port Enable floating IP Idle timeout in minutes data: ------------------- ------------------ -------- ------------- ------------ ------------------ ----------------------- data: NatRule-For-Rdp-VM1 Succeeded Tcp 3389 3389 false 4 data: NatRule-For-Rdp-VM2 Succeeded Tcp 3391 3389 false 4 info: network lb show
NIC 만들기
NIC를 만들어 NAT 규칙, 부하 분산 장치 규칙 및 프로브와 연결합니다.
PowerShell 변수를 설정합니다.
$nic1Name = "myIPv4IPv6Nic1" $nic2Name = "myIPv4IPv6Nic2" $subnet1Id = "/subscriptions/$subscriptionid/resourceGroups/$rgName/providers/Microsoft.Network/VirtualNetworks/$vnetName/subnets/$subnet1Name" $subnet2Id = "/subscriptions/$subscriptionid/resourceGroups/$rgName/providers/Microsoft.Network/VirtualNetworks/$vnetName/subnets/$subnet2Name" $backendAddressPoolV4Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/loadbalancers/$lbName/backendAddressPools/$backendAddressPoolV4Name" $backendAddressPoolV6Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/loadbalancers/$lbName/backendAddressPools/$backendAddressPoolV6Name" $natRule1V4Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/loadbalancers/$lbName/inboundNatRules/$natRule1V4Name" $natRule2V4Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/loadbalancers/$lbName/inboundNatRules/$natRule2V4Name"
각 백 엔드에 대한 NIC를 만들고 IPv6 구성을 추가합니다.
$nic1 = az network nic create --name $nic1Name --resource-group $rgname --location $location --private-ip-address-version "IPv4" --subnet $subnet1Id --lb-address-pools $backendAddressPoolV4Id --lb-inbound-nat-rules $natRule1V4Id $nic1IPv6 = az network nic ip-config create --resource-group $rgname --name "IPv6IPConfig" --private-ip-address-version "IPv6" --lb-address-pools $backendAddressPoolV6Id --nic-name $nic1Name $nic2 = az network nic create --name $nic2Name --resource-group $rgname --location $location --private-ip-address-version "IPv4" --subnet $subnet2Id --lb-address-pools $backendAddressPoolV4Id --lb-inbound-nat-rules $natRule2V4Id $nic2IPv6 = az network nic ip-config create --resource-group $rgname --name "IPv6IPConfig" --private-ip-address-version "IPv6" --lb-address-pools $backendAddressPoolV6Id --nic-name $nic2Name
백 엔드 VM 리소스를 만들고 각 NIC를 연결합니다.
VM을 만들려면 스토리지 계정이 있어야 합니다. 부하 분산을 하려면 VM이 가용성 집합의 구성원이어야 합니다. VM 만들기에 대한 자세한 내용은 PowerShell을 사용하여 Azure VM 만들기를 참조하세요.
PowerShell 변수를 설정합니다.
$availabilitySetName = "myIPv4IPv6AvailabilitySet" $vm1Name = "myIPv4IPv6VM1" $vm2Name = "myIPv4IPv6VM2" $nic1Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/networkInterfaces/$nic1Name" $nic2Id = "/subscriptions/$subscriptionid/resourceGroups/$rgname/providers/Microsoft.Network/networkInterfaces/$nic2Name" $imageurn = "MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:latest" $vmUserName = "vmUser" $mySecurePassword = "PlainTextPassword*1"
Warning
이 예제에서는 일반 텍스트인 VM의 사용자 이름 및 비밀번호를 사용합니다. 일반 텍스트인 이러한 자격 증명을 사용할 경우 적절한 조치를 취합니다. PowerShell에서 자격 증명을 처리하는 보다 안전한 방법은
Get-Credential
cmdlet을 참조하세요.가용성 집합을 만듭니다.
$availabilitySet = az vm availability-set create --name $availabilitySetName --resource-group $rgName --location $location
연결된 NIC로 가상 머신을 만듭니다.
az vm create --resource-group $rgname --name $vm1Name --image $imageurn --admin-username $vmUserName --admin-password $mySecurePassword --nics $nic1Id --location $location --availability-set $availabilitySetName --size "Standard_A1" az vm create --resource-group $rgname --name $vm2Name --image $imageurn --admin-username $vmUserName --admin-password $mySecurePassword --nics $nic2Id --location $location --availability-set $availabilitySetName --size "Standard_A1"