Ограничение исходящего трафика из частного кластера SQL Server 2019 Кластеры больших данных в частном кластере Служба Azure Kubernetes (AKS)

Важно!

Поддержка надстройки "Кластеры больших данных" Microsoft SQL Server 2019 будет прекращена. Мы прекратим поддержку Кластеров больших данных SQL Server 2019 28 февраля 2025 г. Все существующие пользователи SQL Server 2019 с Software Assurance будут полностью поддерживаться на платформе, и программное обеспечение будет продолжать поддерживаться с помощью накопительных обновлений SQL Server до этого времени. Дополнительные сведения см. в записи блога объявлений и в статье о параметрах больших данных на платформе Microsoft SQL Server.

Вы можете ограничить исходящий трафик из Кластеров больших данных с помощью Службы Azure Kubernetes (AKS). Служба подготавливает Load Balancer с SKU уровня "Стандартный". Он настраивается и используется для исходящего трафика по умолчанию. Теперь настройка по умолчанию может не соответствовать всем сценариям и требованиям. Например, для случая, когда общедоступные IP-адреса запрещены или для исходящего трафика требуются дополнительные прыжки. Вы можете задать определяемую пользователем таблицу маршрутов (UDR), если кластер запрещает использовать общедоступные IP-адреса и находится за сетевым виртуальным модулем (NVA).

Кластеры AKS имеют доступ к Интернету с неограниченным исходящим трафиком. Это необходимо для решения задач управления и рабочих задач. Рабочим узлам в кластере AKS нужен доступ к определенным портам и полным доменным именам (FQDN). Примеры таких ситуаций приведены ниже:

  • Когда кластеру необходимо извлечь образы контейнеров базовой системы из Реестра контейнеров Майкрософт (MCR) для обновления системы безопасности операционной системы рабочего узла.
  • Когда рабочим узлам AKS с поддержкой GPU необходимо получить доступ к конечным точкам из Nvidia для установки драйвера.
  • Когда клиенты используют AKS для работы в сочетании со службами Azure, такими как политика Azure для обеспечения соответствия корпоративного уровня, мониторинг Azure (с аналитикой для контейнеров).
  • Когда включено пространство разработки, а также в других аналогичных сценариях.

Примечание.

При развертывании кластера больших данных (BDC) в частном кластере Службы Azure Kubernetes (AKS) нет входящих зависимостей, за исключением тех, которые упоминаются в этой статье. Все исходящие зависимости указаны в статье Контроль исходящего трафика для кластеров узлов в Службе Azure Kubernetes (AKS).

В этой статье описывается, как развернуть кластеры больших данных в частном кластере AKS с расширенной сетью и определяемой пользователем таблицей маршрутов (UDR). В нем также рассматривается дальнейшая интеграция кластера больших данных с сетевыми средами корпоративного уровня.

Ограничение исходящего трафика с помощью брандмауэра Azure

В Брандмауэре Azure для упрощения этой конфигурации доступен тег FQDN (AzureKubernetesService) Службы Azure Kubernetes.

Полные сведения о теге FQDN см. в разделе Ограничение исходящего трафика с помощью брандмауэра Azure.

На следующем рисунке показано ограничение трафика в частном кластере AKS.

Screenshot that shows AKS private cluster firewall egress traffic.

Разработка базовой архитектуры для Кластера больших данных с помощью Брандмауэра Azure:

  1. Создайте группу ресурсов и виртуальную сеть.
  2. Создайте и настройте брандмауэр Azure.
  3. Создание определяемой пользователем таблицы маршрутизации
  4. Настройка правил брандмауэра
  5. Создайте субъект-службу (SP).
  6. Создайте частный кластер AKS
  7. Создайте профиль развертывания BDC
  8. Разверните BDC.

Создание группы ресурсов и виртуальной сети

  1. Определите набор переменных среды для создания ресурсов.

    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. Создание группы ресурсов

    az group create -n $RESOURCE_GROUP -l $REGION_NAME
    
  3. Создайте виртуальную сеть.

    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)
    

Создание и настройка Брандмауэра Azure

  1. Определите набор переменных среды для создания ресурсов.

    export FWNAME=bdcaksazfw
    export FWPUBIP=$FWNAME-ip
    export FWIPCONFIG_NAME=$FWNAME-config
    
    az extension add --name azure-firewall
    
  2. Создайте выделенную подсеть для брандмауэра.

    Примечание.

    После создания имя брандмауэра невозможно изменить.

    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 автоматически направляет трафик между подсетями Azure, виртуальными и локальными сетями.

Создание определяемой пользователем таблицы маршрутов

Вы можете создать таблицу UDR с прыжком на Брандмауэр 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

Настройка правил брандмауэра

# 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

Таблицу UDR можно связать с кластером AKS, на котором ранее был развернут кластер больших данных, выполнив следующую команду:

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

Создание и настройка субъекта-службы (SP)

На этом шаге необходимо создать субъект-службу и назначить разрешение для виртуальной сети.

См. следующий пример.

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

Создание кластера AKS

Теперь можно создать кластер AKS с типом исходящего трафика userDefinedRouting.

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

Создание профиля развертывания для Кластера больших данных

Кластер больших данных можно создать с помощью пользовательского профиля:

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

Создание и настройка пользовательского профиля развертывания BDC

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"

Развертывание кластера больших данных в частном кластере AKS

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

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

Можно ли использовать сторонние брандмауэры для ограничения исходящего трафика?

Вы можете использовать сторонние брандмауэры для ограничения исходящего трафика с развернутым кластером больших данных и частным кластером AKS. Пример см. в разделе Брандмауэры Azure Marketplace. Сторонние брандмауэры можно использовать в частных решениях развертывания с более соответствующими конфигурациями. Брандмауэр должен предоставить следующие правила сети:

  • Просмотр всех обязательных правил исходящего трафика в сети и полных доменных имен для кластеров AKS. Этот URL-адрес также включает все конечные точки и зависимости HTTP/HTTPS с подстановочными знаками. Они могут различаться для кластеров AKS в зависимости от числа квалификаторов и фактических требований.
  • Глобальные обязательные правила сети Azure / полное доменное имя / правила приложения, указанные здесь.
  • Дополнительное рекомендуемое полное доменное имя / правила приложения для кластеров AKS, указанные здесь.

См. раздел Управление кластером больших данных в частном кластере AKS, а затем выполните следующие действия, чтобы подключиться к кластеру больших данных.

Сведения о скриптах автоматизации для этого сценария см. на странице репозитория примеров SQL Server на сайте GitHub.