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


Использование брандмауэра для ограничения исходящего трафика с помощью Azure CLI

Внимание

Эта функция в настоящее время доступна для предварительного ознакомления. Дополнительные условия использования для предварительных версий Microsoft Azure включают более юридические термины, применимые к функциям Azure, которые находятся в бета-версии, в предварительной версии или в противном случае еще не выпущены в общую доступность. Сведения об этой конкретной предварительной версии см. в статье Azure HDInsight в предварительной версии AKS. Для вопросов или предложений функций отправьте запрос на AskHDInsight с подробными сведениями и следуйте за нами для получения дополнительных обновлений в сообществе Azure HDInsight.

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

На следующей схеме показан пример, используемый в этой статье для имитации корпоративного сценария:

Схема, показывающая сетевой поток.

В примере, приведенном в этой статье, используется Azure Could Shell.

Определение переменных

Скопируйте и выполните в Azure Cloud Shell, чтобы задать значения этих переменных.

PREFIX="hdiaks-egress"
RG="${PREFIX}-rg"
LOC="eastus"
HDIAKS_CLUSTER_POOL=${PREFIX}
VNET_NAME="${PREFIX}-vnet"
HDIAKS_SUBNET_NAME="${PREFIX}-subnet"
# DO NOT CHANGE FWSUBNET_NAME - This is currently a requirement for Azure Firewall.
FWSUBNET_NAME="AzureFirewallSubnet"
FWNAME="${PREFIX}-fw"
FWPUBLICIP_NAME="${PREFIX}-fwpublicip"
FWIPCONFIG_NAME="${PREFIX}-fwconfig"
FWROUTE_NAME="${PREFIX}-fwrn"
FWROUTE_NAME_INTERNET="${PREFIX}-fwinternet"

Схема с переменными Cloud Shell.

Создание виртуальной сети и подсетей

  1. Создайте группу ресурсов с помощью команды az group create.

    az group create --name $RG --location $LOC
    
  2. Создайте виртуальную сеть и две подсети.

    1. Виртуальная сеть с подсетью для HDInsight в пуле кластеров AKS

       az network vnet create \
            --resource-group $RG \
            --name $VNET_NAME \
            --location $LOC \
            --address-prefixes 10.0.0.0/8 \
            --subnet-name $HDIAKS_SUBNET_NAME \
            --subnet-prefix 10.1.0.0/16
      
    2. Подсеть для Брандмауэр Azure.

      az network vnet subnet create \
         --resource-group $RG \
         --vnet-name $VNET_NAME \
         --name $FWSUBNET_NAME \
         --address-prefix 10.2.0.0/16
      

      Внимание

      1. При добавлении группы безопасности сети в подсети HDIAKS_SUBNET_NAMEнеобходимо вручную добавить определенные правила исходящего и входящего трафика. Чтобы ограничить трафик, выполните команду NSG.
      2. По умолчанию таблица маршрутов не будет связана с подсетью. При необходимости пользователь должен создать таблицу маршрутов и связать ее с пулом кластеров.

Создание HDInsight в пуле кластеров AKS с помощью портал Azure

  1. Создание пула кластера.

    Схема, на которой показана вкладка

    Схема, на которой показана вкладка

  2. Создайте таблицу маршрутов.

    Создайте таблицу маршрутов и свяжите ее с пулом кластера. Дополнительные сведения см. в статье о создании таблицы маршрутов.

Получение сведений о кластере AKS, созданных за пулом кластеров

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

AKS_MANAGED_RG=$(az network vnet subnet show --name $HDIAKS_SUBNET_NAME --vnet-name $VNET_NAME --resource-group $RG --query routeTable.resourceGroup -o tsv)

AKS_ID=$(az group show --name $AKS_MANAGED_RG --query managedBy -o tsv)

HDIAKS_MANAGED_RG=$(az resource show --ids $AKS_ID --query "resourceGroup" -o tsv)

API_SERVER=$(az aks show --name $HDIAKS_CLUSTER_POOL --resource-group $HDIAKS_MANAGED_RG --query fqdn -o tsv)

