Tutorial: Crea un registro vinculado con el gestor de tráfico usando Azure PowerShell

En este tutorial, creas un Registro Enlazado del Gestor de Tráfico en Azure DNS usando Azure PowerShell. Un Registro Enlazado de Traffic Manager conecta un registro DNS establecido directamente a un perfil de Azure Traffic Manager, devolviendo direcciones IP a clientes sin una resolución CNAME intermedia.

Para ver un tutorial con Azure Portal, consulte Creación de un registro vinculado de Traffic Manager mediante Azure Portal. Para una visión conceptual, véase Visión general de Registros Enlazados del Gestor de Tráfico.

En este tutorial, obtendrá información sobre cómo:

  • Crear la infraestructura de red y máquinas virtuales.
  • Crea un perfil de Traffic Manager con puntos de conexión.
  • Crea un registro vinculado del gestor de tráfico usando Azure PowerShell.
  • Pruebe el registro enlazado de Traffic Manager.

Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

Prerequisites

  • Una cuenta de Azure con una suscripción activa.
  • Azure PowerShell versión 12.0.0 o posterior instalada localmente, o use Azure Cloud Shell. Ejecute Get-Module -ListAvailable Az para comprobar la versión. Si necesita instalarla o actualizarla, consulte Instalación de Azure PowerShell.
  • Un nombre de dominio hospedado en Azure DNS. Si no tienes una zona de Azure DNS, crea una y delega tu dominio a Azure DNS.

Nota:

En este tutorial, contoso.com se usa como nombre de dominio de ejemplo. Reemplace contoso.com por su propio nombre de dominio.

Nota:

Se recomienda usar el módulo de PowerShell de Azure Az para interactuar con Azure. Para comenzar, consulte Instalación de Azure PowerShell. Para obtener información sobre cómo migrar al módulo Az PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Azure Cloud Shell

Azure hospeda Azure Cloud Shell, un entorno de shell interactivo que puede usar a través del explorador. Puede usar Bash o PowerShell con Cloud Shell para trabajar con servicios de Azure. Puede usar los comandos preinstalados de Cloud Shell para ejecutar el código de este artículo sin tener que instalar nada en su entorno local.

Para iniciar Azure Cloud Shell:

Opción Ejemplo o vínculo
Seleccione Pruébelo en la esquina superior derecha de un código o bloque de comandos. Al seleccionar Inténtalo, no se copia automáticamente el código o el comando en Cloud Shell. Captura de pantalla que muestra un ejemplo de la opción Pruébelo para Azure Cloud Shell.
Vaya a https://shell.azure.com o seleccione el botón Launch Cloud Shell para abrir Cloud Shell en el explorador. Botón para iniciar Azure Cloud Shell.
Seleccione el botón Cloud Shell en la barra de menús en la parte superior derecha del Azure portal. Captura de pantalla que muestra el botón de Cloud Shell en Azure Portal

Para usar Azure Cloud Shell:

  1. Inicie Cloud Shell.

  2. Seleccione el botón Copiar en un bloque de código (o bloque de comandos) para copiar el código o comando.

  3. Pegue el código o comando en la sesión de Cloud Shell seleccionando Ctrl+Shift+V en Windows y Linux, o seleccionando Cmd+Shift+V en macOS.

  4. Seleccione Enter para ejecutar el código o comando.

Establecer variables

Define variables para los nombres de los recursos y las ubicaciones que se usan a lo largo de este tutorial.

$ResourceGroup = "test-rg"
$Location = "eastus"
$VNetName = "vnet-1"
$TmProfileName = "tm-profile"
$DnsZone = "contoso.com"
$DnsZoneResourceGroup = "<dns-zone-resource-group>"

Nota:

Sustituye <dns-zone-resource-group> por el grupo de recursos que contiene tu zona Azure DNS existente.

Creación del grupo de recursos

New-AzResourceGroup -Name $ResourceGroup -Location $Location

Crear la red virtual

$subnet = @{
    Name          = "subnet-1"
    AddressPrefix = "10.10.0.0/24"
}
$SubnetConfig = New-AzVirtualNetworkSubnetConfig @subnet

$vnet = @{
    ResourceGroupName = $ResourceGroup
    Name              = $VNetName
    Location          = $Location
    AddressPrefix     = "10.10.0.0/16"
    Subnet            = $SubnetConfig
}
New-AzVirtualNetwork @vnet

Creación de máquinas virtuales de servidor web

Crear las direcciones IP públicas

$pip1 = @{
    ResourceGroupName = $ResourceGroup
    Name              = "public-ip-1"
    Location          = $Location
    Sku               = "Standard"
    AllocationMethod  = "Static"
    DomainNameLabel   = "vm-1-tmlink"
}
$Vm1Pip = New-AzPublicIpAddress @pip1

$pip2 = @{
    ResourceGroupName = $ResourceGroup
    Name              = "public-ip-2"
    Location          = $Location
    Sku               = "Standard"
    AllocationMethod  = "Static"
    DomainNameLabel   = "vm-2-tmlink"
}
$Vm2Pip = New-AzPublicIpAddress @pip2

