Condividi tramite


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:

Diagramma che mostra il flusso di rete.

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"

Diagramma che mostra le variabili di Cloud Shell.

Creare una rete virtuale e le subnet

  1. Creare un gruppo di risorse con il comando az group create.

    az group create --name $RG --location $LOC
    
  2. Creare una rete virtuale e due subnet.

    1. 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
      
    2. 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

      1. 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.
      2. 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.

Creare il pool di cluster HDInsight su AKS usando il portale di Azure

  1. Creare un pool di cluster.

    Diagramma che mostra la scheda di base del pool di cluster.

    Diagramma che mostra la scheda Sicurezza.

  2. 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

  1. 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"
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. 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

  1. 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
    
  2. 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

  1. 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"
    
  1. 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

  1. 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.