Criar redes virtuais para clusters do Azure HDInsight

Este artigo fornece exemplos e exemplos de código para criar e configurar Redes Virtuais do Azure. Para utilizar com clusters do Azure HDInsight. São apresentados exemplos detalhados de criação de grupos de segurança de rede (NSGs) e configuração de DNS.

Para obter informações em segundo plano sobre como utilizar redes virtuais com o Azure HDInsight, veja Planear uma rede virtual para o Azure HDInsight.

Pré-requisitos para exemplos e exemplos de código

Antes de executar qualquer um dos exemplos de código neste artigo, compreenda as redes TCP/IP. Se não estiver familiarizado com a rede TCP/IP, consulte alguém antes de efetuar modificações nas redes de produção.

Outros pré-requisitos para os exemplos neste artigo incluem os seguintes itens:

  • Se estiver a utilizar o PowerShell, terá de instalar o Módulo AZ.
  • Se quiser utilizar a CLI do Azure e ainda não a tiver instalado, veja Instalar a CLI do Azure.

Importante

Se estiver à procura de orientações passo a passo sobre como ligar o HDInsight à sua rede no local com um Rede Virtual do Azure, veja o documento Ligar o HDInsight à sua rede no local.

Exemplo: grupos de segurança de rede com o HDInsight

Os exemplos nesta secção demonstram como criar regras de grupo de segurança de rede. As regras permitem que o HDInsight comunique com os serviços de gestão do Azure. Antes de utilizar os exemplos, ajuste os endereços IP para corresponder aos da região do Azure que está a utilizar. Pode encontrar estas informações em endereços IP de gestão do HDInsight.

Modelo Azure Resource Manager

O modelo de Resource Manager seguinte cria uma rede virtual que restringe o tráfego de entrada, mas permite o tráfego dos endereços IP exigidos pelo HDInsight. Este modelo também cria um cluster do HDInsight na rede virtual.

Azure PowerShell

Utilize o seguinte script do PowerShell para criar uma rede virtual que restringe o tráfego de entrada e permite o tráfego dos endereços IP para a região Europa do Norte.

Importante

Altere os endereços IP para hdirule1 e hdirule2 neste exemplo para corresponder à região do Azure que está a utilizar. Pode encontrar estas informações endereços IP de gestão do HDInsight.

$vnetName = "Replace with your virtual network name"
$resourceGroupName = "Replace with the resource group the virtual network is in"
$subnetName = "Replace with the name of the subnet that you plan to use for HDInsight"

# Get the Virtual Network object
$vnet = Get-AzVirtualNetwork `
    -Name $vnetName `
    -ResourceGroupName $resourceGroupName

# Get the region the Virtual network is in.
$location = $vnet.Location

# Get the subnet object
$subnet = $vnet.Subnets | Where-Object Name -eq $subnetName

# Create a Network Security Group.
# And add exemptions for the HDInsight health and management services.
$nsg = New-AzNetworkSecurityGroup `
    -Name "hdisecure" `
    -ResourceGroupName $resourceGroupName `
    -Location $location `
    | Add-AzNetworkSecurityRuleConfig `
        -name "hdirule1" `
        -Description "HDI health and management address 52.164.210.96" `
        -Protocol "*" `
        -SourcePortRange "*" `
        -DestinationPortRange "443" `
        -SourceAddressPrefix "52.164.210.96" `
        -DestinationAddressPrefix "VirtualNetwork" `
        -Access Allow `
        -Priority 300 `
        -Direction Inbound `
    | Add-AzNetworkSecurityRuleConfig `
        -Name "hdirule2" `
        -Description "HDI health and management 13.74.153.132" `
        -Protocol "*" `
        -SourcePortRange "*" `
        -DestinationPortRange "443" `
        -SourceAddressPrefix "13.74.153.132" `
        -DestinationAddressPrefix "VirtualNetwork" `
        -Access Allow `
        -Priority 301 `
        -Direction Inbound `
    | Add-AzNetworkSecurityRuleConfig `
        -Name "hdirule3" `
        -Description "HDI health and management 168.61.49.99" `
        -Protocol "*" `
        -SourcePortRange "*" `
        -DestinationPortRange "443" `
        -SourceAddressPrefix "168.61.49.99" `
        -DestinationAddressPrefix "VirtualNetwork" `
        -Access Allow `
        -Priority 302 `
        -Direction Inbound `
    | Add-AzNetworkSecurityRuleConfig `
        -Name "hdirule4" `
        -Description "HDI health and management 23.99.5.239" `
        -Protocol "*" `
        -SourcePortRange "*" `
        -DestinationPortRange "443" `
        -SourceAddressPrefix "23.99.5.239" `
        -DestinationAddressPrefix "VirtualNetwork" `
        -Access Allow `
        -Priority 303 `
        -Direction Inbound `
    | Add-AzNetworkSecurityRuleConfig `
        -Name "hdirule5" `
        -Description "HDI health and management 168.61.48.131" `
        -Protocol "*" `
        -SourcePortRange "*" `
        -DestinationPortRange "443" `
        -SourceAddressPrefix "168.61.48.131" `
        -DestinationAddressPrefix "VirtualNetwork" `
        -Access Allow `
        -Priority 304 `
        -Direction Inbound `
    | Add-AzNetworkSecurityRuleConfig `
        -Name "hdirule6" `
        -Description "HDI health and management 138.91.141.162" `
        -Protocol "*" `
        -SourcePortRange "*" `
        -DestinationPortRange "443" `
        -SourceAddressPrefix "138.91.141.162" `
        -DestinationAddressPrefix "VirtualNetwork" `
        -Access Allow `
        -Priority 305 `
        -Direction Inbound `

