Использование брандмауэра для ограничения исходящего трафика с помощью Azure CLI
Важный
Azure HDInsight на AKS было прекращено 31 января 2025 г. Дополнительные сведения о в этом объявлении.
Необходимо перенести рабочие нагрузки в Microsoft Fabric или эквивалентный продукт Azure, чтобы избежать резкого завершения рабочих нагрузок.
Важный
Эта функция сейчас доступна в предварительной версии. Дополнительные условия использования для предварительных версий Microsoft Azure включают дополнительные юридические термины, применимые к функциям Azure, которые находятся в бета-версии, в предварительной версии или в противном случае еще не выпущены в общую доступность. Сведения об этой конкретной предварительной версии см. в Azure HDInsight в предварительной версии AKS. Для вопросов или предложений о новых функциях отправьте запрос на AskHDInsight с подробной информацией и следите за обновлениями в Azure HDInsight Community.
Когда предприятие хочет использовать собственную виртуальную сеть для развертываний кластера, защита трафика виртуальной сети становится важной. В этой статье описаны действия по защите исходящего трафика из кластера 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"
Создание виртуальной сети и подсетей
Создайте группу ресурсов с помощью команды az group create.
az group create --name $RG --location $LOC
Создайте виртуальную сеть и две подсети.
Виртуальная сеть с подсетью для 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
Подсеть для брандмауэра Azure.
az network vnet subnet create \ --resource-group $RG \ --vnet-name $VNET_NAME \ --name $FWSUBNET_NAME \ --address-prefix 10.2.0.0/16
Важный
- Если вы добавите NSG в подсеть
HDIAKS_SUBNET_NAME
, вам необходимо вручную добавить определенные правила для исходящего и входящего трафика. Следуйте используйте группу безопасности сети, чтобы ограничить трафик. - По умолчанию таблица маршрутов не будет связана с подсетью. При необходимости пользователь должен создать таблицу маршрутов и связать ее с пулом кластеров.
- Если вы добавите NSG в подсеть
Создание HDInsight в пуле кластеров AKS с помощью портала Azure
Создайте пул кластера.
Создайте таблицу маршрутов.
Создайте таблицу маршрутов и свяжите ее с пулом кластера. Для получения дополнительной информации см. создание таблицы маршрутов.
Получить сведения о кластере 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)
Создание брандмауэра
Создайте ресурс общедоступного IP-адреса номера SKU уровня "Стандартный". Этот ресурс используется в качестве внешнего адреса брандмауэра Azure.
az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
Зарегистрируйте предварительное расширение CLI брандмауэра Azure, чтобы создать брандмауэр Azure.
az extension add --name azure-firewall
Создайте брандмауэр Azure и включите DNS-прокси.
az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
Создайте IP-конфигурацию брандмауэра Azure.
az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
После успешной настройки 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)
Добавление правил сети и приложений в брандмауэр
Создайте правила сети.
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
Создайте правила приложения.
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 можно использовать в зависимости от вашей необходимости.
Важный
Перед созданием кластера обязательно выполните следующие правила кластера, чтобы разрешить трафик.
Трино
Добавьте следующие правила сети и приложений для кластера 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"
Apache Flink
Добавьте следующее правило приложения для кластера 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
Добавьте следующие правила сети и приложений для кластера 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
Если вы не можете связаться с кластером после настройки группы безопасности сети, следуйте указаниям: используйте группу безопасности сети, чтобы ограничить трафик, а затем, чтобы разрешить трафик.
Кончик
Если вы хотите разрешить больше трафика, его можно настроить через брандмауэр.
Как выполнять отладку
Если кластер работает неожиданно, можно проверить журналы брандмауэра, чтобы найти, какой трафик заблокирован.