Einschränken des ausgehenden Datenverkehrs von SQL Server 2019 Big Data-Clusters in einem privaten Azure Kubernetes Service-Cluster (AKS-Cluster)

Wichtig

Das Microsoft SQL Server 2019-Big Data-Cluster-Add-On wird eingestellt. Der Support für SQL Server 2019-Big Data-Clusters endet am 28. Februar 2025. Alle vorhandenen Benutzer*innen von SQL Server 2019 mit Software Assurance werden auf der Plattform vollständig unterstützt, und die Software wird bis zu diesem Zeitpunkt weiterhin über kumulative SQL Server-Updates verwaltet. Weitere Informationen finden Sie im Ankündigungsblogbeitrag und unter Big Data-Optionen auf der Microsoft SQL Server-Plattform.

Sie können den ausgehenden Datenverkehr von Big Data-Clustern mit Azure Kubernetes Service (AKS) einschränken. Der Dienst stellt einen standardmäßigen SKU-Load Balancer bereit. Dieser wird standardmäßig für ausgehenden Datenverkehr eingerichtet und verwendet. Jetzt erfüllt das Standardsetup möglicherweise nicht alle Szenarios und Anforderungen. Ein Beispiel ist, wenn öffentliche IPs nicht zulässig sind oder zusätzliche Hops für den Ausgang erforderlich sind. Sie können eine Tabelle für benutzerdefiniertes Routing (User-Defined Routing, UDR) definieren, wenn der Cluster keine öffentlichen IP-Adressen zulässt und sich hinter einem virtuellen Netzwerkgerät (Network Virtual Appliance, NVA) befindet.

AKS-Cluster haben uneingeschränkten ausgehenden Internetzugriff. Dies gilt für Verwaltungs- und Betriebszwecke. Die Workerknoten in einem AKS-Cluster müssen auf bestimmte Ports und vollqualifizierte Domänennamen (Fully Qualified Domain Names, FQDNs) zugreifen. Nachfolgend sehen Sie einige Beispiele:

  • Wenn der Cluster während Sicherheitsupdates für das Betriebssystem Containerimages des Basissystems aus der Microsoft-Containerregistrierung (Microsoft Container Registry, MCR) abrufen muss
  • Wenn GPU-fähige AKS-Workerknoten auf Endpunkte von Nvidia zugreifen müssen, um Treiber zu installieren
  • Wenn Kunden AKS-Workerknoten in Verbindung mit Azure-Diensten wie Azure Policy für die Konformität auf Unternehmensebene oder Azure Monitoring (mit Container Insights) verwenden
  • Wenn ein Dev Space und andere ähnliche Szenarios aktiviert sind

Hinweis

Wenn Sie einen Big Data-Cluster (BDC) in einem privaten Cluster von Azure Kubernetes Service (AKS) bereitstellen, gibt es keine eingehenden Abhängigkeiten, außer diejenigen, die in diesem Artikel erwähnt werden. Sie finden alle ausgehenden Abhängigkeiten unter Steuern des ausgehenden Datenverkehrs für Clusterknoten in Azure Kubernetes Service (AKS).

In diesem Artikel wird beschrieben, wie BDCs im privaten AKS-Cluster mit erweiterten Netzwerken und UDR bereitgestellt werden. Außerdem wird die weitere Integration von BDC in Unternehmensnetzwerkumgebungen untersucht.

So schränken Sie den ausgehenden Datenverkehrs mithilfe von Azure Firewall ein

Azure Firewall bietet ein FQDN-Tag für Azure Kubernetes Service, (AzureKubernetesService), um diese Konfiguration zu vereinfachen.

Ausführliche Informationen zu diesem Tag finden Sie unter Einschränken von ausgehendem Datenverkehr mithilfe von Azure Firewall.

In der folgenden Abbildung ist dargestellt, wie der Datenverkehr in einem privaten AKS-Cluster eingeschränkt wird.

Screenshot that shows AKS private cluster firewall egress traffic.

Entwickeln Sie die grundlegende Architektur für einen Big Data-Cluster mit Azure Firewall:

  1. Erstellen der Ressourcengruppe und des VNets
  2. Erstellen und Einrichten von Azure Firewall
  3. Erstellen einer benutzerdefinierten Routingtabelle
  4. Einrichten von Firewallregeln
  5. Erstellen des Dienstprinzipals (Service Principal, SP)
  6. Erstellen des privaten AKS-Clusters
  7. Erstellen eines BDC-Bereitstellungsprofils
  8. Bereitstellen von BDC

