Dela via


Begränsa offentlig anslutning i Azure HDInsight

I standardarkitekturen för virtuella nätverk i Azure HDInsight kommunicerar HDInsight-resursprovidern med klustret via ett offentligt nätverk. I den här artikeln får du lära dig mer om de avancerade kontroller som du kan använda för att skapa ett begränsat HDInsight-kluster där inkommande anslutningar är begränsade till ett privat nätverk.

Om du vill ha offentlig anslutning mellan ditt HDInsight-kluster och beroende resurser kan du överväga att begränsa klustrets anslutning genom att följa riktlinjerna i Kontrollera nätverkstrafik i Azure HDInsight. Förutom att begränsa den offentliga anslutningen kan du konfigurera Azure Private Link-aktiverade beroenderesurser som ska användas med HDInsight-kluster.

Följande diagram visar hur en potentiell arkitektur för virtuella HDInsight-nätverk kan se ut när resourceProviderConnection den är inställd på utgående:

Diagram som visar HDInsight-arkitekturen med hjälp av en utgående resursprovideranslutning.

Kommentar

Att begränsa den offentliga anslutningen är en förutsättning för att aktivera Private Link och bör inte betraktas som samma funktion.

Initiera ett begränsat kluster

Som standard använder HDInsight-resursprovidern en inkommande anslutning till klustret med hjälp av offentliga IP-adresser. När nätverksegenskapen resourceProviderConnection är inställd på utgående, återställs anslutningarna till HDInsight-resursprovidern så att anslutningarna alltid initieras inifrån klustret och går ut till resursprovidern.

I den här konfigurationen, utan en inkommande anslutning, behöver du inte konfigurera inkommande tjänsttaggar i nätverkssäkerhetsgruppen. Du behöver inte heller kringgå brandväggen eller den virtuella nätverksinstallationen via användardefinierade vägar.

Kommentar

Implementeringar i Microsoft Azure Government kan fortfarande kräva tjänsttaggar för inkommande trafik i nätverkssäkerhetsgruppen och användardefinierade vägar.

När du har skapat klustret konfigurerar du rätt DNS-matchning genom att lägga till DNS-poster som behövs för ditt begränsade HDInsight-kluster. Följande kanoniska namn DNS-post (CNAME) skapas i den Azure-hanterade offentliga DNS-zonen: azurehdinsight.net.

<clustername>    CNAME    <clustername>-int

Om du vill komma åt klustret med hjälp av fullständigt kvalificerade domännamn (FQDN) kan du använda någon av dessa tekniker efter behov:

  • Använd den interna lastbalanserarens privata IP-adresser direkt.
  • Använd din egen privata DNS-zon för att åsidosätta klusterslutpunkterna. I det här fallet måste zonnamnet vara azurehdinsight.net.

För din privata DNS-zon azurehdinsight.netkan du till exempel lägga till dina privata IP-adresser efter behov:

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

Kommentar

Vi rekommenderar inte att du placerar begränsade kluster i samma virtuella nätverk (med en privat DNS-zon för azurehdinsight.net) som andra kluster där offentlig anslutning är aktiverad. Det kan orsaka oavsiktligt DNS-matchningsbeteende eller konflikter.

För att göra DNS-installationen enklare returnerar vi FQDN och motsvarande privata IP-adresser som en del av klustersvaret GET . Du kan använda det här PowerShell-kodavsnittet för att komma igång:

<#
    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
    }
}

Om du konfigurerar resourceProviderConnection för utgående trafik kan du också komma åt klusterspecifika resurser med hjälp av privata slutpunkter. Dessa resurser omfattar:

  • Lagring: Azure Data Lake Storage Gen2 och Azure Blob Storage
  • SQL-metaarkiv: Apache Ranger, Ambari, Oozie och Hive
  • Azure Key Vault

Det är inte obligatoriskt att använda privata slutpunkter för dessa resurser. Men om du planerar att använda privata slutpunkter för dessa resurser måste du skapa resurserna och konfigurera de privata slutpunkterna och DNS-posterna innan du skapar HDInsight-klustret. Alla dessa resurser ska vara tillgängliga inifrån klustrets undernät, antingen via en privat slutpunkt eller på annat sätt. Om du planerar att använda en privat slutpunkt rekommenderar vi att du använder klustrets undernät.

När du ansluter till Azure Data Lake Storage Gen2 via en privat slutpunkt kontrollerar du att Gen2-lagringskontot har en slutpunkt inställd för både blob och dfs. Mer information finns i Skapa en privat slutpunkt.

Använda en brandvägg (valfritt)

HDInsight-kluster kan fortfarande ansluta till det offentliga Internet för att få utgående beroenden. Om du vill begränsa åtkomsten kan du konfigurera en brandvägg, men det är inte ett krav.

Skapa kluster

Följande JSON-kodfragment innehåller de två nätverksegenskaper som du måste konfigurera i Azure Resource Manager-mallen för att skapa ett privat HDInsight-kluster:

networkProperties: {
    "resourceProviderConnection": "Outbound"
}

En fullständig mall med många av HDInsight Enterprise-säkerhetsfunktionerna, inklusive Private Link, finns i HDInsight Enterprise-säkerhetsmall.

Information om hur du skapar ett kluster med hjälp av PowerShell finns i exemplet.

Information om hur du skapar ett kluster med hjälp av Azure CLI finns i exemplet.

Nästa steg