# Set the changes to the security group
Set-AzNetworkSecurityGroup -NetworkSecurityGroup $nsg

# Apply the NSG to the subnet
Set-AzVirtualNetworkSubnetConfig `
    -VirtualNetwork $vnet `
    -Name $subnetName `
    -AddressPrefix $subnet.AddressPrefix `
    -NetworkSecurityGroup $nsg
$vnet | Set-AzVirtualNetwork

Este exemplo demonstra como adicionar regras para permitir o tráfego de entrada nos endereços IP necessários. Não contém uma regra para restringir o acesso de entrada a partir de outras origens. O código seguinte demonstra como ativar o acesso SSH a partir da Internet:

Get-AzNetworkSecurityGroup -Name hdisecure -ResourceGroupName RESOURCEGROUP |
Add-AzNetworkSecurityRuleConfig -Name "SSH" -Description "SSH" -Protocol "*" -SourcePortRange "*" -DestinationPortRange "22" -SourceAddressPrefix "*" -DestinationAddressPrefix "VirtualNetwork" -Access Allow -Priority 306 -Direction Inbound

CLI do Azure

Utilize os seguintes passos para criar uma rede virtual que restringe o tráfego de entrada, mas permite o tráfego dos endereços IP exigidos pelo HDInsight.

  1. Utilize o seguinte comando para criar um novo grupo de segurança de rede com o nome hdisecure. Substitua RESOURCEGROUP pelo grupo de recursos que contém o Rede Virtual do Azure. Substitua pela LOCATION localização (região) na qual o grupo foi criado.

    az network nsg create -g RESOURCEGROUP -n hdisecure -l LOCATION
    

    Assim que o grupo tiver sido criado, receberá informações sobre o novo grupo.

  2. Utilize o seguinte para adicionar regras ao novo grupo de segurança de rede que permite a comunicação de entrada na porta 443 a partir do serviço de estado de funcionamento e gestão do Azure HDInsight. Substitua RESOURCEGROUP pelo nome do grupo de recursos que contém o Rede Virtual do Azure.

    Importante

    Altere os endereços IP para hdirule1 e hdirule2 neste exemplo para corresponder à região do Azure que está a utilizar. Pode encontrar estas informações em endereços IP de gestão do HDInsight.

    az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n hdirule1 --protocol "*" --source-port-range "*" --destination-port-range "443" --source-address-prefix "52.164.210.96" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 300 --direction "Inbound"
    az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n hdirule2 --protocol "*" --source-port-range "*" --destination-port-range "443" --source-address-prefix "13.74.153.132" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 301 --direction "Inbound"
    az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n hdirule3 --protocol "*" --source-port-range "*" --destination-port-range "443" --source-address-prefix "168.61.49.99" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 302 --direction "Inbound"
    az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n hdirule4 --protocol "*" --source-port-range "*" --destination-port-range "443" --source-address-prefix "23.99.5.239" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 303 --direction "Inbound"
    az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n hdirule5 --protocol "*" --source-port-range "*" --destination-port-range "443" --source-address-prefix "168.61.48.131" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 304 --direction "Inbound"
    az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n hdirule6 --protocol "*" --source-port-range "*" --destination-port-range "443" --source-address-prefix "138.91.141.162" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 305 --direction "Inbound"
    
  3. Para obter o identificador exclusivo para este grupo de segurança de rede, utilize o seguinte comando:

    az network nsg show -g RESOURCEGROUP -n hdisecure --query "id"
    

    Este comando devolve um valor semelhante ao seguinte texto:

    "/subscriptions/SUBSCRIPTIONID/resourceGroups/RESOURCEGROUP/providers/Microsoft.Network/networkSecurityGroups/hdisecure"
    
  4. Utilize o seguinte comando para aplicar o grupo de segurança de rede a uma sub-rede. Substitua os GUID valores e RESOURCEGROUP pelos valores devolvidos do passo anterior. Substitua VNETNAME e SUBNETNAME pelo nome da rede virtual e o nome da sub-rede que pretende criar.

    az network vnet subnet update -g RESOURCEGROUP --vnet-name VNETNAME --name SUBNETNAME --set networkSecurityGroup.id="/subscriptions/GUID/resourceGroups/RESOURCEGROUP/providers/Microsoft.Network/networkSecurityGroups/hdisecure"
    

    Assim que este comando for concluído, pode instalar o HDInsight no Rede Virtual.

