Openbare connectiviteit in Azure HDInsight beperken

In de standaardarchitectuur van het virtuele netwerk van Azure HDInsight communiceert de HDInsight-resourceprovider met het cluster via een openbaar netwerk. In dit artikel vindt u informatie over de geavanceerde besturingselementen die u kunt gebruiken om een beperkt HDInsight-cluster te maken waarbij binnenkomende connectiviteit wordt beperkt tot een particulier netwerk.

Als u openbare connectiviteit wilt tussen uw HDInsight-cluster en afhankelijke resources, kunt u overwegen de connectiviteit van uw cluster te beperken door de richtlijnen in Netwerkverkeer beheren in Azure HDInsight te volgen. Naast het beperken van de openbare connectiviteit, kunt u Azure Private Link afhankelijkheidsresources configureren voor gebruik met HDInsight-clusters.

In het volgende diagram ziet u hoe een mogelijke virtuele HDInsight-netwerkarchitectuur eruit kan zien wanneer resourceProviderConnection deze is ingesteld op uitgaand:

Diagram van de HDInsight-architectuur met behulp van een uitgaande resourceproviderverbinding.

Notitie

Het beperken van openbare connectiviteit is een vereiste voor het inschakelen van Private Link en moet niet als dezelfde mogelijkheid worden beschouwd.

Een beperkt cluster initialiseren

De HDInsight-resourceprovider maakt standaard gebruik van een binnenkomende verbinding met het cluster met behulp van openbare IP-adressen. Wanneer de resourceProviderConnection netwerkeigenschap is ingesteld op uitgaand, worden de verbindingen met de HDInsight-resourceprovider omgedraaid, zodat de verbindingen altijd vanuit het cluster worden gestart en naar de resourceprovider gaan.

In deze configuratie hoeft u zonder een binnenkomende verbinding geen binnenkomende servicetags te configureren in de netwerkbeveiligingsgroep. Het is ook niet nodig om de firewall of het virtuele netwerkapparaat te omzeilen via door de gebruiker gedefinieerde routes.

Notitie

Voor implementaties in Microsoft Azure Government zijn mogelijk nog steeds de inkomende servicetags in de netwerkbeveiligingsgroep en door de gebruiker gedefinieerde routes vereist.

Nadat u het cluster hebt gemaakt, stelt u de juiste DNS-omzetting in door DNS-records toe te voegen die nodig zijn voor uw beperkte HDInsight-cluster. De volgende canonieke naam DNS-record (CNAME) wordt gemaakt in de door Azure beheerde openbare DNS-zone: azurehdinsight.net.

<clustername>    CNAME    <clustername>-int

Als u toegang wilt krijgen tot het cluster met behulp van FQDN's (Fully Qualified Domain Names), kunt u een van deze technieken gebruiken die geschikt zijn voor uw behoeften:

  • Gebruik de privé-IP-adressen van de interne load balancer rechtstreeks.
  • Gebruik uw eigen privé-DNS-zone om de clustereindpunten te overschrijven. In dit geval moet de zonenaam zijn azurehdinsight.net.

Voor uw privé-DNS-zone azurehdinsight.netkunt u bijvoorbeeld zo nodig uw privé-IP-adressen toevoegen:

<clustername>        A   10.0.0.1
<clustername-ssh>    A   10.0.0.2

Notitie

Het wordt afgeraden om beperkte clusters in hetzelfde virtuele netwerk (met een privé-DNS-zone voor azurehdinsight.net) te plaatsen als andere clusters waar openbare connectiviteit is ingeschakeld. Dit kan onbedoeld DNS-omzettingsgedrag of conflicten veroorzaken.

Om uw DNS-installatie eenvoudiger te maken, retourneren we de FQDN's en de bijbehorende privé-IP-adressen als onderdeel van het clusterantwoord GET . U kunt dit PowerShell-fragment gebruiken om aan de slag te gaan:

<#
    This script is an example to help you get started with automation and can be adjusted based on your needs.
    This script assumes:
    - The HDInsight cluster has already been created, and the context where this script is run has permissions to read/write resources in the same resource group.
    - The private DNS zone resource exists in the same subscription as the HDInsight cluster.
We recommend that you use the latest version of the Az.HDInsight module.

#>
$subscriptionId = "<Replace with subscription for deploying HDInsight clusters, and containing private DNS zone resource>"

