Azure CLI를 사용하여 방화벽을 통해 아웃바운드 트래픽 제한

참고 항목

2025년 1월 31일에 Azure HDInsight on AKS가 사용 중지됩니다. 2025년 1월 31일 이전에 워크로드가 갑자기 종료되지 않도록 워크로드를 Microsoft Fabric 또는 동등한 Azure 제품으로 마이그레이션해야 합니다. 구독의 나머지 클러스터는 호스트에서 중지되고 제거됩니다.

Important

이 기능은 현지 미리 보기로 제공됩니다. Microsoft Azure 미리 보기에 대한 보충 사용 약관에는 베타 또는 미리 보기로 제공되거나 아직 일반 공급으로 릴리스되지 않은 Azure 기능에 적용되는 더 많은 약관이 포함되어 있습니다. 이 특정 미리 보기에 대한 자세한 내용은 Azure HDInsight on AKS 미리 보기 정보를 참조하세요. 질문이나 기능 제안이 있는 경우 세부 정보와 함께 AskHDInsight에 요청을 제출하고 Azure HDInsight 커뮤니티에서 추가 업데이트를 보려면 팔로우하세요.

한 기업에서 클러스터 배포에 자체 가상 네트워크를 사용하려는 경우 가상 네트워크 트래픽 보호가 중요해집니다. 이 문서에서는 Azure CLI를 사용하여 Azure Firewall을 통해 AKS 클러스터의 HDInsight에서 아웃바운드 트래픽을 보호하는 단계에 대해 설명합니다.

다음 다이어그램은 이 문서에서 엔터프라이즈 시나리오를 시뮬레이션하는 데 사용된 예제를 보여 줍니다.

네트워크 흐름을 보여 주는 다이어그램.

이 문서에 설명된 예제에서는 Azure Could Shell을 사용하고 있습니다.

변수를 정의합니다.

이 변수 값을 설정하려면 Azure 클라우드 셸에서 복사하여 실행하세요.

PREFIX="hdiaks-egress"
RG="${PREFIX}-rg"
LOC="eastus"
HDIAKS_CLUSTER_POOL=${PREFIX}
VNET_NAME="${PREFIX}-vnet"
HDIAKS_SUBNET_NAME="${PREFIX}-subnet"
# DO NOT CHANGE FWSUBNET_NAME - This is currently a requirement for Azure Firewall.
FWSUBNET_NAME="AzureFirewallSubnet"
FWNAME="${PREFIX}-fw"
FWPUBLICIP_NAME="${PREFIX}-fwpublicip"
FWIPCONFIG_NAME="${PREFIX}-fwconfig"
FWROUTE_NAME="${PREFIX}-fwrn"
FWROUTE_NAME_INTERNET="${PREFIX}-fwinternet"

Cloud Shell 변수를 보여 주는 다이어그램.