Estes passos só abrem o acesso ao serviço de estado de funcionamento e gestão do HDInsight na cloud do Azure. Qualquer outro acesso ao cluster do HDInsight fora do Rede Virtual é bloqueado. Para ativar o acesso de fora da rede virtual, tem de adicionar regras adicionais do Grupo de Segurança de Rede.

O código seguinte demonstra como ativar o acesso SSH a partir da Internet:

az network nsg rule create -g RESOURCEGROUP --nsg-name hdisecure -n ssh --protocol "*" --source-port-range "*" --destination-port-range "22" --source-address-prefix "*" --destination-address-prefix "VirtualNetwork" --access "Allow" --priority 306 --direction "Inbound"

Exemplo: configuração de DNS

Resolução de nomes entre uma rede virtual e uma rede no local ligada

Este exemplo faz os seguintes pressupostos:

  • Tem um Rede Virtual do Azure que está ligado a uma rede no local através de um gateway de VPN.

  • O servidor DNS personalizado na rede virtual está a executar Linux ou Unix como o sistema operativo.

  • O enlace está instalado no servidor DNS personalizado.

No servidor DNS personalizado na rede virtual:

  1. Utilize Azure PowerShell ou a CLI do Azure para localizar o sufixo DNS da rede virtual:

    Substitua RESOURCEGROUP pelo nome do grupo de recursos que contém a rede virtual e, em seguida, introduza o comando:

    $NICs = Get-AzNetworkInterface -ResourceGroupName "RESOURCEGROUP"
    $NICs[0].DnsSettings.InternalDomainNameSuffix
    
    az network nic list --resource-group RESOURCEGROUP --query "[0].dnsSettings.internalDomainNameSuffix"
    
  2. No servidor DNS personalizado para a rede virtual, utilize o seguinte texto como o conteúdo do /etc/bind/named.conf.local ficheiro:

    // Forward requests for the virtual network suffix to Azure recursive resolver
    zone "0owcbllr5hze3hxdja3mqlrhhe.ex.internal.cloudapp.net" {
        type forward;
        forwarders {168.63.129.16;}; # Azure recursive resolver
    };
    

    Substitua o 0owcbllr5hze3hxdja3mqlrhhe.ex.internal.cloudapp.net valor pelo sufixo DNS da sua rede virtual.

    Esta configuração encaminha todos os pedidos DNS para o sufixo DNS da rede virtual para a resolução recursiva do Azure.

  3. No servidor DNS personalizado para a rede virtual, utilize o seguinte texto como o conteúdo do /etc/bind/named.conf.options ficheiro:

    // Clients to accept requests from
    // TODO: Add the IP range of the joined network to this list
    acl goodclients {
        10.0.0.0/16; # IP address range of the virtual network
        localhost;
        localnets;
    };
    
    options {
            directory "/var/cache/bind";
    
            recursion yes;
    
            allow-query { goodclients; };
    
            # All other requests are sent to the following
            forwarders {
                192.168.0.1; # Replace with the IP address of your on-premises DNS server
            };
    
            dnssec-validation auto;
    
            auth-nxdomain no;    # conform to RFC1035
            listen-on { any; };
    };
    
    • Substitua o 10.0.0.0/16 valor pelo intervalo de endereços IP da sua rede virtual. Esta entrada permite endereços de pedidos de resolução de nomes dentro deste intervalo.

    • Adicione o intervalo de endereços IP da rede no local à acl goodclients { ... } secção . A entrada permite pedidos de resolução de nomes de recursos na rede no local.

    • Substitua o valor 192.168.0.1 pelo endereço IP do servidor DNS no local. Esta entrada encaminha todos os outros pedidos DNS para o servidor DNS no local.

  4. Para utilizar a configuração, reinicie o Enlace. Por exemplo, sudo service bind9 restart.

  5. Adicione um reencaminhador condicional ao servidor DNS no local. Configure o reencaminhador condicional para enviar pedidos para o sufixo DNS do passo 1 para o servidor DNS personalizado.

    Nota

    Consulte a documentação do software DNS para obter informações específicas sobre como adicionar um reencaminhador condicional.

