Подключение HDInsight к локальной сети

Узнайте, как подключить HDInsight к локальной сети с помощью виртуальной сети Azure и VPN-шлюза. В этом документе содержатся следующие сведения о планировании:

  • Использование HDInsight в виртуальной сети Azure, которая подключается к локальной сети.
  • Настройка разрешения DNS-имен между виртуальной и локальной сетями.
  • Настройка групп безопасности сети для ограничения доступа к HDInsight из Интернета.
  • Порты, предоставляемые HDInsight в виртуальной сети.

Обзор

Чтобы разрешить HDInsight и ресурсам в присоединенной сети связываться по имени, необходимо выполнить такие действия:

  1. Создать виртуальную сеть Azure.
  2. Создать пользовательский DNS-сервер в виртуальной сети Azure.
  3. Настроить виртуальную сеть для использования пользовательского DNS-сервера вместо рекурсивного сопоставителя Azure по умолчанию.
  4. Настроить переадресацию между пользовательским и локальным DNS-сервером.

Эти конфигурации позволяют:

  • Переадресовывать запросы полных доменных имен с DNS-суффиксом для виртуальных сетей к пользовательскому DNS-серверу. Затем пользовательский DNS-сервер переадресовывает эти запросы к рекурсивному сопоставителю Azure, который вернет IP-адрес.
  • Переадресовывать остальные запросы на локальный DNS-сервер. Даже запросы к общедоступным интернет-ресурсам, таким как microsoft.com, переадресовываются на локальный DNS-сервер для разрешения имен.

На следующей схеме зеленые линии — это запросы ресурсов, которые заканчиваются на DNS-суффикс виртуальной сети. Синие линии — это запросы ресурсов в локальной сети или в общедоступном Интернете.

Diagram of how DNS requests are resolved in the configuration.

Необходимые компоненты

Создание конфигурации виртуальной сети

Дополнительные сведения о том, как создать виртуальную сеть Azure, подключенную к локальной сети, см. в следующих документах:

Создание пользовательского DNS-сервера

Внимание

Перед установкой HDInsight в виртуальную сеть необходимо создать DNS-сервер и настроить его.

В следующих шагах описывается, как с помощью портала Azure создать виртуальную машину Azure. Другие способы создания виртуальных машин см. в статьях Создание виртуальной машины Linux с помощью Azure CLI и Создание виртуальной машины Linux с помощью портала Azure. Чтобы создать виртуальную машину Linux, использующую программное обеспечение DNS Bind, выполните следующие действия:

  1. Войдите на портал Azure.

  2. В меню сверху выберите + Create a resource (+ Создать ресурс).

    Create an Ubuntu virtual machine.

  3. Выберите Вычисления>Виртуальная машина, чтобы открыть страницу Создание виртуальной машины.

  4. На вкладке Основные сведения задайте следующие параметры.

    Поле значение
    Отток подписок Выберите соответствующую подписку.
    Группа ресурсов Выберите группу ресурсов, которая содержит виртуальную сеть, созданную ранее.
    Virtual machine name Введите понятное имя, идентифицирующее виртуальную машину. В этом примере используется DNSProxy.
    Область/регион Выберите тот же регион, что и для созданной ранее виртуальной сети. Не во всех регионах доступны виртуальные машины всех размеров.
    Параметры доступности Выберите нужный уровень доступности. Azure предлагает широкий набор параметров для управления доступностью и устойчивостью для приложений. Сконструируйте свое решение для использования реплицированных виртуальных машин в зонах доступности или группах доступности, чтобы защитить приложения и данные от сбоев центра обработки данных и мероприятий по обслуживанию. В этом примере используется параметр Избыточность инфраструктуры не требуется.
    Изображения Оставьте значение Ubuntu Server 18.04 LTS.
    Тип аутентификации Пароль или Открытый ключ SSH. Метод аутентификации для учетной записи SSH. Мы рекомендуем использовать открытые ключи — это безопаснее. В этом примере используется вариант Пароль. Дополнительные сведения см.в статье Как создать и использовать пару из открытого и закрытого ключей SSH для виртуальных машин Linux в Azure.
    User name Введите имя пользователя администратора для виртуальной машины. В этом примере используется sshuser.
    Пароль или открытый ключ SSH Соответствующее поле определяется выбранным типом проверки подлинности. Введите соответствующее значение.
    Общедоступные входящие порты Выберите Разрешить выбранные порты. Затем выберите SSH (22) в раскрывающемся списке Выбрать входящие порты.

    Virtual machine basic configuration.

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

  5. На вкладке Сеть введите следующие сведения.

    Поле значение
    Виртуальная сеть Выберите созданную ранее виртуальную сеть.
    Подсеть Выберите подсеть по умолчанию для созданной ранее виртуальной сети. Не выбирайте подсеть, используемую VPN-шлюзом.
    Общедоступный IP-адрес Используйте значение, предоставленное автоматически.

    HDInsight Virtual network settings.

    Оставьте значения других параметров по умолчанию и откройте вкладку Проверить и создать.

  6. На вкладке Просмотр и создание выберите Создать для создания виртуальной машины.