가상 네트워크 및 서브넷 만들기

  1. az group create 명령을 사용하여 {b>리소스 그룹

    az group create --name $RG --location $LOC
    
  2. 가상 네트워크 하나와 서브넷 두 개를 만듭니다.

    1. HDInsight on AKS 클러스터 풀을 위한 서브넷이 있는 가상 네트워크

       az network vnet create \
            --resource-group $RG \
            --name $VNET_NAME \
            --location $LOC \
            --address-prefixes 10.0.0.0/8 \
            --subnet-name $HDIAKS_SUBNET_NAME \
            --subnet-prefix 10.1.0.0/16
      
    2. Azure Firewall용 서브넷.

      az network vnet subnet create \
         --resource-group $RG \
         --vnet-name $VNET_NAME \
         --name $FWSUBNET_NAME \
         --address-prefix 10.2.0.0/16
      

      Important

      1. 서브넷 HDIAKS_SUBNET_NAME에 NSG를 추가하는 경우 특정 아웃바운드 및 인바운드 규칙을 수동으로 추가해야 합니다. NSG를 사용하여 트래픽 제한의 지침을 따르세요.
      2. 기본적으로 경로 테이블은 서브넷과 연결되지 않습니다. 필요한 경우 사용자는 경로 테이블을 만들고 이를 클러스터 풀과 연결해야 합니다.

Azure Portal을 사용하여 HDInsight on AKS 클러스터 풀 만들기

  1. 클러스터 풀을 만듭니다.

    클러스터 풀 기본 탭을 보여 주는 다이어그램

    보안 탭을 보여 주는 다이어그램

  2. 경로 테이블을 생성합니다.

    경로 테이블을 만들고 이를 클러스터 풀과 연결합니다. 자세한 내용은 경로 테이블 만들기를 참조하세요.

클러스터 풀 뒤에서 생성된 AKS 클러스터 세부 정보 가져오기

다음 단계에 따라 AKS 클러스터 정보를 가져옵니다. 이 정보는 후속 단계에서 유용합니다.

AKS_MANAGED_RG=$(az network vnet subnet show --name $HDIAKS_SUBNET_NAME --vnet-name $VNET_NAME --resource-group $RG --query routeTable.resourceGroup -o tsv)

AKS_ID=$(az group show --name $AKS_MANAGED_RG --query managedBy -o tsv)

HDIAKS_MANAGED_RG=$(az resource show --ids $AKS_ID --query "resourceGroup" -o tsv)

API_SERVER=$(az aks show --name $HDIAKS_CLUSTER_POOL --resource-group $HDIAKS_MANAGED_RG --query fqdn -o tsv)

방화벽 만들기

  1. 표준 SKU 공용 IP 주소 만들기 이 리소스는 Azure Firewall 프런트 엔드 주소로 사용됩니다.

    az network public-ip create -g $RG -n $FWPUBLICIP_NAME -l $LOC --sku "Standard"
    
  2. Azure 방화벽 미리 보기 CLI 확장을 등록하여 Azure 방화벽을 만듭니다.

       az extension add --name azure-firewall
    
  3. Azure 방화벽을 만들고 DNS 프록시를 사용하도록 설정합니다.

       az network firewall create -g $RG -n $FWNAME -l $LOC --enable-dns-proxy true
    
  4. Azure 방화벽 IP 구성을 만듭니다.

    az network firewall ip-config create -g $RG -f $FWNAME -n $FWIPCONFIG_NAME --public-ip-address $FWPUBLICIP_NAME --vnet-name $VNET_NAME
    
  5. IP 구성 명령이 성공하면 나중에 구성할 수 있도록 방화벽 프런트 엔드 IP 주소를 저장합니다.

    FWPUBLIC_IP=$(az network public-ip show -g $RG -n $FWPUBLICIP_NAME --query "ipAddress" -o tsv)
    FWPRIVATE_IP=$(az network firewall show -g $RG -n $FWNAME --query "ipConfigurations[0].privateIPAddress" -o tsv)
    

방화벽에 네트워크 및 애플리케이션 규칙 추가

  1. 네트워크 규칙을 만듭니다.

    az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apiudp' --protocols 'UDP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 1194 --action allow --priority 100
    
    az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apitcp' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureCloud.$LOC" --destination-ports 9000
    
    az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'apiserver' --protocols 'TCP' --source-addresses '*' --destination-fqdns "$API_SERVER" --destination-ports 443
    
    #Add below step, in case you are integrating log analytics workspace
    
    az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'azuremonitor' --protocols 'TCP' --source-addresses '*' --destination-addresses "AzureMonitor" --destination-ports 443
    
  2. 애플리케이션 규칙을 만듭니다.

    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'aks-fqdn' --source-addresses '*' --protocols 'http=80' 'https=443' --fqdn-tags "AzureKubernetesService" --action allow --priority 100 
    
    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'acr' --source-addresses '*' --protocols 'https=443' --target-fqdns "hiloprodrpacr00.azurecr.io"
    
    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'blob' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.blob.core.windows.net"
    
    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'servicebus' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.servicebus.windows.net"
    
    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'gsm' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.table.core.windows.net"
    
    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'gcsmonitoring' --source-addresses '*' --protocols 'https=443' --target-fqdns "gcs.prod.monitoring.core.windows.net"
    
    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'graph' --source-addresses '*' --protocols 'https=443' --target-fqdns "graph.microsoft.com"
    

트래픽을 방화벽으로 리디렉션하는 경로 테이블에 경로 만들기

HDInsight on AKS 클러스터 풀에 연결할 경로 테이블을 만듭니다. 자세한 내용은 경로 테이블 만들기 명령을 참조하세요.

클러스터 만들기

이전 단계에서는 네트워크 트래픽을 방화벽으로 라우팅했습니다.

다음 단계에서는 각 클러스터 유형에 필요한 특정 네트워크 및 애플리케이션 규칙에 대한 세부 정보를 제공합니다. 필요에 따라 Apache Flink, TrinoApache Spark 클러스터를 만들기 위한 클러스터 만들기 페이지를 참조할 수 있습니다.

Important

클러스터를 만들기 전에 트래픽을 허용하기 위해 다음 클러스터 관련 규칙을 실행해야 합니다.

Trino

  1. Trino 클러스터에 대해 다음 네트워크 및 애플리케이션 규칙을 추가합니다.

     az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'dfs' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.dfs.core.windows.net"
    
     az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'mysql' --source-addresses '*' --protocols 'mssql=1433' --target-fqdns "*.database.windows.net"  
    

    다음 구문의 Sql.<Region>을 요구 사항에 따라 해당 지역에 맞게 변경합니다. 예: Sql.EastUS

     az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'mysql' --protocols 'TCP' --source-addresses '*' --destination-addresses Sql.<Region> --destination-ports "11000-11999"
    
  1. Apache Flink 클러스터에 다음 애플리케이션 규칙을 추가합니다.

    az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'dfs' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.dfs.core.windows.net"
    

Apache Spark

  1. Spark 클러스터에 대해 다음 네트워크 및 애플리케이션 규칙을 추가합니다.

    다음 구문의 Storage.<Region>을 요구 사항에 따라 해당 지역으로 변경합니다. 예: Storage.EastUS

     az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'smb' --protocols 'TCP' --source-addresses '*' --destination-addresses "Storage.<Region>" --destination-ports 445
    
     az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'dfs' --source-addresses '*' --protocols 'https=443' --target-fqdns "*.dfs.core.windows.net"
    

    다음 구문의 Sql.<Region>을 요구 사항에 따라 해당 지역으로 변경합니다. 예: Sql.EastUS

     az network firewall network-rule create -g $RG -f $FWNAME --collection-name 'aksfwnr' -n 'mysql' --protocols 'TCP' --source-addresses '*' --destination-addresses "Sql.<Region>" --destination-ports '11000-11999'
    
     az network firewall application-rule create -g $RG -f $FWNAME --collection-name 'aksfwar' -n 'mysql' --source-addresses '*' --protocols 'mssql=1433' --target-fqdns "*.database.windows.net"
    

대칭 라우팅 문제 해결

다음 단계를 수행하면 클러스터 부하 분산 장치 수신 서비스를 통해 클러스터를 요청하고 네트워크 응답 트래픽이 방화벽으로 흐르지 않도록 할 수 있습니다. 클라이언트 IP에 대한 응답 트래픽을 인터넷으로 리디렉션하는 경로를 경로 테이블에 추가하여 클러스터에 직접 연결할 수 있습니다.

az network route-table route create -g $AKS_MANAGED_RG --name clientip --route-table-name $ROUTE_TABLE_NAME --address-prefix {Client_IPs} --next-hop-type Internet

NSG를 구성한 후에도 클러스터에 연결할 수 없는 경우 NSG를 사용하여 트래픽을 제한하여 트래픽을 허용합니다.

더 많은 트래픽을 허용하려면 방화벽을 통과하도록 구성할 수 있습니다.

디버그하는 방법

클러스터가 예기치 않게 작동하는 경우 방화벽 로그를 확인하여 차단된 트래픽을 찾을 수 있습니다.