Udostępnij za pośrednictwem


Ograniczanie ruchu wychodzącego za pomocą zapory poprzez Azure CLI

Ważny

Usługa Azure HDInsight w usłudze AKS została wycofana 31 stycznia 2025 r. Dowiedz się więcej z tym ogłoszeniem.

Aby uniknąć nagłego kończenia obciążeń, należy przeprowadzić migrację obciążeń do usługi Microsoft Fabric lub równoważnego produktu platformy Azure.

Ważny

Ta funkcja jest obecnie dostępna w wersji zapoznawczej. Dodatkowe warunki użytkowania Microsoft Azure zawierają więcej warunków prawnych, które odnoszą się do funkcji platformy Azure będących w wersji beta, wersji zapoznawczej lub które jeszcze nie zostały wydane do ogólnej dostępności. Aby uzyskać informacje na temat tej konkretnej wersji zapoznawczej, zobacz informacje o wersji zapoznawczej Azure HDInsight na AKS. W przypadku pytań lub sugestii dotyczących funkcji prosimy o przesłanie zgłoszenia na AskHDInsight, a także śledzenie Azure HDInsight Community, aby uzyskać więcej informacji.

Gdy przedsiębiorstwo chce używać własnej sieci wirtualnej do wdrożeń klastra, zabezpieczanie ruchu sieci wirtualnej staje się ważne. Ten artykuł zawiera kroki zabezpieczania ruchu wychodzącego z klastra usługi HDInsight w klastrze usługi AKS za pośrednictwem usługi Azure Firewall przy użyciu interfejsu wiersza polecenia platformy Azure.

Na poniższym diagramie przedstawiono przykład używany w tym artykule do symulowania scenariusza przedsiębiorstwa:

Diagram przedstawiający przepływ sieciowy.

W przykładzie przedstawionym w tym artykule jest użycie usługi Azure Could Shell.

Definiowanie zmiennych

skopiuj i wykonaj polecenie w usłudze Azure Cloud Shell, aby ustawić wartości tych zmiennych.

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"

Diagram przedstawiający zmienne usługi Cloud Shell.

Tworzenie sieci wirtualnej i podsieci

  1. Utwórz grupę zasobów przy użyciu polecenia az group create.

    az group create --name $RG --location $LOC
    
  2. Utwórz sieć wirtualną i dwie podsieci.

    1. Sieć wirtualna z podsiecią dla HDInsight w puli klastrów 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. Podsieć dla usługi Azure Firewall.

      az network vnet subnet create \
         --resource-group $RG \
         --vnet-name $VNET_NAME \
         --name $FWSUBNET_NAME \
         --address-prefix 10.2.0.0/16
      

      Ważny

      1. Jeśli dodasz grupę zabezpieczeń sieciowych w podsieci HDIAKS_SUBNET_NAME, musisz ręcznie dodać pewne reguły ruchu wychodzącego i przychodzącego. Postępuj zgodnie z użyj sieciowej grupy zabezpieczeń, aby ograniczyć ruch.
      2. Domyślnie tabela tras nie będzie skojarzona z podsiecią. Jeśli jest to wymagane, użytkownik musi utworzyć tabelę tras i skojarzyć ją z pulą klastrów.

Tworzenie usługi HDInsight w puli klastrów AKS za pomocą portalu Azure

  1. Utwórz pulę klastrów.

    Diagram przedstawiający podstawową zakładkę puli klastrów.

    Diagram przedstawiający kartę zabezpieczeń.

  2. Utwórz tabelę tras.

    Utwórz tabelę tras i skojarz ją z pulą klastrów. Aby uzyskać więcej informacji, zobacz utwórz tabelę tras.

Uzyskaj szczegóły klastra AKS utworzonego w puli klastrów

Wykonaj kroki, aby uzyskać informacje o klastrze usługi AKS, które są przydatne w kolejnych krokach.

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)

Tworzenie zapory

  1. Utwórz publiczny zasób IP SKU w wersji Standard. Ten zasób jest używany jako adres frontonu usługi Azure Firewall.

    az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
    
  2. Zarejestruj rozszerzenie interfejsu wiersza polecenia usługi Azure Firewall w wersji zapoznawczej, aby utworzyć usługę Azure Firewall.

       az extension add --name azure-firewall
    
  3. Utwórz usługę Azure Firewall i włącz serwer proxy DNS.

       az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
    
  4. Utwórz konfigurację adresu IP usługi Azure Firewall.

    az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
    
  5. Po pomyślnym zakończeniu polecenia konfiguracji adresu IP zapisz adres IP frontonu zapory na potrzeby konfiguracji później.

    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)
    

Dodaj reguły sieciowe i aplikacyjne do zapory

  1. Utwórz reguły sieci.

    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. Utwórz reguły aplikacji.

    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"
    

Utwórz trasę w tabeli tras, aby przekierować ruch do zapory.

Utwórz tabelę tras, aby skojarzyć ją z usługą HDInsight na puli klastrów AKS. Aby uzyskać więcej informacji, zobacz polecenia tworzenia tabeli tras.

Tworzenie klastra

W poprzednich krokach skierowaliśmy ruch sieciowy do zapory.

Poniższe kroki zawierają szczegółowe informacje o określonych regułach sieci i aplikacji wymaganych przez każdy typ klastra. Możesz zapoznać się ze stronami dotyczącymi tworzenia klastrów Apache Flink, Trinoi Apache Spark w zależności od potrzeb.

Ważny

Przed utworzeniem klastra należy uruchomić następujące reguły specyficzne dla klastra, aby zezwolić na ruch.

Trino

  1. Dodaj następujące reguły sieci i aplikacji dla klastra 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"  
    

    Zmień Sql.<Region> w następującej składni na swój region według Twojego uznania. Na przykład: 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. Dodaj następującą regułę aplikacji dla klastra 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. Dodaj następujące reguły sieci i aplikacji dla klastra Spark.

    Zmień Storage.<Region> w następującej składni na swój region zgodnie z wymaganiami. Na przykład: 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"
    

    Zmień Sql.<Region> w następującej składni na region zgodnie z wymaganiami. Na przykład: 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"
    

Rozwiązywanie problemu z routingiem symetrycznym

Poniższe kroki pozwalają na zażądanie usługi wejściowej równoważenia obciążenia dla każdego klastra i zapewnienie, że ruch odpowiedzi sieciowej nie przechodzi przez zaporę. Dodaj trasę do tabeli tras, aby przekierować ruch odpowiedzi do adresu IP klienta do Internetu, a następnie możesz uzyskać bezpośredni dostęp do klastra.

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

Jeśli nie możesz nawiązać połączenia z klastrem po skonfigurowaniu sieciowej grupy zabezpieczeń, wykonaj krok , aby użyć tej grupy do ograniczenia ruchu, a następnie krok, aby zezwolić na ruch.

Napiwek

Jeśli chcesz zezwolić na większy ruch, możesz skonfigurować go przez zaporę.

Jak debugować

Jeśli okaże się, że klaster działa nieoczekiwanie, możesz sprawdzić dzienniki zapory, aby znaleźć, jaki ruch jest blokowany.