Проверка IP-адресов

После создания виртуальной машины вы получите уведомление Развертывание прошло успешно с кнопкой Перейти к ресурсу. Выберите Перейти к ресурсу, чтобы перейти к новой виртуальной машине. Из представления по умолчанию для новой виртуальной машины выполните следующие действия, чтобы определить связанные IP-адреса.

  1. В разделе Параметры выберите Свойства.

  2. Запишите значения ОБЩЕДОСТУПНЫЙ IP-АДРЕС/ИМЯ DNS и ЧАСТНЫЙ IP-АДРЕС. Они вам еще пригодятся.

    Public and private IP addresses.

Установка и настройка Bind (программное обеспечение DNS)

  1. Используйте SSH для подключения к общедоступному IP-адресу виртуальной машины. Замените sshuser учетной записью пользователя SSH, указанной при создании виртуальной машины. В следующем примере устанавливается подключение к виртуальной машине по адресу 40.68.254.142:

    ssh sshuser@40.68.254.142
    
  2. Чтобы установить Bind, используйте следующие команды из сеанса SSH:

    sudo apt-get update -y
    sudo apt-get install bind9 -y
    
  3. Чтобы настроить Bind для переадресации запросов разрешения имен на локальный DNS-сервер, в качестве содержимого файла /etc/bind/named.conf.options добавьте следующий текст:

    acl goodclients {
        10.0.0.0/16; # Replace with the IP address range of the virtual network
        10.1.0.0/16; # Replace with the IP address range of the on-premises network
        localhost;
        localnets;
    };
    
    options {
            directory "/var/cache/bind";
    
            recursion yes;
    
            allow-query { goodclients; };
    
            forwarders {
            192.168.0.1; # Replace with the IP address of the on-premises DNS server
            };
    
            dnssec-validation auto;
    
            auth-nxdomain no;    # conform to RFC1035
            listen-on { any; };
    };
    

    Внимание

    Замените значения в разделе goodclients следующим диапазоном IP-адресов виртуальной и локальной сети. Этот раздел определяет адреса, по которым этот DNS-сервер принимает запросы.

    Замените запись 192.168.0.1 в разделе forwarders IP-адресом локального DNS-сервера. Эта запись направляет DNS-запросы к локальному DNS-серверу для разрешения.

    Чтобы изменить этот файл, используйте следующую команду:

    sudo nano /etc/bind/named.conf.options
    

    Чтобы сохранить файл, нажмите клавиши CTRL+X, затем — Y и ВВОД.

  4. В сеансе SSH используйте следующую команду:

    hostname -f
    

    Эта команда возвращает значение следующего вида:

    dnsproxy.icb0d0thtw0ebifqt0g1jycdxd.ex.internal.cloudapp.net
    

    Текст icb0d0thtw0ebifqt0g1jycdxd.ex.internal.cloudapp.net — это DNS-суффикс для виртуальной сети. Сохраните это значение для последующего использования.

  5. Чтобы настроить Bind для разрешения DNS-имен ресурсов в виртуальной сети, в качестве содержимого файла /etc/bind/named.conf.local добавьте следующий текст:

    // Replace the following with the DNS suffix for your virtual network
    zone "icb0d0thtw0ebifqt0g1jycdxd.ex.internal.cloudapp.net" {
        type forward;
        forwarders {168.63.129.16;}; # The Azure recursive resolver
    };
    

    Внимание

    Текст icb0d0thtw0ebifqt0g1jycdxd.ex.internal.cloudapp.net нужно заменить DNS-суффиксом, полученным ранее.

    Чтобы изменить этот файл, используйте следующую команду:

    sudo nano /etc/bind/named.conf.local
    

    Чтобы сохранить файл, нажмите клавиши CTRL+X, затем — Y и ВВОД.

  6. Чтобы запустить Bind, используйте следующую команду:

    sudo service bind9 restart
    
  7. Чтобы убедиться, что привязка может разрешать имена ресурсов в локальной сети, используйте следующие команды:

    sudo apt install dnsutils
    nslookup dns.mynetwork.net 10.0.0.4
    

    Внимание

    Замените dns.mynetwork.net полным доменным именем (FQDN) ресурса в локальной сети.

    Замените 10.0.0.4внутренним IP-адресом пользовательского DNS-сервера в виртуальной сети.

    Ответ будет выглядеть следующим образом:

    Server:         10.0.0.4
    Address:        10.0.0.4#53
    
    Non-authoritative answer:
    Name:   dns.mynetwork.net
    Address: 192.168.0.4
    

