Usare il firewall per limitare il traffico in uscita usando l'interfaccia della riga di comando di Azure
Importante
Azure HDInsight su AKS è stato ritirato il 31 gennaio 2025. Scopri di più su questo annuncio .
È necessario eseguire la migrazione dei carichi di lavoro a Microsoft Fabric o a un prodotto Azure equivalente per evitare la chiusura brusca dei carichi di lavoro.
Importante
Questa funzionalità è attualmente in anteprima. Le condizioni supplementari per l'utilizzo per le anteprime di Microsoft Azure includono termini legali più validi applicabili alle funzionalità di Azure in versione beta, in anteprima o altrimenti non ancora rilasciate nella disponibilità generale. Per informazioni su questa anteprima specifica, vedere informazioni sull'anteprima di Azure HDInsight su AKS. Per domande o suggerimenti sulle funzionalità, invia una richiesta in AskHDInsight con i dettagli e segui noi per altri aggiornamenti su Azure HDInsight Community.
Quando un'azienda vuole usare la propria rete virtuale per le distribuzioni del cluster, la protezione del traffico della rete virtuale diventa importante. Questo articolo illustra la procedura per proteggere il traffico in uscita dal cluster HDInsight nel servizio Azure Kubernetes tramite Firewall di Azure usando l'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 delle sottoreti
Creare un gruppo di risorse usando 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 dell'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
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 aggiungi un NSG (gruppo di sicurezza di rete) nella subnet
HDIAKS_SUBNET_NAME
, devi aggiungere manualmente alcune regole di ingresso e di uscita. Segui utilizzando NSG 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 aggiungi un NSG (gruppo di sicurezza di rete) nella subnet
Creare HDInsight nel pool di cluster di AKS utilizzando il portale di Azure
Creare un pool di cluster.
Creare una tabella di route.
Creare una tabella di routing e associarla al pool del cluster. Per ulteriori informazioni, vedere creare una tabella di routing.
Ottenere i dettagli del cluster AKS creato dietro il pool di cluster.
Seguire i passaggi per ottenere le informazioni sull'AKS cluster, 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 un firewall
Creare un indirizzo IP pubblico 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"
Iscriviti all'estensione dell'interfaccia della riga di comando in anteprima di Azure Firewall per creare un Firewall di Azure.
az extension add --name azure-firewall
Creare un 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 instradamento da associare a HDInsight nel pool di cluster AKS. Per altre informazioni, vedere i comandi per creare la tabella di route.
Creare un 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 fare riferimento alle pagine di creazione del cluster per la creazione di Apache Flink, Trinoe cluster 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"
Modifica il
Sql.<Region>
nella sintassi seguente con la tua regione in base alle tue 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 il
Storage.<Region>
nella sintassi seguente impostando la tua regione secondo le 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 il
Sql.<Region>
nella sintassi seguente per la tua regione secondo le tue necessità. 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 servizio di ingresso del bilanciamento del carico per ciascun cluster e garantire che il traffico di risposta di rete non attraversi il firewall. Aggiungere una route alla tabella di route per reindirizzare il traffico di ritorno all'indirizzo IP client verso Internet, in modo da poter 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 puoi raggiungere il cluster dopo aver configurato il gruppo di sicurezza di rete, segui queste istruzioni: , utilizza il gruppo di sicurezza di rete per limitare il traffico;, per consentire il traffico.
Suggerimento
Se si vuole consentire un maggior traffico, è possibile configurarlo tramite il firewall.
Come eseguire il debug
Se il cluster funziona in modo imprevisto, è possibile controllare i log del firewall per individuare il traffico bloccato.