Verwenden einer Firewall zum Einschränken des ausgehenden Datenverkehrs über die Azure CLI
Hinweis
Azure HDInsight on AKS wird am 31. Januar 2025 eingestellt. Vor dem 31. Januar 2025 müssen Sie Ihre Workloads zu Microsoft Fabric oder einem gleichwertigen Azure-Produkt migrieren, um eine abruptes Beendigung Ihrer Workloads zu vermeiden. Die verbleibenden Cluster in Ihrem Abonnement werden beendet und vom Host entfernt.
Bis zum Einstellungsdatum ist nur grundlegende Unterstützung verfügbar.
Wichtig
Diese Funktion steht derzeit als Vorschau zur Verfügung. Die zusätzlichen Nutzungsbedingungen für Microsoft Azure-Vorschauen enthalten weitere rechtliche Bestimmungen, die für Azure-Features in Betaversionen, in Vorschauversionen oder anderen Versionen gelten, die noch nicht allgemein verfügbar gemacht wurden. Informationen zu dieser spezifischen Vorschau finden Sie unter Informationen zur Vorschau von Azure HDInsight on AKS. Bei Fragen oder Funktionsvorschlägen senden Sie eine Anfrage an AskHDInsight mit den entsprechenden Details, und folgen Sie uns für weitere Updates in der Azure HDInsight-Community.
Wenn ein Unternehmen sein eigenes virtuelles Netzwerk für die Clusterbereitstellungen verwenden möchte, gewinnt der Schutz des Datenverkehrs im virtuellen Netzwerk an Bedeutung. In diesem Artikel werden die Schritte beschrieben, mit denen Sie aus Ihrem HDInsight on AKS-Cluster ausgehenden Datenverkehr über Azure Firewall mithilfe der Azure CLI schützen.
Das folgende Diagramm veranschaulicht das Beispiel, das in diesem Artikel zum Simulieren eines Unternehmensszenarios verwendet wird:
Das in diesem Artikel gezeigte Beispiel verwendet Azure Could Shell.
Definieren der Variablen
Kopieren und führen Sie in der Azure Cloud Shell aus, um die Werte dieser Variablen festzulegen.
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"
Erstellen eines virtuellen Netzwerks und der Subnetze
Erstellen Sie mit dem Befehl az group create eine Ressourcengruppe.
az group create --name $RG --location $LOC
Erstellen Sie ein virtuelles Netzwerk und zwei Subnetze.
Virtuelles Netzwerk mit Subnetz für HDInsight im AKS-Clusterpool
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
Subnetz für Azure Firewall.
az network vnet subnet create \ --resource-group $RG \ --vnet-name $VNET_NAME \ --name $FWSUBNET_NAME \ --address-prefix 10.2.0.0/16
Wichtig
- Wenn Sie NSG im Subnetz
HDIAKS_SUBNET_NAME
hinzufügen, müssen Sie bestimmte Eingangs- und Ausgangsregeln manuell hinzufügen. Halten Sie sich an die Anweisungen unter Verwenden von NSG zum Einschränken des Datenverkehrs. - Die Routingtabelle ist standardmäßig nicht mit Subnetz verknüpft. Falls erforderlich, muss der Benutzer eine Routingtabelle erstellen und sie dem Clusterpool zuordnen.
- Wenn Sie NSG im Subnetz
Erstellen eines HDInsight on AKS-Clusterpools mithilfe des Azure-Portals
Erstellen Sie einen Clusterpool.
Erstellen Sie eine Routingtabelle.
Erstellen Sie eine Routingtabelle und ordnen Sie diese dem Clusterpool zu. Weitere Informationen finden Sie unter Erstellen einer Routingtabelle.
Abrufen von AKS-Clusterdetails, die hinter dem Clusterpool erstellt wurden
Führen Sie die Schritte aus, um die AKS-Clusterinformationen abzurufen, was in den nachfolgenden Schritten hilfreich ist.
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)
Erstellen einer Firewall
Erstellen einer öffentlichen IP-Ressource der SKU „Standard“ Diese Ressource wird als Front-End-Adresse für die Azure Firewall verwendet.
az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
Registrieren Sie die Azure Firewall Vorschau-CLI-Erweiterung, um eine Azure Firewall zu erstellen.
az extension add --name azure-firewall
Erstellen Sie eine Azure Firewall, und aktivieren Sie den DNS-Proxy.
az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
Erstellen Sie eine Azure Firewall-IP-Konfiguration.
az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
Sobald der IP-Konfigurations-Befehl erfolgreich ist, speichern Sie die IP-Adresse des Firewall-Front-Ends zur späteren Konfiguration.
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)
Hinzufügen von Netzwerk- und Anwendungsregeln zur Firewall
Erstellen Sie die Netzwerkregeln.
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
Erstellen Sie die Anwendungsregeln.
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"
Erstellen einer Route in der Routingtabelle zum Umleiten des Datenverkehrs an die Firewall
Erstellen Sie eine Routingtabelle, die HDInsight im AKS-Clusterpool zugeordnet werden soll. Weitere Informationen finden Sie unter Erstellen von Routingtabellenbefehlen.
Cluster erstellen
In den vorherigen Schritten haben wir den Netzwerkdatenverkehr an die Firewall weitergeleitet.
Die folgenden Schritte enthalten Details zu den spezifischen Netzwerk- und Anwendungsregeln, die für die einzelnen Clustertypen erforderlich sind. Sie können auf den Seiten zur Clustererstellung nachlesen, wie Sie je nach Bedarf Apache Flink-, Trino- und Apache Spark-Cluster erstellen.
Wichtig
Bevor Sie den Cluster erstellen, müssen Sie die folgenden clusterspezifischen Regeln hinzufügen, um den Datenverkehr zuzulassen.
Trino
Fügen Sie die folgenden Netzwerk- und Anwendungsregeln für einen Trino-Cluster hinzu.
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"
Ändern Sie die
Sql.<Region>
folgende Syntax gemäß Ihrer Anforderung in Ihre Region. Beispiel: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
Fügen Sie die folgende Anwendungsregel für einen Apache Flink-Cluster hinzu.
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
Fügen Sie die folgenden Netzwerk- und Anwendungsregeln für einen Spark-Cluster hinzu.
Ändern Sie die
Storage.<Region>
in der folgenden Syntax gemäß Ihrer Anforderung in Ihre Region. Beispiel: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"
Ändern Sie die
Sql.<Region>
in der folgenden Syntax gemäß Ihrer Anforderung in Ihre Region. Beispiel: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"
Beheben eines Problems beim symmetrischen Routing
Die folgende Vorgehensweise ermöglicht es Ihnen, einen clusterspezifischen Lastenausgleichsdienst für eingehenden Datenverkehr anzufordern und so sicherzustellen, dass der Datenverkehr der Netzwerkantwort nicht an die Firewall geleitet wird. Fügen Sie der Routingtabelle eine Route hinzu, um den Antwortdatenverkehr an Ihre Client-IP-Adresse an das Internet umzuleiten. Anschließend können Sie den Cluster direkt erreichen.
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
Wenn Sie den Cluster nicht erreichen können, nachdem Sie NSG konfiguriert haben, verwenden Sie NSG, um den Datenverkehr einzuschränken, um den Datenverkehr zuzulassen.
Tipp
Wenn Sie mehr Datenverkehr zulassen möchten, können Sie ihn über die Firewall konfigurieren.
Debuggen
Wenn Sie eine unerwartete Funktionsweise des Clusters feststellen, können Sie anhand der Firewallprotokolle ermitteln, welcher Datenverkehr blockiert ist.