Настройка виртуальной сети для использования пользовательского DNS-сервера

Чтобы настроить виртуальную сеть для использования с пользовательским DNS-сервером вместо рекурсивного сопоставителя Azure, сделайте следующее на портале Azure.

  1. В меню слева выберите Все службы>Сеть>Виртуальные сети.

  2. Выберите свою виртуальную сеть из списка, чтобы открыть представление по умолчанию для виртуальной сети.

  3. В представлении по умолчанию в разделе Параметры выберите DNS-серверы.

  4. Выберите Пользовательский и введите ЧАСТНЫЙ IP-АДРЕС пользовательского DNS-сервера.

  5. Выберите Сохранить.

    Set the custom DNS server for the network.

Настройка локального DNS-сервера

В предыдущем разделе пользовательский DNS-сервер настраивался для переадресации запросов на локальный DNS-сервер. Теперь необходимо настроить локальный DNS-сервер на перенаправление запросов на пользовательский DNS-сервер.

Конкретные указания о настройке DNS-сервера см. в документации по программному обеспечению конкретного DNS-сервера. Ищите указания по настройке сервера условной пересылки.

Сервер условной пересылки только переадресовывает запросы по определенным DNS-суффиксам. В этом случае необходимо настроить сервер пересылки для DNS-суффикса виртуальной сети. Запросы для этого суффикса должны переадресовываться на IP-адрес пользовательского DNS-сервера.

Далее представлен пример конфигурации сервера условной пересылки для программного обеспечения DNS Bind:

zone "icb0d0thtw0ebifqt0g1jycdxd.ex.internal.cloudapp.net" {
    type forward;
    forwarders {10.0.0.4;}; # The custom DNS server's internal IP address
};

Дополнительные сведения об использовании DNS в Windows Server 2016 см. в документации по Add-DnsServerConditionalForwarderZone.

Настроив локальный DNS-сервер, можно использовать команду nslookup из локальной сети, чтобы убедиться, что вы можете разрешать имена в виртуальной сети. Следующий пример:

nslookup dnsproxy.icb0d0thtw0ebifqt0g1jycdxd.ex.internal.cloudapp.net 196.168.0.4