Creación del grupo de seguridad de red

$httpRule = @{
    Name                     = "AllowHTTP"
    Protocol                 = "Tcp"
    Direction                = "Inbound"
    Priority                 = 100
    SourceAddressPrefix      = "*"
    SourcePortRange          = "*"
    DestinationAddressPrefix = "*"
    DestinationPortRange     = 80
    Access                   = "Allow"
}
$HttpRule = New-AzNetworkSecurityRuleConfig @httpRule

$httpsRule = @{
    Name                     = "AllowHTTPS"
    Protocol                 = "Tcp"
    Direction                = "Inbound"
    Priority                 = 110
    SourceAddressPrefix      = "*"
    SourcePortRange          = "*"
    DestinationAddressPrefix = "*"
    DestinationPortRange     = 443
    Access                   = "Allow"
}
$HttpsRule = New-AzNetworkSecurityRuleConfig @httpsRule

$nsg = @{
    ResourceGroupName = $ResourceGroup
    Location          = $Location
    Name              = "nsg-1"
    SecurityRules     = $HttpRule, $HttpsRule
}
$Nsg = New-AzNetworkSecurityGroup @nsg

Crear las interfaces de red y las máquinas virtuales

$VNet = Get-AzVirtualNetwork -ResourceGroupName $ResourceGroup -Name $VNetName
$Subnet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $VNet -Name "subnet-1"

$nic1 = @{
    ResourceGroupName      = $ResourceGroup
    Name                   = "nic-1"
    Location               = $Location
    SubnetId               = $Subnet.Id
    PublicIpAddressId      = $Vm1Pip.Id
    NetworkSecurityGroupId = $Nsg.Id
}
$Vm1Nic = New-AzNetworkInterface @nic1

$nic2 = @{
    ResourceGroupName      = $ResourceGroup
    Name                   = "nic-2"
    Location               = $Location
    SubnetId               = $Subnet.Id
    PublicIpAddressId      = $Vm2Pip.Id
    NetworkSecurityGroupId = $Nsg.Id
}
$Vm2Nic = New-AzNetworkInterface @nic2

Crea las configuraciones de la máquina virtual y despliega las máquinas virtuales. Cuando se lo pida, introduce una contraseña para la cuenta de administrador.

$Credential = Get-Credential -Message "Enter a username and password for the VMs"

$image = @{
    PublisherName = "Canonical"
    Offer         = "ubuntu-24_04-lts"
    Skus          = "server"
    Version       = "latest"
}

$Vm1Config = New-AzVMConfig -VMName "vm-1" -VMSize "Standard_B1s" |
    Set-AzVMOperatingSystem -Linux -ComputerName "vm-1" -Credential $Credential |
    Set-AzVMSourceImage @image |
    Add-AzVMNetworkInterface -Id $Vm1Nic.Id

New-AzVM -ResourceGroupName $ResourceGroup -Location $Location -VM $Vm1Config -AsJob

$Vm2Config = New-AzVMConfig -VMName "vm-2" -VMSize "Standard_B1s" |
    Set-AzVMOperatingSystem -Linux -ComputerName "vm-2" -Credential $Credential |
    Set-AzVMSourceImage @image |
    Add-AzVMNetworkInterface -Id $Vm2Nic.Id

New-AzVM -ResourceGroupName $ResourceGroup -Location $Location -VM $Vm2Config

Instala NGINX en las máquinas virtuales

$run1 = @{
    ResourceGroupName = $ResourceGroup
    VMName            = "vm-1"
    CommandId         = "RunShellScript"
    ScriptString      = "sudo apt-get update && sudo apt-get install -y nginx && echo 'Hello World from vm-1' | sudo tee /var/www/html/index.html"
}
Invoke-AzVMRunCommand @run1

$run2 = @{
    ResourceGroupName = $ResourceGroup
    VMName            = "vm-2"
    CommandId         = "RunShellScript"
    ScriptString      = "sudo apt-get update && sudo apt-get install -y nginx && echo 'Hello World from vm-2' | sudo tee /var/www/html/index.html"
}
Invoke-AzVMRunCommand @run2

Recuperar las direcciones IP públicas

$Vm1IPAddress = (Get-AzPublicIpAddress -ResourceGroupName $ResourceGroup -Name "public-ip-1").IpAddress
$Vm2IPAddress = (Get-AzPublicIpAddress -ResourceGroupName $ResourceGroup -Name "public-ip-2").IpAddress

Write-Output "vm-1 IP: $Vm1IPAddress"
Write-Output "vm-2 IP: $Vm2IPAddress"

Crear el perfil del Gestor de Tráfico

