튜토리얼: Azure CLI를 사용해 트래픽 관리자 링크드 레코드 생성하기

이 튜토리얼에서는 Azure CLI를 사용해 Azure DNS에서 트래픽 관리자 연결 레코드를 생성합니다. 트래픽 매니저 링크드 레코드는 DNS 레코드 세트를 Azure Traffic Manager 프로필에 직접 연결하여 중간 CNAME 해석이 없는 클라이언트에게 IP 주소를 반환합니다.

포털을 이용한 단계별 안내는 Azure Portal을 사용한 Traffic Manager 연결 레코드 생성을 참조하세요. 개념적 개요는 트래픽 관리자 연동 기록 개요를 참조하세요.

이 튜토리얼에서는 다음을 배우게 됩니다:

  • 네트워킹과 가상 머신 인프라를 구축하세요.
  • 엔드포인트가 포함된 트래픽 매니저 프로필을 만드세요.
  • Azure CLI를 사용해 Traffic Manager 연결 레코드를 생성하세요.
  • 트래픽 매니저 링크드 레코드를 테스트하세요.

Azure 구독이 없는 경우, 시작하기 전에 무료 계정을 만드십시오.

Prerequisites

  • 활성 구독이 있는 Azure 계정.

  • Azure CLI 버전 2.60 이상을 로컬에 설치하거나 Azure Cloud Shell을 사용하세요. az --version을 실행하여 버전을 확인합니다. 설치 또는 업그레이드를 위해서는 Azure CLI 설치를 참조하세요.

  • Azure DNS 호스트되는 도메인 이름입니다. Azure DNS 존이 없다면, 하나를 만들고 Azure DNS에 사용자의 도메인을 위임하세요.

    메모

    이 자습서에서는 contoso.com이 도메인 이름 예로 사용됩니다. contoso.com을 사용자 고유의 도메인 이름으로 바꿉니다.

환경 변수 설정

이 튜토리얼 전반에 걸쳐 사용되는 자원 이름과 위치에 변수를 설정하여 각 명령어에서 반복하지 않도록 하세요.

RESOURCE_GROUP="test-rg"
LOCATION="eastus"
VNET_NAME="vnet-1"
TM_PROFILE_NAME="tm-profile"
DNS_ZONE="contoso.com"

리소스 그룹 만들기

az group create \
    --name $RESOURCE_GROUP \
    --location $LOCATION

가상 네트워크 만들기

az network vnet create \
    --resource-group $RESOURCE_GROUP \
    --name $VNET_NAME \
    --address-prefix 10.10.0.0/16 \
    --subnet-name subnet-1 \
    --subnet-prefix 10.10.0.0/24

웹 서버 가상 머신 만들기

트래픽 관리자 엔드포인트로 사용할 공인 IP 주소가 있는 우분투 가상 머신 두 대를 만들어 보세요.

공용 IP 주소 만들기

az network public-ip create \
    --resource-group $RESOURCE_GROUP \
    --name public-ip-1 \
    --sku Standard \
    --dns-name vm-1-tmlink

az network public-ip create \
    --resource-group $RESOURCE_GROUP \
    --name public-ip-2 \
    --sku Standard \
    --dns-name vm-2-tmlink

네트워크 보안 그룹 만들기

az network nsg create \
    --resource-group $RESOURCE_GROUP \
    --name nsg-1

az network nsg rule create \
    --resource-group $RESOURCE_GROUP \
    --nsg-name nsg-1 \
    --name AllowHTTP \
    --protocol tcp \
    --priority 100 \
    --destination-port-range 80

az network nsg rule create \
    --resource-group $RESOURCE_GROUP \
    --nsg-name nsg-1 \
    --name AllowHTTPS \
    --protocol tcp \
    --priority 110 \
    --destination-port-range 443

가상 머신 NIC 생성

az network nic create \
    --resource-group $RESOURCE_GROUP \
    --name nic-1 \
    --vnet-name $VNET_NAME \
    --subnet subnet-1 \
    --network-security-group nsg-1 \
    --public-ip-address public-ip-1

