Usare il firewall per limitare il traffico in uscita tramite l'interfaccia della riga di comando di Azure
Nota
Azure HDInsight su AKS verrà ritirato il 31 gennaio 2025. Prima del 31 gennaio 2025, sarà necessario eseguire la migrazione dei carichi di lavoro a Microsoft Fabric o a un prodotto Azure equivalente per evitare interruzioni improvvise dei carichi di lavoro. I cluster rimanenti nella sottoscrizione verranno arrestati e rimossi dall’host.
Solo il supporto di base sarà disponibile fino alla data di ritiro.
Importante
Questa funzionalità è attualmente disponibile solo in anteprima. Le Condizioni per l'utilizzo supplementari per le anteprime di Microsoft Azure includono termini legali aggiuntivi che si applicano a funzionalità di Azure in versione beta, in anteprima o in altro modo non ancora disponibili a livello generale. Per informazioni su questa anteprima specifica, vedere Informazioni sull'anteprima di Azure HDInsight nel servizio Azure Kubernetes. Per domande o suggerimenti sulle funzionalità, inviare una richiesta in AskHDInsight con i dettagli e seguire Microsoft per altri aggiornamenti nella Community di Azure HDInsight.
Quando un'azienda vuole usare la propria rete virtuale per le distribuzioni di cluster, la protezione del traffico della rete virtuale è un aspetto importante. Questo articolo illustra la procedura per proteggere il traffico in uscita dal cluster HDInsight su AKS tramite Firewall di Azure nell'interfaccia della riga di comando di Azure.
Il diagramma seguente illustra l'esempio usato in questo articolo per simulare uno scenario aziendale:
L'esempio illustrato in questo articolo usa Azure Could Shell.
Definire le variabili
Copiare ed eseguire in Azure Cloud Shell per impostare i valori di queste variabili.
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"
Creare una rete virtuale e le subnet
Creare un gruppo di risorse con il comando az group create.
az group create --name $RG --location $LOC
Creare una rete virtuale e due subnet.
Rete virtuale con subnet per HDInsight nel pool di cluster del servizio Azure Kubernetes
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
Subnet per Firewall di Azure.
az network vnet subnet create \ --resource-group $RG \ --vnet-name $VNET_NAME \ --name $FWSUBNET_NAME \ --address-prefix 10.2.0.0/16
Importante
- Se si aggiunge un gruppo di sicurezza di rete nella subnet
HDIAKS_SUBNET_NAME
, è necessario aggiungere manualmente determinate regole in uscita e in ingresso. Seguire Usare il gruppo di sicurezza di rete per limitare il traffico. - Per impostazione predefinita, la tabella di route non verrà associata alla subnet. Se necessario, l'utente deve creare una tabella di route e associarla al pool di cluster.
- Se si aggiunge un gruppo di sicurezza di rete nella subnet
Creare il pool di cluster HDInsight su AKS usando il portale di Azure
Creare un pool di cluster.
Crea una tabella di routing.
Creare una tabella di route e associarla al pool di cluster. Per altre informazioni, vedere Creare una tabella di route.
Ottenere i dettagli del cluster del servizio Azure Kubernetes creato dietro il pool di cluster
Seguire la procedura per ottenere le informazioni sul cluster del servizio Azure Kubernetes, utili nei passaggi successivi.
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)
Creare il firewall
Creare una risorsa IP pubblico con SKU Standard. Questa risorsa viene usata come indirizzo front-end di Firewall di Azure.
az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
Registrare l'estensione dell'interfaccia della riga di comando di anteprima di firewall di Azure per creare un'istanza di Firewall di Azure.
az extension add --name azure-firewall
Creare un'istanza di Firewall di Azure e abilitare il proxy DNS.
az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
Creare una configurazione IP di Firewall di Azure.
az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
Al termine del comando di configurazione IP, salvare l'indirizzo IP front-end del firewall per la configurazione in un secondo momento.
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)
Aggiungere regole di rete e applicazione al firewall
Creare le regole di rete.
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
Creare le regole dell'applicazione.
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"
Creare una route nella tabella di route per reindirizzare il traffico al firewall
Creare una tabella di route da associare a HDInsight nel pool di cluster del servizio Azure Kubernetes. Per altre informazioni, vedere Creare i comandi della tabella di route.
Creare cluster
Nei passaggi precedenti è stato instradato il traffico di rete al firewall.
I passaggi seguenti forniscono informazioni dettagliate sulle regole di rete e applicazione specifiche necessarie per ogni tipo di cluster. È possibile consultare le pagine di creazione del cluster per la creazione di cluster Apache Flink, Trino e Apache Spark in base alle esigenze.
Importante
Prima di creare un cluster, assicurarsi di eseguire le regole specifiche del cluster seguenti per consentire il traffico.
Trino
Aggiungere le regole di rete e applicazione seguenti per un cluster 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"
Modificare
Sql.<Region>
nella sintassi seguente impostando l'area in base alle esigenze. Ad esempio: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
Aggiungere la regola dell'applicazione seguente per un cluster 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
Aggiungere le regole di rete e applicazione seguenti per un cluster Spark.
Modificare
Storage.<Region>
nella sintassi seguente impostando l'area in base alle esigenze. Ad esempio: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"
Modificare
Sql.<Region>
nella sintassi seguente impostando l'area in base alle esigenze. Ad esempio: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"
Risolvere il problema di routing simmetrico
I passaggi seguenti consentono di richiedere il cluster in base al servizio di ingresso del servizio di bilanciamento del carico del cluster e assicurarsi che il traffico di risposta di rete non passi attraverso il firewall. Aggiungere una route alla tabella di route per reindirizzare il traffico di risposta all'indirizzo IP client a Internet e raggiungere direttamente il cluster.
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
Se non è possibile raggiungere il cluster dopo avere configurato il gruppo di sicurezza di rete, seguire Usare il gruppo di sicurezza di rete per limitare il traffico per consentire il traffico.
Suggerimento
Se si vuole consentire più traffico, è possibile configurarlo tramite il firewall.
Come eseguire il debug
Se il cluster funziona in modo imprevisto, è possibile verificare i log del firewall per individuare il traffico bloccato.