Использование брандмауэра для ограничения исходящего трафика с помощью 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"
Создание виртуальной сети и подсетей
Создайте группу ресурсов с помощью команды 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
Внимание
- При добавлении группы безопасности сети в подсети
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
Создайте Брандмауэр Azure IP-конфигурацию.
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
Если вы не можете связаться с кластером после настройки группы безопасности сети, выполните команду NSG, чтобы ограничить трафик, чтобы разрешить трафик .
Совет
Если вы хотите разрешить больше трафика, его можно настроить через брандмауэр.
Отладка
Если кластер работает неожиданно, можно проверить журналы брандмауэра, чтобы найти, какой трафик заблокирован.