az network nic create \
    --resource-group $RESOURCE_GROUP \
    --name nic-2 \
    --vnet-name $VNET_NAME \
    --subnet subnet-1 \
    --network-security-group nsg-1 \
    --public-ip-address public-ip-2

가상 머신 만들기

메모

<your-ssh-public-key>을 SSH 공개 키 파일의 내용으로 바꾸거나, --generate-ssh-keys을 사용하여 새 키 쌍을 생성하세요.

az vm create \
    --resource-group $RESOURCE_GROUP \
    --name vm-1 \
    --nics nic-1 \
    --image Ubuntu2404 \
    --admin-username azureuser \
    --generate-ssh-keys \
    --no-wait

az vm create \
    --resource-group $RESOURCE_GROUP \
    --name vm-2 \
    --nics nic-2 \
    --image Ubuntu2404 \
    --admin-username azureuser \
    --generate-ssh-keys

마지막 명령어는 vm-2 가 생성될 때까지 기다립니다. 명령 실행이 완료되면 두 VM 모두 준비된 상태입니다.

두 VM 모두에 NGINX를 설치하세요

az vm run-command invoke \
    --resource-group $RESOURCE_GROUP \
    --name vm-1 \
    --command-id RunShellScript \
    --scripts "sudo apt-get update && sudo apt-get install -y nginx && echo 'Hello World from vm-1' | sudo tee /var/www/html/index.html"

az vm run-command invoke \
    --resource-group $RESOURCE_GROUP \
    --name vm-2 \
    --command-id RunShellScript \
    --scripts "sudo apt-get update && sudo apt-get install -y nginx && echo 'Hello World from vm-2' | sudo tee /var/www/html/index.html"

공인 IP 주소를 조회하세요

두 VM의 IP 주소를 모두 확인하세요. 트래픽 매니저 엔드포인트를 추가할 때 필요합니다.

VM1_IP=$(az network public-ip show \
    --resource-group $RESOURCE_GROUP \
    --name public-ip-1 \
    --query ipAddress \
    --output tsv)

VM2_IP=$(az network public-ip show \
    --resource-group $RESOURCE_GROUP \
    --name public-ip-2 \
    --query ipAddress \
    --output tsv)

echo "vm-1 IP: $VM1_IP"
echo "vm-2 IP: $VM2_IP"

트래픽 매니저 프로필 생성

az network traffic-manager profile create \
    --resource-group $RESOURCE_GROUP \
    --name $TM_PROFILE_NAME \
    --routing-method Priority \
    --unique-dns-name tm-profile-$RANDOM

트래픽 관리자 프로필에 엔드포인트 추가

az network traffic-manager endpoint create \
    --resource-group $RESOURCE_GROUP \
    --profile-name $TM_PROFILE_NAME \
    --name tmendpoint-1 \
    --type externalEndpoints \
    --target $VM1_IP \
    --priority 1

az network traffic-manager endpoint create \
    --resource-group $RESOURCE_GROUP \
    --profile-name $TM_PROFILE_NAME \
    --name tmendpoint-2 \
    --type externalEndpoints \
    --target $VM2_IP \
    --priority 2

트래픽 매니저 프로필의 전체 리소스 ID를 확인하세요. 링크된 레코드를 만들 때 이 기능이 필요합니다.

TM_PROFILE_ID=$(az network traffic-manager profile show \
    --resource-group $RESOURCE_GROUP \
    --name $TM_PROFILE_NAME \
    --query id \
    --output tsv)

echo "Traffic Manager profile ID: $TM_PROFILE_ID"

Traffic Manager 연결 레코드 생성

--traffic-management-profile 매개변수와 함께 az network dns record-set a create을 사용하여 트래픽 관리자 연결 레코드를 생성합니다. 다음 명령어는 존 꼭짓점(@)에 A 레코드를 생성합니다.

메모

이 매개변수는 --traffic-management-profile Azure CLI 버전 2.60 이상에서 제공되며, Traffic Manager 연동 레코드(2024-06-01-preview또는 그 이상)를 지원하는 API 버전이 필요합니다.