Erstellen der Ressourcengruppe und des VNets

  1. Definieren Sie eine Reihe von Umgebungsvariablen für das Erstellen von Ressourcen.

    export REGION_NAME=<region>
    export RESOURCE_GROUP=private-bdc-aksudr-rg
    export SUBNET_NAME=aks-subnet
    export VNET_NAME=bdc-vnet
    export AKS_NAME=bdcaksprivatecluster
    
  2. Ressourcengruppe erstellen

    az group create -n $RESOURCE_GROUP -l $REGION_NAME
    
  3. Erstellen des VNets

    az network vnet create \
      --resource-group $RESOURCE_GROUP \
      --location $REGION_NAME \
      --name $VNET_NAME \
      --address-prefixes 10.0.0.0/8 \
      --subnet-name $SUBNET_NAME \
      --subnet-prefix 10.1.0.0/16
    
    SUBNET_ID=$(az network vnet subnet show \
      --resource-group $RESOURCE_GROUP \
      --vnet-name $VNET_NAME \
      --name $SUBNET_NAME \
      --query id -o tsv)
    

Erstellen und Einrichten von Azure Firewall

  1. Definieren Sie eine Reihe von Umgebungsvariablen für das Erstellen von Ressourcen.

    export FWNAME=bdcaksazfw
    export FWPUBIP=$FWNAME-ip
    export FWIPCONFIG_NAME=$FWNAME-config
    
    az extension add --name azure-firewall
    
  2. Erstellen eines dedizierten Subnetzes für die Firewall

    Hinweis

    Der Firewallname kann nach der Erstellung nicht mehr geändert werden.

    az network vnet subnet create \
      --resource-group $RESOURCE_GROUP \
      --vnet-name $VNET_NAME \
      --name AzureFirewallSubnet \
      --address-prefix 10.3.0.0/24
    
     az network firewall create -g $RESOURCE_GROUP -n $FWNAME -l $REGION_NAME --enable-dns-proxy true
    
     az network public-ip create -g $RESOURCE_GROUP -n $FWPUBIP -l $REGION_NAME --sku "Standard"
    
     az network firewall ip-config create -g $RESOURCE_GROUP -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBIP --vnet-name $VNET_NAME
    

Azure führt für Datenverkehr automatisch das Routing zwischen Azure-Subnetzen, virtuellen Netzwerken und lokalen Netzwerken durch.

So erstellen Sie eine benutzerdefinierte Routingtabelle

Sie können eine UDR-Tabelle mit einem Hop zu Azure Firewall erstellen.


export SUBID= <your Azure subscription ID>
export FWROUTE_TABLE_NAME=bdcaks-rt
export FWROUTE_NAME=bdcaksroute
export FWROUTE_NAME_INTERNET=bdcaksrouteinet

export FWPUBLIC_IP=$(az network public-ip show -g $RESOURCE_GROUP -n $FWPUBIP --query "ipAddress" -o tsv)
export FWPRIVATE_IP=$(az network firewall show -g $RESOURCE_GROUP -n $FWNAME --query "ipConfigurations[0].privateIpAddress" -o tsv)

# Create UDR and add a route for Azure Firewall

az network route-table create -g $RESOURCE_GROUP --name $FWROUTE_TABLE_NAME

az network route-table route create -g $RESOURCE_GROUP --name $FWROUTE_NAME --route-table-name $FWROUTE_TABLE_NAME --address-prefix 0.0.0.0/0 --next-hop-type VirtualAppliance --next-hop-ip-address $FWPRIVATE_IP --subscription $SUBID

az network route-table route create -g $RESOURCE_GROUP --name $FWROUTE_NAME_INTERNET --route-table-name $FWROUTE_TABLE_NAME --address-prefix $FWPUBLIC_IP/32 --next-hop-type Internet

So legen Sie Firewallregeln fest

# Add FW Network Rules

az network firewall network-rule create -g $RESOURCE_GROUP -f $FWNAME --collection-name 'aksfwnr' -n 'apiudp' --protocols 'UDP' --source-addresses '*' --destination-addresses "AzureCloud.$REGION_NAME" --destination-ports 1194 --action allow --priority 100
az network firewall network-rule create -g $RESOURCE_GROUP -f $FWNAME --collection-name 'aksfwnr' -n 'apitcp' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureCloud.$REGION_NAME" --destination-ports 9000
az network firewall network-rule create -g $RESOURCE_GROUP -f $FWNAME --collection-name 'aksfwnr' -n 'time' --protocols 'UDP' --source-addresses '*' --destination-fqdns 'ntp.ubuntu.com' --destination-ports 123

# Add FW Application Rules

az network firewall application-rule create -g $RESOURCE_GROUP -f $FWNAME --collection-name 'aksfwar' -n 'fqdn' --source-addresses '*' --protocols 'http=80' 'https=443' --fqdn-tags "AzureKubernetesService" --action allow --priority 100

Sie können einen UDR einem AKS-Cluster zuordnen, in dem Sie zuvor eine BDC bereitgestellt haben, indem Sie den folgenden Befehl verwenden:

az network vnet subnet update -g $RESOURCE_GROUP --vnet-name $VNET_NAME --name $SUBNET_NAME --route-table $FWROUTE_TABLE_NAME

Erstellen und Konfigurieren des Dienstprinzipals (Service Principal, SP)

