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 leert u meer over de geavanceerde besturingselementen die u kunt gebruiken om een beperkt HDInsight-cluster te maken waarbij binnenkomende connectiviteit is beperkt tot een privénetwerk.
Als u openbare connectiviteit tussen uw HDInsight-cluster en afhankelijke resources wilt, kunt u overwegen de connectiviteit van uw cluster te beperken door de richtlijnen te volgen in Netwerkverkeer beheren in Azure HDInsight. Naast het beperken van openbare connectiviteit, kunt u afhankelijkheidsbronnen met Azure Private Link configureren voor gebruik met HDInsight-clusters.
In het volgende diagram ziet u hoe een potentiële virtuele HDInsight-netwerkarchitectuur eruit kan zien wanneer resourceProviderConnection
deze is ingesteld op uitgaand:
Notitie
Het beperken van openbare connectiviteit is een vereiste voor het inschakelen van Private Link en mag 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 omgekeerd, 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 in de netwerkbeveiligingsgroep te configureren. Het is ook niet nodig om de firewall of het virtuele netwerkapparaat te omzeilen via door de gebruiker gedefinieerde routes.
Notitie
Implementaties in Microsoft Azure Government vereisen mogelijk nog steeds de binnenkomende servicetags in de netwerkbeveiligingsgroep en door de gebruiker gedefinieerde routes.
Nadat u het cluster hebt gemaakt, stelt u de juiste DNS-resolutie 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.net
kunt u bijvoorbeeld waar nodig uw privé-IP-adressen toevoegen:
<clustername> A 10.0.0.1
<clustername-ssh> A 10.0.0.2
Notitie
Het is niet raadzaam om beperkte clusters in hetzelfde virtuele netwerk (met een privé-DNS-zone voor azurehdinsight.net
) te plaatsen als andere clusters waarvoor openbare connectiviteit is ingeschakeld. Dit kan onbedoeld gedrag of conflicten met DNS-omzetting veroorzaken.
Om uw DNS-instellingen eenvoudiger te maken, retourneren we de FQDN's en 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
}
}
Private Link-connectiviteit toevoegen aan clusterafhankelijke resources (optioneel)
Als u naar uitgaand verkeer configureertresourceProviderConnection
, hebt u ook toegang tot clusterspecifieke resources met behulp van privé-eindpunten. Deze resources zijn onder andere:
- 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 voor deze resources te gebruiken. 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 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 het Gen2-opslagaccount een eindpunt heeft ingesteld voor zowel blob
dfs
als . 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 de HDInsight Enterprise-beveiligingssjabloon voor een volledige sjabloon met veel van de beveiligingsfuncties van HDInsight Enterprise, waaronder Private Link.
Als u een cluster wilt maken met behulp van PowerShell, raadpleegt u het voorbeeld.
Als u een cluster wilt maken met behulp van de Azure CLI, raadpleegt u het voorbeeld.