az network dns record-set a create \
    --resource-group <dns-zone-resource-group> \
    --zone-name $DNS_ZONE \
    --name "@" \
    --traffic-management-profile $TM_PROFILE_ID

메모

<dns-zone-resource-group>을 Azure DNS 영역이 포함된 리소스 그룹으로 바꿉니다. 이는 트래픽 관리자 프로필을 포함하는 리소스 그룹과 다를 수 있습니다.

존 apex 대신 하위 도메인에 대해 Traffic Manager 연결 레코드를 생성하려면 "@"를 하위 도메인 이름으로 대체하세요(예: "www").

az network dns record-set a create \
    --resource-group <dns-zone-resource-group> \
    --zone-name $DNS_ZONE \
    --name "www" \
    --traffic-management-profile $TM_PROFILE_ID

링크된 기록을 확인하세요

az network dns record-set a show \
    --resource-group <dns-zone-resource-group> \
    --zone-name $DNS_ZONE \
    --name "@"

출력에는 Traffic Manager 프로필 리소스 ID가 포함된 trafficManagementProfile 속성이 포함되어 있어 링크가 설정되었음을 확인합니다:

{
  "name": "@",
  "properties": {
    "trafficManagementProfile": {
      "id": "/subscriptions/.../resourceGroups/test-rg/providers/Microsoft.Network/trafficManagerProfiles/tm-profile"
    },
    "TTL": 30,
    ...
  }
}

메모

출력에 표시된 TTL 값은 트래픽 관리자 프로필의 DNS 구성에서 상속된 것입니다. 레코드 생성 시 지정된 TTL 값은 무시됩니다.

트래픽 매니저 연결 레코드 테스트

이름 해석을 테스트하려면 Azure DNS 네임 서버 중 하나를 직접 조회해 보세요. 먼저, 해당 구역의 네임 서버를 나열하세요:

az network dns record-set ns show \
    --resource-group <dns-zone-resource-group> \
    --zone-name $DNS_ZONE \
    --name "@" \
    --query "nsRecords[0].nsdname" \
    --output tsv

반환된 이름 서버를 nslookup과 함께 사용하여 이름 확인을 테스트합니다.

nslookup contoso.com <name-server-from-above>

응답에는 CNAME 레코드가 없는 가장 우선순위가 높은 건강한 트래픽 관리자 엔드포인트의 IP 주소가 포함되어 있습니다. 이는 트래픽 매니저 링크드 레코드가 IP 주소를 직접 반환한다는 것을 확인시켜 줍니다.

테스트 장애 조치

  1. 도메인으로 이동하세요. vm-1에 대한 NGINX 페이지를 보실 거예요.

  2. vm-1 VM 중지:

    az vm stop --resource-group $RESOURCE_GROUP --name vm-1
    
  3. 트래픽 매니저가 엔드포인트를 비정상으로 감지할 수 있도록 몇 분간 기다리세요.

  4. 로컬 DNS 캐시(ipconfig /flushdnsWindows, sudo dscacheutil -flushcache macOS)를 정리한 후 도메인에 다시 접속하세요. 이제 vm-2 페이지를 보실 수 있을 겁니다.

  5. vm-1을 재시작하여 원래 구성을 복원하세요:

    az vm start --resource-group $RESOURCE_GROUP --name vm-1
    

자원을 정리하세요

이 튜토리얼에서 생성된 리소스가 더 이상 필요하지 않으면, 리소스 그룹과 DNS 레코드를 삭제하세요:

# Delete the resource group and all resources within it
az group delete --name $RESOURCE_GROUP --yes --no-wait

# Delete the Traffic Manager Linked Record from the DNS zone
az network dns record-set a delete \
    --resource-group <dns-zone-resource-group> \
    --zone-name $DNS_ZONE \
    --name "@" \
    --yes

다음 단계

이 튜토리얼에서는 Azure CLI를 사용해 트래픽 관리자 링크드 레코드를 만들었습니다. 이 레코드는 DNS 존 apex를 트래픽 매니저 프로필에 연결하여 IP 주소를 직접 클라이언트에게 반환합니다.