Поделиться через


Ограничение возможности общедоступного подключения в Azure HDInsight

В архитектуре виртуальной сети Azure HDInsight по умолчанию поставщик ресурсов HDInsight взаимодействует с кластером через общедоступную сеть. Прочитав эту статью, вы узнаете о дополнительных элементах управления, используемых для создания ограниченного кластера HDInsight, в котором входящее подключение ограничено частной сетью.

Если требуется общедоступное подключение между кластером HDInsight и зависимыми ресурсами, рассмотрите возможность ограниченного подключения к кластеру, следуя рекомендациям по управлению сетевым трафиком в Azure HDInsight. В дополнение к ограничению общедоступных подключений вы можете настроить ресурсы зависимостей, поддерживающие Приватный канал Azure, для использования с кластерами HDInsight.

На следующей схеме показано, как может выглядеть возможная архитектура виртуальной сети HDInsight, если для параметра resourceProviderConnection задано значение Исходящие:

Схема архитектуры HDInsight с использованием исходящего подключения к поставщику ресурсов.

Примечание

Ограничения общедоступного подключения являются необходимым условием для включения Приватного канала Azure, и они не должны рассматриваться как одна и та же возможность.

Инициализация ограниченного кластера

По умолчанию поставщик ресурсов HDInsight использует входящее подключение к кластеру с помощью общедоступных IP-адресов. Если для свойства сети resourceProviderConnection задано значение Исходящие, то выполняется обращение подключений к поставщику ресурсов HDInsight таким образом, чтобы подключения всегда инициировались изнутри кластера наружу к поставщику ресурсов.

В этой конфигурации без входящего подключения нет необходимости настраивать теги входящих служб в группе безопасности сети. Кроме того, не нужно обходить брандмауэр или сетевой виртуальный модуль с помощью определяемых пользователем маршрутов.

Примечание

Для реализации в Microsoft Azure для государственных организаций могут по-прежнему требоваться входящие теги службы в группе безопасности сети и определяемых пользователем маршрутах.

После создания кластера настройте правильное разрешение DNS, добавив записи DNS, необходимые для ограниченного кластера HDInsight. В общедоступной зоне DNS, управляемой Azure, создается следующее каноническое имя записи DNS (CNAME): azurehdinsight.net.

<clustername>    CNAME    <clustername>-int

Для доступа к кластеру с использованием полных доменных имен (FQDN) можно применять любой из этих методов в соответствии с вашими потребностями.

  • Используйте частные IP-адреса внутренней подсистемы балансировки нагрузки напрямую.
  • Используйте собственную частную зону DNS для переопределения конечных точек кластера. В этом случае имя зоны должно быть azurehdinsight.net.

Например, для частной зоны DNS azurehdinsight.net можно добавить частные IP-адреса по мере необходимости:

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

Примечание

Мы не рекомендуем размещать ограниченные кластеры в одной виртуальной сети (с частной зоной DNS для azurehdinsight.net), как другие кластеры с включенным общедоступным подключением. Это может привести к непредвиденному поведению или конфликтам при разрешении DNS.

Чтобы упростить настройку DNS, мы возвращаем полные доменные имена и соответствующие частные IP-адреса в рамках ответа кластера GET. Чтобы приступить к работе, можно использовать нижеуказанный фрагмент кода PowerShell.

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

Настройка resourceProviderConnection на исходящий также позволяет получить доступ к специфическим для кластера ресурсам с помощью частных конечных точек. К этим ресурсам относятся:

  • Служба хранилища Azure: Azure Data Lake Storage 2-го поколения и Хранилище BLOB-объектов Azure.
  • Хранилище метаданных SQL: Apache Ranger, Ambari, Oozie и Hive.
  • Azure Key Vault

Для этих ресурсов не обязательно использовать частные конечные точки. Но если вы планируете это делать, вы должны создать ресурсы и настроить частные конечные точки и записи DNS до создания кластера HDInsight. Все эти ресурсы должны быть доступны изнутри подсети кластера либо через частную конечную точку, либо иным образом. Если вы планируете использовать частную конечную точку, рекомендуется использовать подсеть кластера.

При подключении к Azure Data Lake Storage 2-го поколения через частную конечную точку убедитесь, что в учетной записи хранения 2-го поколения настроена конечная точка для ресурсов blob и dfs. Дополнительные сведения см. в разделе Создание частной конечной точки.

Использование брандмауэра (необязательно)

Кластеры HDInsight по-прежнему могут подключаться к общедоступной сети Интернет для получения исходящих зависимостей. Если вы хотите ограничить доступ, можно настроить брандмауэр, но это не обязательно.

Создание кластеров

В следующем фрагменте кода JSON содержатся два свойства сети, которые необходимо настроить в шаблоне Azure Resource Manager для создания частного кластера HDInsight:

networkProperties: {
    "resourceProviderConnection": "Outbound"
}

Полный шаблон со множеством функций корпоративной безопасности HDInsight, включая Приватный канал, см. в статье Шаблон корпоративной безопасности HDInsight.

Чтобы создать кластер с помощью PowerShell, см. пример.

Чтобы создать кластер с помощью Azure CLI, см. Пример.

Дальнейшие действия