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.
Entwickeln Sie die grundlegende Architektur für einen Big Data-Cluster mit Azure Firewall:
- Erstellen der Ressourcengruppe und des VNets
- Erstellen und Einrichten von Azure Firewall
- Erstellen einer benutzerdefinierten Routingtabelle
- Einrichten von Firewallregeln
- Erstellen des Dienstprinzipals (Service Principal, SP)
- Erstellen des privaten AKS-Clusters
- Erstellen eines BDC-Bereitstellungsprofils
- Bereitstellen von BDC
Erstellen der Ressourcengruppe und des VNets
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
Ressourcengruppe erstellen
az group create -n $RESOURCE_GROUP -l $REGION_NAME
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
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
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.