Limitare il traffico in uscita da SQL Server 2019 dei cluster Big Data nel cluster privato del servizio Azure Kubernetes
Importante
Il componente aggiuntivo per i cluster Big Data di Microsoft SQL Server 2019 verrà ritirato. Il supporto per i cluster Big Data di SQL Server 2019 terminerà il 28 febbraio 2025. Tutti gli utenti esistenti di SQL Server 2019 con Software Assurance saranno completamente supportati nella piattaforma e fino a quel momento il software continuerà a ricevere aggiornamenti cumulativi di SQL Server. Per altre informazioni, vedere il post di blog relativo all'annuncio e Opzioni per i Big Data nella piattaforma Microsoft SQL Server.
È possibile limitare il traffico in uscita dei cluster Big Data con il servizio Azure Kubernetes (AKS). Il servizio effettua il provisioning di uno SKU standard Load Balancer. Questa impostazione viene configurata e usata per l'uscita in modo predefinito. A questo punto, la configurazione predefinita potrebbe non soddisfare tutti gli scenari e i requisiti. Ciò accade, ad esempio, se gli indirizzi IP pubblici non sono consentiti o se sono necessari hop per l'uscita. È possibile definire una tabella di route definita dall'utente se il cluster non consente gli indirizzi IP pubblici e segue un'appliance virtuale di rete.
I cluster del servizio Azure Kubernetes hanno accesso a Internet in uscita senza restrizioni. Ciò a scopo di gestione e operativo. I nodi di lavoro in un cluster del servizio Azure Kubernetes devono essere in grado di accedere a porte e nomi di dominio completo (FQDN). Di seguito sono riportati alcuni esempi:
- il cluster deve eseguire il pull delle immagini del contenitore di sistema di base da Registro Container di Microsoft durante gli aggiornamenti di sicurezza del sistema operativo del nodo di lavoro.
- i nodi di lavoro del servizio Azure Kubernetes abilitati per GPU devono accedere agli endpoint da Nvidia per installare il driver.
- i clienti usano il servizio Azure Kubernetes insieme ai servizi di Azure, come i criteri di Azure per la conformità di livello aziendale, Monitoraggio di Azure (con informazioni dettagliate sul contenitore).
- abilitazione di uno spazio di sviluppo e altri scenari simili.
Nota
Quando si distribuisce un cluster Big Data (BDC) nel cluster privato del servizio Azure Kubernetes, non esistono dipendenze in ingresso, ad eccezione di quelle indicate in questo articolo. È possibile trovare tutte le dipendenze in uscita nel controllo del traffico in uscita per i nodi del cluster nel servizio Azure Kubernetes.
Questo articolo descrive come distribuire i cluster Big Data nel cluster privato del servizio Azure Kubernetes con funzionalità di rete avanzate e route definite dall'utente. L'articolo analizza anche un'ulteriore integrazione dei cluster Big Data con ambienti di rete di livello aziendale.
Limitare il traffico in uscita con il firewall di Azure
Firewall di Azure fornisce un tag FQDN del servizio Azure Kubernetes (AzureKubernetesService)
per semplificare la configurazione.
Per informazioni complete sul tag FQDN, vedere Limitare il traffico in uscita con il firewall di Azure.
L'immagine seguente mostra come il traffico viene limitato in un cluster privato del servizio Azure Kubernetes.
Sviluppare l'architettura di base per un cluster Big Data con Firewall di Azure:
- Creare il gruppo di risorse e VNet
- Creare e configurare il firewall di Azure
- Creare una tabella di route definita dall'utente
- Configurare le regole del firewall
- Creare un'entità servizio (SP)
- Creare un cluster privato AKS
- Creare un profilo di distribuzione BDC
- Distribuire BDC
Creare il gruppo di risorse e VNet
Definire un set di variabili di ambiente per la creazione di risorse.
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
Creare il gruppo di risorse
az group create -n $RESOURCE_GROUP -l $REGION_NAME
Creare la rete virtuale
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)
Creare e configurare il firewall di Azure
Definire un set di variabili di ambiente per la creazione di risorse.
export FWNAME=bdcaksazfw export FWPUBIP=$FWNAME-ip export FWIPCONFIG_NAME=$FWNAME-config az extension add --name azure-firewall
Creare una subnet dedicata per il firewall
Nota
Non è possibile modificare il nome del firewall dopo la creazione
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 effettua il routing automatico del traffico tra subnet di Azure, reti virtuali e reti locali.
Creare una tabella di route definita dall'utente
È possibile creare una tabella di route definita dall'utente con un hop per Firewall di Azure.
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
Impostare le regole del firewall
# 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
È possibile associare una route definita dall'utente a un cluster del servizio Azure Kubernetes in cui è stato distribuito in precedenza un cluster Big Data usando il comando seguente:
az network vnet subnet update -g $RESOURCE_GROUP --vnet-name $VNET_NAME --name $SUBNET_NAME --route-table $FWROUTE_TABLE_NAME
Creare e configurare l'entità servizio
In questo passaggio è necessario creare l'entità servizio e assegnare l'autorizzazione alla rete virtuale.
Vedere l'esempio seguente:
# 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"
Creare un cluster del servizio Azure Kubernetes
Creare quindi il cluster del servizio Azure Kubernetes con userDefinedRouting
come tipo in uscita.
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
Compilare il profilo di distribuzione del cluster Big Data
È possibile creare un cluster Big Data con un profilo personalizzato:
azdata bdc config init --source aks-dev-test --target private-bdc-aks --force
Generare e configurare un profilo di distribuzione di cluster Big Data personalizzato:
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"
Distribuire un cluster Big Data in un cluster privato del servizio Azure Kubernetes
export AZDATA_USERNAME=<your bdcadmin username>
export AZDATA_PASSWORD=< your bdcadmin password>
azdata bdc create --config-profile private-bdc-aks --accept-eula yes
È possibile usare firewall di terze parti per limitare il traffico in uscita?
È possibile usare firewall di terze parti per limitare il traffico in uscita con un cluster Big Data e con un cluster privato del servizio Azure Kubernetes distribuito. Per visualizzare un esempio, vedere Firewall di Azure Marketplace. È possibile usare firewall di terze parti nelle soluzioni di distribuzione privata con configurazioni più conformi. Il firewall deve fornire le seguenti regole di rete:
- Visualizzare tutte le regole di rete in uscita necessarie e tutti i nomi di dominio completo dei cluster del servizio Azure Kubernetes. Questo URL include anche tutti gli endpoint HTTP/HTTPS con caratteri jolly e tutte le dipendenze. Questi possono variare in base al cluster del servizio Azure Kubernetes, in base a un numero di qualificatori e ai requisiti effettivi.
- le regole di rete/l'FQDN/le regole di applicazione richieste da Azure Global sono indicate qui.
- L'FQDN/le regole di applicazione raccomandate facoltative per i cluster AKS sono indicate qui.
Vedere come gestire il cluster Big Data nel cluster privato del servizio Azure Kubernetes. Il passaggio successivo è la connessione al cluster Big Data.
Per questo scenario, vedere gli script di automazione nel repository di esempi SQL Server su GitHub.