Depois de concluir estes passos, pode ligar a recursos em qualquer uma das redes com nomes de domínio completamente qualificados (FQDN). Agora pode instalar o HDInsight na rede virtual.

Resolução de nomes entre duas redes virtuais ligadas

Este exemplo faz os seguintes pressupostos:

  • Tem duas Redes Virtuais do Azure que estão ligadas através de um gateway de VPN ou peering.

  • O servidor DNS personalizado em ambas as redes está a executar Linux ou Unix como o sistema operativo.

  • O enlace é instalado nos servidores DNS personalizados.

  1. Utilize Azure PowerShell ou a CLI do Azure para localizar o sufixo DNS de ambas as redes virtuais:

    Substitua RESOURCEGROUP pelo nome do grupo de recursos que contém a rede virtual e, em seguida, introduza o comando:

    $NICs = Get-AzNetworkInterface -ResourceGroupName "RESOURCEGROUP"
    $NICs[0].DnsSettings.InternalDomainNameSuffix
    
    az network nic list --resource-group RESOURCEGROUP --query "[0].dnsSettings.internalDomainNameSuffix"
    
  2. Utilize o seguinte texto como o conteúdo do /etc/bind/named.config.local ficheiro no servidor DNS personalizado. Efetue esta alteração no servidor DNS personalizado em ambas as redes virtuais.

    // Forward requests for the virtual network suffix to Azure recursive resolver
    zone "0owcbllr5hze3hxdja3mqlrhhe.ex.internal.cloudapp.net" {
        type forward;
        forwarders {10.0.0.4;}; # The IP address of the DNS server in the other virtual network
    };
    

    Substitua o 0owcbllr5hze3hxdja3mqlrhhe.ex.internal.cloudapp.net valor pelo sufixo DNS da outra rede virtual. Esta entrada encaminha os pedidos para o sufixo DNS da rede remota para o DNS personalizado nessa rede.

  3. Nos servidores DNS personalizados em ambas as redes virtuais, utilize o seguinte texto como o conteúdo do /etc/bind/named.conf.options ficheiro:

    // Clients to accept requests from
    acl goodclients {
        10.1.0.0/16; # The IP address range of one virtual network
        10.0.0.0/16; # The IP address range of the other virtual network
        localhost;
        localnets;
    };
    
    options {
            directory "/var/cache/bind";
    
            recursion yes;
    
            allow-query { goodclients; };
    
            forwarders {
            168.63.129.16;   # Azure recursive resolver
            };
    
            dnssec-validation auto;
    
            auth-nxdomain no;    # conform to RFC1035
            listen-on { any; };
    };
    

    Substitua os 10.0.0.0/16 valores e 10.1.0.0/16 pelos intervalos de endereços IP das suas redes virtuais. Esta entrada permite que os recursos em cada rede façam pedidos aos servidores DNS.

    Quaisquer pedidos que não sejam para os sufixos DNS das redes virtuais (por exemplo, microsoft.com) são processados pela resolução recursiva do Azure.

  4. Para utilizar a configuração, reinicie o Enlace. Por exemplo, sudo service bind9 restart em ambos os servidores DNS.

Depois de concluir estes passos, pode ligar-se aos recursos na rede virtual com nomes de domínio completamente qualificados (FQDN). Agora pode instalar o HDInsight na rede virtual.

Testar as definições antes de implementar um cluster do HDInsight

Antes de implementar o cluster, pode verificar se muitas das definições de configuração de rede estão corretas ao executar a ferramenta Validador de Rede do HDInsight numa máquina virtual do Linux do Azure na mesma VNet e sub-rede que o cluster planeado.

Passos seguintes