Condividi tramite


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:

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 delle sottoreti

  1. Creare un gruppo di risorse usando 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 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
      
    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 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.
      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 HDInsight nel pool di cluster di AKS utilizzando 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. 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

  1. 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"
    
  2. 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
    
  3. Creare un 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 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

  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"  
    

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