AKS(Azure Kubernetes Service) 프라이빗 클러스터에서 SQL Server 2019 빅 데이터 클러스터의 송신 트래픽 제한

Important

Microsoft SQL Server 2019 빅 데이터 클러스터 추가 기능이 사용 중지됩니다. SQL Server 2019 빅 데이터 클러스터에 대한 지원은 2025년 2월 28일에 종료됩니다. Software Assurance를 사용하는 SQL Server 2019의 모든 기존 사용자는 플랫폼에서 완전히 지원되며, 소프트웨어는 지원 종료 시점까지 SQL Server 누적 업데이트를 통해 계속 유지 관리됩니다. 자세한 내용은 공지 블로그 게시물Microsoft SQL Server 플랫폼의 빅 데이터 옵션을 참조하세요.

AKS(Azure Kubernetes Service)를 사용하여 빅 데이터 클러스터의 송신 트래픽을 제한할 수 있습니다. 이 서비스는 표준 SKU Load Balancer를 프로비저닝합니다. 이 서비스는 기본적으로 송신용으로 설정되고 사용됩니다. 현재로서는 기본 설정으로 모든 시나리오 및 요구 사항을 충족하지 못할 수도 있습니다. 예를 들어 공용 IP가 허용되지 않거나 송신을 위해 추가 이 필요할 수 있습니다. 클러스터가 공용 IP를 허용하지 않고 NVA(네트워크 가상 어플라이언스) 뒤에 있는 경우 UDR(사용자 정의 라우팅) 테이블을 정의할 수 있습니다.

AKS 클러스터에는 무제한 아웃바운드(송신) 인터넷 액세스가 있습니다. 이는 관리 및 운영 목적으로 사용됩니다. AKS 클러스터의 작업자 노드는 특정 포트 및 FQDN(정규화된 도메인 이름)에 액세스해야 합니다. 예제는 다음과 같습니다.

  • 작업자 노드 OS 보안 업데이트 동안 클러스터가 MCR(Microsoft Container Registry)에서 기본 시스템 컨테이너 이미지를 가져와야 하는 경우
  • GPU 지원 AKS 작업자 노드가 드라이버를 설치하기 위해 Nvidia의 엔드포인트에 액세스해야 하는 경우
  • 고객이 엔터프라이즈급 규정 준수를 위한 Azure 정책, Azure 모니터링(컨테이너 인사이트 사용)과 같은 Azure 서비스와 연동하여 AKS를 사용하는 경우
  • 개발 공간을 사용하는 경우 및 기타 유사한 시나리오.

참고 항목

AKS(Azure Kubernetes Service) 프라이빗 클러스터에서 BDC(빅 데이터 클러스터)를 배포하는 경우 이 문서에서 언급한 것 외에는 인바운드 종속성이 없습니다. AKS(Azure Kubernetes Service)의 클러스터 노드에 대한 제어 송신 트래픽에서 모든 아웃바운드 종속성을 찾을 수 있습니다.

이 문서에서는 고급 네트워킹 및 UDR을 사용하여 AKS 프라이빗 클러스터에 BDC를 배포하는 방법을 설명합니다. 또한 엔터프라이즈급 네트워킹 환경과 BDC의 추가 통합에 대해서도 알아봅니다.

Azure Firewall을 사용하여 송신 트래픽을 제한하는 방법

Azure Firewall은 구성을 단순화하기 위해 Azure Kubernetes Service (AzureKubernetesService) FQDN 태그를 제공합니다.

FQDN 태그에 대한 자세한 내용은 Azure Firewall을 사용하여 송신 트래픽 제한을 참조하세요.

다음 이미지는 AKS 프라이빗 클러스터에서 트래픽을 제한하는 방법을 보여줍니다.

Screenshot that shows AKS private cluster firewall egress traffic.

Azure Firewall을 사용하여 빅 데이터 클러스터에 대한 기본 아키텍처를 개발합니다.

  1. 리소스 그룹 및 VNet 만들기
  2. Azure Firewall 만들기 및 설정
  3. 사용자 정의 경로 테이블 만들기
  4. 방화벽 규칙 설정
  5. SP(서비스 주체) 만들기
  6. AKS 프라이빗 클러스터 만들기
  7. BDC 배포 프로필 만들기
  8. BDC 배포

리소스 그룹 및 VNet 만들기

  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. 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)
    

Azure Firewall 만들기 및 설정

  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 서브넷, 가상 네트워크 및 온-프레미스 네트워크 간에 트래픽을 자동으로 라우트합니다.

사용자 정의 경로 테이블을 만드는 방법

홉을 사용하여 Azure Firewall에 대한 UDR 테이블을 만들 수 있습니다.


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

다음 명령을 사용하여 이전에 BDC를 배포한 AKS 클러스터와 UDR을 연결할 수 있습니다.

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 클러스터 만들기

아웃바운드 형식으로 userDefinedRouting을 사용하여 AKS 클러스터를 만들 수 있습니다.

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 프라이빗 클러스터에 BDC 배포

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

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

타사 방화벽을 사용하여 송신 트래픽을 제한할 수 있나요?

타사 방화벽을 사용하여 배포된 BDC 및 AKS 프라이빗 클러스터로 송신 트래픽을 제한할 수 있습니다. 예제를 보려면 Azure Marketplace 방화벽을 방문하세요. 타사 방화벽은 규정 준수 구성이 더 많은 프라이빗 배포 솔루션에서 사용할 수 있습니다. 방화벽은 다음과 같은 네트워크 규칙을 제공해야 합니다.

  • 필요한 모든 AKS 클러스터에 필요한 아웃바운드 네트워크 규칙 및 FQDN을 확인합니다. 이 URL에는 모든 와일드카드 HTTP/HTTPS 엔드포인트 및 종속성도 포함됩니다. 이러한 항목은 다양한 한정자 및 실제 요구 사항을 기준으로 AKS에 따라 달라질 수 있습니다.
  • Azure 전역 필수 네트워크 규칙/FQDN/애플리케이션 규칙은 여기에 언급되어 있습니다.
  • AKS 클러스터용 권장 FQDN/애플리케이션 규칙(선택 사항)은 여기에 언급되어 있습니다.

AKS 프라이빗 클러스터에서 빅 데이터 클러스터를 관리하는 방법을 확인하세요. 다음 단계는 빅 데이터 클러스터에 연결하는 것입니다.

GitHub의 SQL Server 샘플 리포지토리에서 이 시나리오에 대한 자동화 스크립트를 참조하세요.