Ograniczanie ruchu wychodzącego przy użyciu interfejsu wiersza polecenia platformy Azure przy użyciu zapory

Ważne

Ta funkcja jest aktualnie dostępna jako funkcja podglądu. Dodatkowe warunki użytkowania dla wersji zapoznawczych platformy Microsoft Azure obejmują więcej warunków prawnych, które dotyczą funkcji platformy Azure, które znajdują się w wersji beta, w wersji zapoznawczej lub w inny sposób nie zostały jeszcze wydane w wersji ogólnodostępnej. Aby uzyskać informacje o tej konkretnej wersji zapoznawczej, zobacz Informacje o wersji zapoznawczej usługi Azure HDInsight w usłudze AKS. W przypadku pytań lub sugestii dotyczących funkcji prześlij żądanie w usłudze AskHDInsight , aby uzyskać szczegółowe informacje i postępuj zgodnie z nami, aby uzyskać więcej aktualizacji w społeczności usługi Azure HDInsight.

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

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 usługi HDInsight w puli klastrów usługi 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żne

      1. Jeśli dodasz sieciową grupę zabezpieczeń w podsieci HDIAKS_SUBNET_NAME, musisz ręcznie dodać pewne reguły ruchu wychodzącego i przychodzącego. 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 usługi AKS przy użyciu witryny Azure Portal

  1. Utwórz pulę klastrów.

    Diagram przedstawiający kartę podstawową 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 tworzenie tabeli tras.

Pobieranie szczegółów klastra usługi AKS utworzonych za pulą 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 zasób publicznego adresu IP jednostki SKU w warstwie Standardowa. 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)
    

Dodawanie reguł sieci i aplikacji 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"
    

Tworzenie trasy w tabeli tras w celu przekierowania ruchu do zapory

Utwórz tabelę tras, która ma być skojarzona z usługą HDInsight w puli klastrów usługi AKS. Aby uzyskać więcej informacji, zobacz create route table commands (Tworzenie poleceń tabeli tras).

Tworzenie klastra

W poprzednich krokach kierować 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 tworzenia klastra na potrzeby tworzenia klastrów Apache Flink, Trino i Apache Spark .

Ważne

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ń następującą składnię Sql.<Region> 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"
    
  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ń w Storage.<Region> poniższej składni na 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ń w Sql.<Region> poniższej 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 umożliwiają zażądanie klastra przez usługę ruchu przychodzącego modułu równoważenia obciążenia klastra i upewnienie się, że ruch odpowiedzi sieciowej nie przepływa do zapory. 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ń, postępuj zgodnie z instrukcjami , aby ograniczyć ruch, aby zezwolić na ruch .

Napiwek

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

Jak debugować

Jeśli znajdziesz klaster działa nieoczekiwanie, możesz sprawdzić dzienniki zapory, aby znaleźć, który ruch jest blokowany.