In diesem Schritt müssen Sie den Dienstprinzipal erstellen und dem virtuellen Netzwerk eine Berechtigung zuweisen.

Sehen Sie sich folgendes Beispiel an:

# Create SP and Assign Permission to Virtual Network

az ad sp create-for-rbac -n "bdcaks-sp"

APPID=<your service principal ID >
PASSWORD=< your service principal password >
VNETID=$(az network vnet show -g $RESOURCE_GROUP --name $VNET_NAME --query id -o tsv)

# Assign SP Permission to VNET

az role assignment create --assignee $APPID --scope $VNETID --role "Network Contributor"


RTID=$(az network route-table show -g $RESOURCE_GROUP -n $FWROUTE_TABLE_NAME --query id -o tsv)
az role assignment create --assignee $APPID --scope $RTID --role "Network Contributor"

Erstellen eines AKS-Clusters

Sie können jetzt den AKS-Cluster mit userDefinedRouting als ausgehenden Typ erstellen.

az aks create \
    --resource-group $RESOURCE_GROUP \
    --location $REGION_NAME \
    --name $AKS_NAME \
    --load-balancer-sku standard \
    --outbound-type userDefinedRouting \
    --enable-private-cluster \
    --network-plugin azure \
    --vnet-subnet-id $SUBNET_ID \
    --docker-bridge-address 172.17.0.1/16 \
    --dns-service-ip 10.2.0.10 \
    --service-cidr 10.2.0.0/24 \
    --service-principal $APPID \
    --client-secret $PASSWORD \
    --node-vm-size Standard_D13_v2 \
    --node-count 2 \
    --generate-ssh-keys

Erstellen eines Bereitstellungsprofils für den Big Data-Cluster

Sie können einen Big Data-Cluster mit einem benutzerdefinierten Profil erstellen:

azdata bdc config init --source aks-dev-test --target private-bdc-aks --force

Generieren und Konfigurieren eines benutzerdefinierten BDC-Bereitstellungsprofils

azdata bdc config replace -c private-bdc-aks/control.json -j "$.spec.docker.imageTag=2019-CU6-ubuntu-16.04"
azdata bdc config replace -c private-bdc-aks/control.json -j "$.spec.storage.data.className=default"
azdata bdc config replace -c private-bdc-aks/control.json -j "$.spec.storage.logs.className=default"

azdata bdc config replace -c private-bdc-aks/control.json -j "$.spec.endpoints[0].serviceType=NodePort"
azdata bdc config replace -c private-bdc-aks/control.json -j "$.spec.endpoints[1].serviceType=NodePort"

azdata bdc config replace -c private-bdc-aks/bdc.json -j "$.spec.resources.master.spec.endpoints[0].serviceType=NodePort"
azdata bdc config replace -c private-bdc-aks/bdc.json -j "$.spec.resources.gateway.spec.endpoints[0].serviceType=NodePort"
azdata bdc config replace -c private-bdc-aks/bdc.json -j "$.spec.resources.appproxy.spec.endpoints[0].serviceType=NodePort"

Bereitstellen eines BDC in einem privaten AKS-Cluster

export AZDATA_USERNAME=<your bdcadmin username>
export AZDATA_PASSWORD=< your bdcadmin password>

azdata bdc create --config-profile private-bdc-aks --accept-eula yes

Kann ich Firewalls von Drittanbietern verwenden, um den ausgehenden Datenverkehr einzuschränken?

Sie können Firewalls von Drittanbietern verwenden, um den ausgehenden Datenverkehr mit einem bereitgestellten BDC und einem privaten AKS-Cluster einzuschränken. Um ein Beispiel anzuzeigen, besuchen Sie die Azure Marketplace-Seite zu Firewalls. Firewalls von Drittanbietern können in privaten Bereitstellungslösungen mit kompatibleren Konfigurationen verwendet werden. Die Firewall sollte die folgenden Netzwerkregeln unterstützen:

  • Sehen Sie sich die erforderlichen Netzwerkregeln für ausgehenden Datenverkehr und FQDNs für AKS-Cluster an. Diese URL enthält auch alle HTTP/HTTPS-Endpunkte und Abhängigkeiten von Wildcards. Diese können je nach AKS-Cluster auf Basis einer Anzahl von Qualifizierern sowie Ihren tatsächlichen Anforderungen variieren.
  • Die hier aufgeführten für Azure Global erforderlichen Netzwerkregeln/FQDNs/Anwendungsregeln.
  • Die hier aufgeführten optionalen, empfohlenen FQDNs/Anwendungsregeln für AKS-Cluster.

Sehen Sie sich an, wie Sie einen Big Data-Cluster in einem privaten AKS-Cluster verwalten können. Der nächste Schritt besteht darin, eine Verbindung mit einem Big Data-Cluster herzustellen.

Die Automatisierungsskripts für dieses Szenario finden Sie im Repository für SQL Server-Beispiele auf GitHub.