$tm = @{
    Name                 = $TmProfileName
    ResourceGroupName    = $ResourceGroup
    TrafficRoutingMethod = "Priority"
    RelativeDnsName      = "tm-profile-$(Get-Random)"
    Ttl                  = 30
    MonitorProtocol      = "HTTP"
    MonitorPort          = 80
    MonitorPath          = "/"
    RecordType           = "A"
}
$TmProfile = New-AzTrafficManagerProfile @tm

Agregar puntos de conexión al perfil de Traffic Manager

$ep1 = @{
    EndpointName          = "tmendpoint-1"
    TrafficManagerProfile = $TmProfile
    Type                  = "ExternalEndpoints"
    Target                = $Vm1IPAddress
    EndpointStatus        = "Enabled"
    Priority              = 1
}
Add-AzTrafficManagerEndpointConfig @ep1

$ep2 = @{
    EndpointName          = "tmendpoint-2"
    TrafficManagerProfile = $TmProfile
    Type                  = "ExternalEndpoints"
    Target                = $Vm2IPAddress
    EndpointStatus        = "Enabled"
    Priority              = 2
}
Add-AzTrafficManagerEndpointConfig @ep2

Set-AzTrafficManagerProfile -TrafficManagerProfile $TmProfile

Crear el Registro Vinculado del Gestor de Tráfico

Use New-AzDnsRecordSet con el parámetro -TrafficManagementProfile para crear el registro vinculado de Traffic Manager. El siguiente comando crea un registro A en el ápice de la zona (@).

Nota:

El -TrafficManagementProfile parámetro está disponible en Az.Dns 5.0.0 y posteriores, y requiere una versión de la API que soporte Traffic Manager Linked Records (2024-06-01-preview o posterior).

$TmProfileId = $TmProfile.Id

$apex = @{
    ResourceGroupName        = $DnsZoneResourceGroup
    ZoneName                 = $DnsZone
    Name                     = "@"
    RecordType               = "A"
    Ttl                      = 30
    TrafficManagementProfile = $TmProfileId
}
New-AzDnsRecordSet @apex

Para crear el registro de un subdominio en lugar del ápice de zona, sustituyal "@" por el nombre del subdominio. Por ejemplo:

$www = @{
    ResourceGroupName        = $DnsZoneResourceGroup
    ZoneName                 = $DnsZone
    Name                     = "www"
    RecordType               = "A"
    Ttl                      = 30
    TrafficManagementProfile = $TmProfileId
}
New-AzDnsRecordSet @www

Verifica el registro vinculado

$record = @{
    ResourceGroupName = $DnsZoneResourceGroup
    ZoneName          = $DnsZone
    Name              = "@"
    RecordType        = "A"
}
Get-AzDnsRecordSet @record

La salida incluye una TrafficManagementProfile propiedad que muestra el ID de recurso del perfil del Gestor de Tráfico, confirmando que el enlace está establecido.

Nota:

El valor TTL en el registro refleja el valor TTL del perfil de Traffic Manager. Cualquier TTL especificado durante la creación de registros se reemplaza por el valor TTL DNS del perfil del Gestor de Tráfico.

Prueba el registro enlazado del Traffic Manager

Recupera los servidores de nombres de tu zona DNS y consulta uno directamente.

$ns = @{
    ResourceGroupName = $DnsZoneResourceGroup
    ZoneName          = $DnsZone
    Name              = "@"
    RecordType        = "NS"
}
$NameServer = (Get-AzDnsRecordSet @ns).Records[0].Nsdname

Resolve-DnsName -Name $DnsZone -Server $NameServer -Type A

La respuesta contiene registros A con direcciones IP, confirmando que los Registros Enlazados del Gestor de Tráfico devuelven direcciones IP directamente sin un salto CNAME.

Conmutación por error de prueba

  1. Navega por tu dominio. Deberías ver la página NGINX de VM-1.

  2. Detener la VM vm-1:

    Stop-AzVM -ResourceGroupName $ResourceGroup -Name "vm-1" -Force
    
  3. Espera unos minutos a que Traffic Manager detecte el endpoint como poco saludable.

  4. Vacía tu caché DNS local si es necesario y luego vuelve a navegar por tu dominio. Ahora deberías ver la página de VM-2.

  5. Reinicia VM-1 para restaurar la configuración original:

    Start-AzVM -ResourceGroupName $ResourceGroup -Name "vm-1"
    

Limpieza de recursos

Cuando ya no necesites los recursos, elimina el grupo de recursos y el registro DNS:

# Delete the resource group and all resources within it
Remove-AzResourceGroup -Name $ResourceGroup -Force -AsJob

# Delete the Traffic Manager Linked Record from the DNS zone
$cleanup = @{
    ResourceGroupName = $DnsZoneResourceGroup
    ZoneName          = $DnsZone
    Name              = "@"
    RecordType        = "A"
}
Remove-AzDnsRecordSet @cleanup

Pasos siguientes

En este tutorial, creaste un Registro Enlazado del Gestor de Tráfico usando Azure PowerShell. El registro vincula tu zona DNS a un perfil de Traffic Manager, devolviendo direcciones IP directamente a los clientes.