Uso del firewall para restringir el tráfico saliente mediante la CLI de Azure
Nota:
Retiraremos Azure HDInsight en AKS el 31 de enero de 2025. Antes del 31 de enero de 2025, deberá migrar las cargas de trabajo a Microsoft Fabric o un producto equivalente de Azure para evitar la terminación repentina de las cargas de trabajo. Los clústeres restantes de la suscripción se detendrán y quitarán del host.
Solo el soporte técnico básico estará disponible hasta la fecha de retirada.
Importante
Esta funcionalidad actualmente está en su versión preliminar. En Términos de uso complementarios para las versiones preliminares de Microsoft Azure encontrará más términos legales que se aplican a las características de Azure que están en versión beta, en versión preliminar, o que todavía no se han lanzado con disponibilidad general. Para más información sobre esta versión preliminar específica, consulte la Información de Azure HDInsight sobre la versión preliminar de AKS. Para plantear preguntas o sugerencias sobre la característica, envíe una solicitud en AskHDInsight con los detalles y síganos para obtener más actualizaciones sobre Comunidad de Azure HDInsight.
Cuando una empresa quiere usar su propia red virtual para las implementaciones del clúster, la protección del tráfico de la red virtual es importante. En este artículo se proporcionan los pasos para proteger el tráfico saliente desde el clúster de HDInsight en AKS a través de Azure Firewall mediante CLI de Azure.
En el diagrama siguiente se muestra el ejemplo usado en este artículo para simular un escenario empresarial:
En el ejemplo que se muestra en este artículo se usa Azure Could Shell.
Definir las variables
Copiar y ejecutar en Azure Cloud Shell para establecer los valores de estas variables.
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"
Creación de una red virtual y subredes
Cree un grupo de recursos con el comando az group create.
az group create --name $RG --location $LOC
Cree una red virtual y dos subredes.
Red virtual con subred para el grupo de clústeres de HDInsight en 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
Subred para Azure Firewall.
az network vnet subnet create \ --resource-group $RG \ --vnet-name $VNET_NAME \ --name $FWSUBNET_NAME \ --address-prefix 10.2.0.0/16
Importante
- Si agrega NSG en la subred
HDIAKS_SUBNET_NAME
, debe agregar determinadas reglas de entrada y salida manualmente. Siga usar NSG para restringir el tráfico. - De forma predeterminada, la tabla de rutas no se asociará a la subred. Si es necesario, el usuario debe crear una tabla de rutas y asociarla al grupo de clústeres.
- Si agrega NSG en la subred
Creación del grupo de clústeres de HDInsight en AKS mediante Azure Portal
Cree un grupo de clústeres.
Cree una tabla de rutas.
Cree una tabla de rutas y asóciela al grupo de clústeres. Para más información, vea Crear una tabla de rutas.
Obtención de los detalles del clúster de AKS creados detrás del grupo de clústeres
Siga los pasos para obtener la información del clúster de AKS, que es útil en los pasos posteriores.
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)
Creación de un firewall
Cree un recurso de dirección IP pública de SKU estándar. Este recurso se usa como dirección de front-end de Azure Firewall.
az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
Registre la extensión de la CLI de la versión preliminar de Azure Firewall para crear una instancia de Azure Firewall.
az extension add --name azure-firewall
Cree una instancia de Azure Firewall y habilite el proxy DNS.
az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
Cree una configuración de IP de Azure Firewall.
az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
Una vez que el comando de configuración de IP se realiza correctamente, guarde la dirección IP de front-end del firewall para la configuración más adelante.
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)
Adición de reglas de red y aplicación al firewall
Creación de las reglas de red.
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
Creación de las reglas de aplicación.
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"
Cree una ruta en la tabla de rutas para redirigir el tráfico al firewall
Cree una tabla de rutas que se asociará a HDInsight en el grupo de clústeres de AKS. Para más información, consulte Crear comandos de tabla de rutas.
Creación de un clúster
En los pasos anteriores, enrutamos el tráfico de red al firewall.
En los pasos siguientes se proporcionan detalles sobre las reglas de aplicación y red específicas necesarias para cada tipo de clúster. Puede consultar las páginas de creación del clúster para crear clústeres de Apache Flink, Trino y Apache Spark en función de sus necesidades.
Importante
Antes de crear un clúster, asegúrese de ejecutar las siguientes reglas específicas del clúster para permitir el tráfico.
Trino
Agregue las siguientes reglas de red y aplicación para un clúster de 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"
Cambie el
Sql.<Region>
en la sintaxis siguiente a su región según sus necesidades. Por ejemplo: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
Agregue la siguiente regla de aplicación para un clúster de 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"
Spark de Apache
Agregue las siguientes reglas de red y aplicación para un clúster de Spark.
Cambie el
Storage.<Region>
en la sintaxis siguiente a su región según sus necesidades. Por ejemplo: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"
Cambie el
Sql.<Region>
en la sintaxis siguiente a su región según sus necesidades. Por ejemplo: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"
Solución de problemas de enrutamiento simétrico
Los pasos siguientes le permiten solicitar el clúster por servicio de entrada del equilibrador de carga del clúster y asegurarse de que el tráfico de respuesta de red no fluye al firewall. Agregue una ruta a la tabla de rutas para redirigir el tráfico de respuesta a la dirección IP del cliente a Internet y, a continuación, puede acceder directamente al clúster.
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
Si no puede acceder al clúster después de haber configurado el NSG, siga Usar NSG para restringir el tráfico para permitir el tráfico.
Sugerencia
Si desea permitir más tráfico, puede configurarlo a través del firewall.
Cómo depurar
Si encuentra que el clúster funciona inesperadamente, puede comprobar los registros del firewall para buscar qué tráfico está bloqueado.