$clusterName = "<Replace with cluster name>"
$clusterResourceGroupName = "<Replace with resource group name>"

# For example, azurehdinsight.net for public cloud.
$dnsZoneName = "<Replace with private DNS zone name>"
$dnsZoneResourceGroupName = "<Replace with private DNS zone resource group name>"

Connect-AzAccount -SubscriptionId $subscriptionId

# 1. Get cluster endpoints
$clusterEndpoints = $(Get-AzHDInsightCluster -ClusterName $clusterName ` -ResourceGroupName $clusterResourceGroupName).ConnectivityEndpoints

$endpointMapping = @{}

foreach($endpoint in $clusterEndpoints)
{
    $label = $endpoint.Location.ToLower().Replace(".$dnsZoneName".ToLower(), "")
    $ip = $endpoint.PrivateIPAddress

    $endpointMapping.Add($label, $ip)
}

# 2. Confirm that the DNS zone exists.
Get-AzPrivateDnsZone -ResourceGroupName $dnsZoneResourceGroupName -Name $dnsZoneName -ErrorAction Stop

# 3. Update DNS entries for the cluster in the private DNS zone:
#    - If the entries already exist, update to the new IP.
#    - If the entries don't exist, create them.
$recordSets = Get-AzPrivateDnsRecordSet -ZoneName $dnsZoneName -ResourceGroupName $dnsZoneResourceGroupName -RecordType A

foreach($label in $endpointMapping.Keys)
{
    $updateRecord = $null

    foreach($record in $recordSets)
    {
        if($record.Name -eq $label)
        {
            $updateRecord = $record
            break;
        }
        
    }

    if($null -ne $updateRecord)
    {
        $updateRecord.Records[0].Ipv4Address = $endpointMapping[$label]
        Set-AzPrivateDnsRecordSet -RecordSet $updateRecord | Out-Null
    }
    else
    {
        New-AzPrivateDnsRecordSet `
            -ResourceGroupName $dnsZoneResourceGroupName `
            -ZoneName $dnsZoneName `
            -Name $label `
            -RecordType A `
            -Ttl 3600 `
            -PrivateDnsRecord (New-AzPrivateDnsRecordConfig -Ipv4Address $endpointMapping[$label]) | Out-Null
    }
}

Als u configureert resourceProviderConnection op uitgaand , hebt u ook toegang tot clusterspecifieke resources met behulp van privé-eindpunten. Deze resources omvatten:

  • Opslag: Azure Data Lake Storage Gen2 en Azure Blob Storage
  • SQL-metastores: Apache Ranger, Ambari, Oozie en Hive
  • Azure Key Vault

Het is niet verplicht om privé-eindpunten te gebruiken voor deze resources. Maar als u van plan bent om privé-eindpunten voor deze resources te gebruiken, moet u de resources maken en de privé-eindpunten en DNS-vermeldingen configureren voordat u het HDInsight-cluster maakt. Al deze resources moeten toegankelijk zijn vanuit het clustersubnet, via een privé-eindpunt of anderszins. Als u van plan bent om een privé-eindpunt te gebruiken, is het raadzaam om gebruik te maken van het clustersubnet.

Wanneer u verbinding maakt met Azure Data Lake Storage Gen2 via een privé-eindpunt, moet u ervoor zorgen dat voor het Gen2-opslagaccount een eindpunt is ingesteld voor zowel als blobdfs. Zie Een privé-eindpunt maken voor meer informatie.

Een firewall gebruiken (optioneel)

HDInsight-clusters kunnen nog steeds verbinding maken met het openbare internet om uitgaande afhankelijkheden op te halen. Als u de toegang wilt beperken, kunt u een firewall configureren, maar dit is geen vereiste.

Clusters maken

Het volgende JSON-codefragment bevat de twee netwerkeigenschappen die u moet configureren in uw Azure Resource Manager-sjabloon om een privé-HDInsight-cluster te maken:

networkProperties: {
    "resourceProviderConnection": "Outbound"
}

Zie HDInsight Enterprise Security Template (HdInsight-ondernemingsbeveiligingssjabloon) voor een volledige sjabloon met veel van de hdinsight-beveiligingsfuncties, waaronder Private Link.

Zie het voorbeeld om een cluster te maken met behulp van PowerShell.

Als u een cluster wilt maken met behulp van de Azure CLI, raadpleegt u het voorbeeld.

Volgende stappen