Создание брандмауэра

  1. Создайте ресурс общедоступного IP-адреса номера SKU уровня "Стандартный". Этот ресурс используется в качестве Брандмауэр Azure внешнего адреса.

    az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
    
  2. Зарегистрируйте расширение cli Брандмауэр Azure предварительной версии, чтобы создать Брандмауэр Azure.

       az extension add --name azure-firewall
    
  3. Создайте Брандмауэр Azure и включите DNS-прокси.

       az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
    
  4. Создайте Брандмауэр Azure IP-конфигурацию.

    az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
    
  5. После успешной настройки IP-адреса сохраните внешний IP-адрес брандмауэра для последующей настройки.

    FWPUBLIC_IP=$(az network public-ip show -g $RG -n $FWPUBLICIP_NAME --query "ipAddress" -o tsv)
    FWPRIVATE_IP=$(az network firewall show -g $RG -n $FWNAME --query "ipConfigurations[0].privateIPAddress" -o tsv)
    

Добавление правил сети и приложений в брандмауэр

  1. Создайте правила сети.

    az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apiudp' --protocols 'UDP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 1194 --action allow --priority 100
    
    az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apitcp' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 9000
    
    az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apiserver' --protocols 'TCP' --source-addresses '*' --destination-fqdns "$API_SERVER" --destination-ports 443
    
    #Add below step, in case you are integrating log analytics workspace
    
    az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'azuremonitor' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureMonitor" --destination-ports 443
    
  2. Создайте правила приложения.

    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'aks-fqdn' --source-addresses '*' --protocols 'http=80' 'https=443' --fqdn-tags "AzureKubernetesService" --action allow --priority 100 
    
    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'acr' --source-addresses '*' --protocols 'https=443' --target-fqdns "hiloprodrpacr00.azurecr.io"
    
    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'blob' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.blob.core.windows.net"
    
    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'servicebus' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.servicebus.windows.net"
    
    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'gsm' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.table.core.windows.net"
    
    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'gcsmonitoring' --source-addresses '*' --protocols 'https=443' --target-fqdns "gcs.prod.monitoring.core.windows.net"
    
    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'graph' --source-addresses '*' --protocols 'https=443' --target-fqdns "graph.microsoft.com"
    

Создание маршрута в таблице маршрутов для перенаправления трафика в брандмауэр

Создайте таблицу маршрутов, связанную с HDInsight в пуле кластеров AKS. Дополнительные сведения см. в разделе "Создание команд таблицы маршрутов".

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

На предыдущих шагах мы перенаправили сетевой трафик в брандмауэр.

Ниже приведены сведения о конкретных правилах сети и приложений, необходимых каждому типу кластера. Вы можете ссылаться на страницы создания кластера для создания кластеров Apache Flink, Trino и Apache Spark в зависимости от необходимости.

Внимание

Перед созданием кластера обязательно выполните следующие правила кластера, чтобы разрешить трафик.

Трино

  1. Добавьте следующие правила сети и приложений для кластера Trino.

     az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'dfs' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.dfs.core.windows.net"
    
     az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'mysql' --source-addresses '*' --protocols 'mssql=1433' --target-fqdns "*.database.windows.net"  
    

    Измените следующий Sql.<Region> синтаксис в регионе в соответствии с вашим требованием. Например: Sql.EastUS

     az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'mysql' --protocols 'TCP' --source-addresses '*' --destination-addresses Sql.<Region> --destination-ports "11000-11999"
    
  1. Добавьте следующее правило приложения для кластера Apache Flink.

    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'dfs' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.dfs.core.windows.net"
    

Apache Spark

  1. Добавьте следующие правила сети и приложений для кластера Spark.

    Измените приведенный Storage.<Region> ниже синтаксис в регион в соответствии с вашим требованием. Например: Storage.EastUS

     az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'smb' --protocols 'TCP' --source-addresses '*' --destination-addresses "Storage.<Region>" --destination-ports 445
    
     az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'dfs' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.dfs.core.windows.net"
    

    Измените приведенный Sql.<Region> ниже синтаксис в регион в соответствии с вашим требованием. Например: Sql.EastUS

     az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'mysql' --protocols 'TCP' --source-addresses '*' --destination-addresses "Sql.<Region>" --destination-ports '11000-11999'
    
     az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'mysql' --source-addresses '*' --protocols 'mssql=1433' --target-fqdns "*.database.windows.net"
    

Решение проблемы симметричного маршрутизации

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

az network route-table route create -g $AKS_MANAGED_RG --name clientip --route-table-name $ROUTE_TABLE_NAME --address-prefix {Client_IPs} --next-hop-type Internet

Если вы не можете связаться с кластером после настройки группы безопасности сети, выполните команду NSG, чтобы ограничить трафик, чтобы разрешить трафик .

Совет

Если вы хотите разрешить больше трафика, его можно настроить через брандмауэр.

Отладка

Если кластер работает неожиданно, можно проверить журналы брандмауэра, чтобы найти, какой трафик заблокирован.