Compartilhar via


Restringir o tráfego de saída dos Clusters de Big Data do SQL Server 2019 no cluster privado do Serviço de Kubernetes do Azure (AKS)

Importante

O complemento Clusters de Big Data do Microsoft SQL Server 2019 será desativado. O suporte para Clusters de Big Data do SQL Server 2019 será encerrado em 28 de fevereiro de 2025. Todos os usuários existentes do SQL Server 2019 com Software Assurance terão suporte total na plataforma e o software continuará a ser mantido por meio de atualizações cumulativas do SQL Server até esse momento. Para obter mais informações, confira a postagem no blog de anúncio e as opções de Big Data na plataforma do Microsoft SQL Server.

Você pode restringir o tráfego de saída dos Clusters de Big Data com o AKS (Serviço de Kubernetes do Azure). O serviço provisiona um Load Balancer de SKU padrão. Isso é configurado e usado para saída por padrão. Agora, a configuração padrão pode não atender a todos os cenários e requisitos. Por exemplo, se os IPs públicos não forem permitidos ou forem necessários saltos adicionais para saída. Você pode definir uma tabela de UDR (rotas definida pelo usuário) se o cluster não permite IPs públicos e fica atrás de uma NVA (solução de virtualização de rede).

Os clusters do AKS têm acesso irrestrito de internet de saída. Isso é para fins operacionais e de gerenciamento. Os nós de trabalho em um cluster do AKS precisam acessar determinadas portas e FQDNs (nomes de domínio totalmente qualificados). Estes são exemplos disso:

  • Quando o cluster precisa extrair imagens de contêiner do sistema base do MCR (Registro de Contêiner da Microsoft) durante as atualizações de segurança do sistema operacional do nó de trabalho.
  • Quando os nós de trabalho do AKS habilitados para GPU precisam acessar os pontos de extremidade do NVIDIA para instalar um driver.
  • Quando os clientes usam o trabalho do AKS em conjunto com os serviços do Azure, como a política do Azure para conformidade de nível corporativo, Monitoramento do Azure (com insights de contêiner).
  • Quando um Espaço de Desenvolvimento é habilitado, assim como outros cenários semelhantes.

Observação

Quando você implanta um BDC (cluster de Big Data) no cluster privado do AKS (Serviço de Kubernetes do Azure), não há dependências de entrada, exceto aquelas mencionadas neste artigo. Você pode encontrar todas as dependências de saída no tráfego de saída de controle para nós de cluster no AKS (Serviço de Kubernetes do Azure).

Este artigo descreve como implantar BDCs no cluster privado do AKS com rede avançada e UDR. Ele também explora a integração do BDC com ambientes de rede de nível empresarial.

Como restringir o tráfego de saída com o firewall do Azure

O Firewall do Azure fornece uma marca FQDN (AzureKubernetesService) do Serviço de Kubernetes do Azure para simplificar essa configuração.

Para obter informações completas sobre a marca FQDN, acesse Restringir o tráfego de saída usando o firewall do Azure.

A imagem a seguir mostra como o tráfego é restrito em um cluster privado do AKS.

Screenshot that shows AKS private cluster firewall egress traffic.

Desenvolva a arquitetura básica para um cluster de Big Data com o Firewall do Azure:

  1. Criar o grupo de recursos e a VNet
  2. Criar e configurar o Firewall do Azure
  3. Criar a tabela de rotas definidas pelo usuário
  4. Configurar regras de firewall
  5. Criar uma SP (entidade de serviço)
  6. Criar um cluster privado do AKS
  7. Criar um perfil de implantação do BDC
  8. Implantar o BDC

Crie o grupo de recursos e a VNet

  1. Defina um conjunto de variáveis de ambiente para criar recursos.

    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. Criar o grupo de recursos

    az group create -n $RESOURCE_GROUP -l $REGION_NAME
    
  3. Criar a VNet

    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)
    

Criar e configurar o Firewall do Azure

  1. Defina um conjunto de variáveis de ambiente para criar recursos.

    export FWNAME=bdcaksazfw
    export FWPUBIP=$FWNAME-ip
    export FWIPCONFIG_NAME=$FWNAME-config
    
    az extension add --name azure-firewall
    
  2. Criar uma sub-rede dedicada para o firewall

    Observação

    Você não pode alterar o nome do firewall após a criação

    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
    

O Azure roteia o tráfego automaticamente entre redes virtuais, redes locais e sub-redes do Azure.

Como criar uma tabela de rotas definidas pelo usuário

Você pode criar uma tabela UDR com um salto para o Firewall do 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

Como definir regras de 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

Você pode associar uma UDR a um cluster do AKS em que implantou anteriormente um BDC, usando o seguinte comando:

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

Criar e configurar a SP (entidade de serviço)

Nesta etapa, você precisa criar a entidade de serviço e atribuir permissão à rede virtual.

Consulte o seguinte exemplo:

# 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"

Criar um cluster do AKS

Agora você pode criar o cluster do AKS com userDefinedRouting como o tipo de saída.

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

Criar um perfil de implantação do Cluster de Big Data

Você pode criar um cluster de Big Data com um perfil personalizado:

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

Gerar e configurar um perfil de implantação do BDC personalizado

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"

Implantar um BDC no cluster privado do AKS

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

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

Posso usar firewalls de terceiros para restringir o tráfego de saída?

Você pode usar firewalls de terceiros para restringir o tráfego de saída com um cluster privado BDC e AKS implantado. Para exibir um exemplo, visite Firewalls do Azure Marketplace. Firewalls de terceiros podem ser usados em soluções de implantação privada com configurações mais em conformidade. O firewall deve fornecer as seguintes regras de rede:

  • Veja todas as regras de rede de saída e FQDNs necessários para clusters do AKS. Essa URL também inclui todos os pontos de extremidade HTTP/HTTPS curinga e dependências. Eles podem variar com o seu cluster AKS, com base em um número de qualificadores, e os seus requisitos reais.
  • Regras de rede necessárias globais do Azure/FQDN/regras de aplicativo mencionadas aqui.
  • FQDN recomendado opcional/regras de aplicativo para clusters do AKS mencionados aqui.

Verifique como gerenciar um cluster de Big Data no cluster privado do AKS e, então, a próxima etapa será conectar-se ao cluster de Big Data.

Confira os scripts de automação para este cenário no repositório de exemplos do SQL Server no GitHub.