В этом примере локальный DNS-сервер по адресу 196.168.0.4 используется для разрешения имен пользовательского DNS-сервера. Замените IP-адрес IP-адресом локального DNS-сервера. Замените адрес dnsproxy полным доменным именем пользовательского DNS-сервера.

Управление сетевым трафиком (необязательно)

Для управления сетевым трафиком можно использовать группы безопасности сети или определяемые пользователем маршруты. Группы безопасности сети позволяют фильтровать входящий и исходящий трафик, а также разрешать или запрещать его. Определяемые пользователем маршруты позволяют управлять потоком трафика между ресурсами в виртуальной сети, Интернете и локальной сети.

Предупреждение

Для HDInsight требуется входящий доступ с определенных IP-адресов в облаке Azure и неограниченный исходящий доступ. При использовании группы безопасности сети или определяемых пользователем маршрутов для управления трафиком, необходимо выполнить следующее:

  1. Найдите IP-адреса расположения, которое содержит виртуальную сеть. Список требуемых IP-адресов по расположениям см. в этом разделе.

  2. Для IP-адресов, определенных на шаге 1, необходимо разрешить входящий трафик.

    • Если вы используете NSG: разрешите входящий трафик через порт 443 для этих IP-адресов.
    • Если вы используете UDR: задайте Интернет в качестве типа маршрута Следующий прыжок для IP-адресов.

Примеры использования Azure PowerShell и Azure CLI для создания групп безопасности см. в статье Расширение возможностей HDInsight с помощью виртуальной сети Azure.

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

Предупреждение

Перед установкой HDInsight в виртуальной сети, необходимо настроить пользовательский DNS-сервер.

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

Предупреждение

  • При создании кластера необходимо выбрать расположение, которое содержит вашу виртуальную сеть.
  • В разделе конфигурации Дополнительные параметры нужно выбрать виртуальную сеть и подсеть, созданные ранее.

Подключение к HDInsight

В большей части документации по HDInsight предполагается, что у вас есть доступ к кластеру через Интернет. Например, что вы можете подключиться к кластеру по адресу https://CLUSTERNAME.azurehdinsight.net. Этот адрес использует общедоступный шлюз, который будет недоступен, если вы ограничили доступ из Интернета с помощью групп безопасности сети или определяемых пользователем маршрутов.

В некоторых документах также указывается headnodehost при подключении к кластеру из сеанса SSH. Этот адрес доступен только узлам в кластере и не может использоваться в клиентах, подключенных через виртуальную сеть.

Для прямого подключения к HDInsight через виртуальную сеть сделайте следующее:

  1. Чтобы найти внутренние полные доменные имена узлов кластера HDInsight, используйте один из следующих методов:

    $resourceGroupName = "The resource group that contains the virtual network used with HDInsight"
    
    $clusterNICs = Get-AzNetworkInterface -ResourceGroupName $resourceGroupName | where-object {$_.Name -like "*node*"}
    
    $nodes = @()
    foreach($nic in $clusterNICs) {
        $node = new-object System.Object
        $node | add-member -MemberType NoteProperty -name "Type" -value $nic.Name.Split('-')[1]
        $node | add-member -MemberType NoteProperty -name "InternalIP" -value $nic.IpConfigurations.PrivateIpAddress
        $node | add-member -MemberType NoteProperty -name "InternalFQDN" -value $nic.DnsSettings.InternalFqdn
        $nodes += $node
    }
    $nodes | sort-object Type
    
    az network nic list --resource-group <resourcegroupname> --output table --query "[?contains(name,'node')].{NICname:name,InternalIP:ipConfigurations[0].privateIpAddress,InternalFQDN:dnsSettings.internalFqdn}"
    
  2. Чтобы определить порт, через который доступна служба, см. статью Порты, используемые службами Hadoop в HDInsight.

    Внимание

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

    Например, Apache Ambari одновременно активен только на одном головном узле. Если при попытке доступа к Ambari на одном головном узле он возвращает ошибку 404, значит он выполняется на другом головном узле.

Следующие шаги