Share via


Azure HDInsight에서 공용 연결 제한

Azure HDInsight의 기본 가상 네트워크 아키텍처에서 HDInsight 리소스 공급자는 공용 네트워크를 통해 클러스터와 통신합니다. 이 문서에서는 인바운드 연결이 개인 네트워크로 제한되는 제한된 HDInsight 클러스터를 만드는 데 사용할 수 있는 고급 컨트롤에 대해 알아봅니다.

HDInsight 클러스터와 종속 리소스 간의 공용 연결을 원하는 경우 Azure HDInsight에서 네트워크 트래픽 제어의 지침에 따라 클러스터 연결을 제한하는 것이 좋습니다. 공용 연결을 제한하는 것 외에도 HDInsight 클러스터와 함께 사용할 Azure Private Link 지원 종속성 리소스를 구성할 수 있습니다.

다음 다이어그램에서는 resourceProviderConnection아웃바운드로 설정된 경우 HDInsight 가상 네트워크 아키텍처가 어떤 형태가 될 수 있는지를 보여 줍니다.

Diagram of the HDInsight architecture using an outbound resource provider connection.

참고 항목

퍼블릭 연결을 제한하는 것은 Private Link를 사용하도록 설정하기 위한 필수 조건이며 동일한 기능으로 간주되어서는 안 됩니다.

제한된 클러스터 초기화

기본적으로 HDInsight 리소스 공급자는 공용 IP 주소를 사용하여 클러스터에 대한 인바운드 연결을 사용합니다. resourceProviderConnection 네트워크 속성이 outbound로 설정되면 연결이 항상 클러스터 내부에서 시작되어 리소스 공급자로 나가도록 HDInsight 리소스 공급자에 대한 연결을 반대로 설정합니다.

이 구성에서는 인바운드 연결이 없으면 네트워크 보안 그룹에서 인바운드 서비스 태그를 구성할 필요가 없습니다. 또한 사용자 정의 경로를 통해 방화벽이나 네트워크 가상 어플라이언스를 바이패스할 필요가 없습니다.

참고 항목

Microsoft Azure Government 구현에는 네트워크 보안 그룹 및 사용자 정의 경로의 인바운드 서비스 태그가 여전히 필요할 수 있습니다.

클러스터를 만든 후 제한된 HDInsight 클러스터에 필요한 DNS 레코드를 추가하여 적절한 DNS 확인을 설정합니다. Azure 관리 공용 DNS 영역 azurehdinsight.net에 CNAME(정식 이름) DNS 레코드가 만들어집니다.

<clustername>    CNAME    <clustername>-int

FQDN(정규화된 도메인 이름)을 사용하여 클러스터에 액세스하려면 필요에 따라 다음 기술 중 하나를 사용할 수 있습니다.

  • 내부 부하 분산 장치의 개인 IP 주소를 직접 사용합니다.
  • 자체 프라이빗 DNS 영역을 사용하여 클러스터 엔드포인트를 재정의합니다. 이 경우 영역 이름은 azurehdinsight.net이어야 합니다.

예를 들어 프라이빗 DNS 영역 azurehdinsight.net의 경우 필요에 따라 개인 IP 주소를 추가할 수 있습니다.

<clustername>        A   10.0.0.1
<clustername-ssh>    A   10.0.0.2

참고 항목

제한된 클러스터를 공용 연결이 사용하도록 설정된 다른 클러스터와 동일한 가상 네트워크(azurehdinsight.net에 대한 프라이빗 DNS 영역 포함)에 두지 않는 것이 좋습니다. 의도하지 않은 DNS 확인 동작이나 충돌이 발생할 수 있습니다.

DNS 설정을 더 쉽게 하기 위해 FQDN 및 해당 개인 IP 주소를 클러스터 GET 응답의 일부로 반환합니다. 이 PowerShell 코드 조각을 사용하여 시작할 수 있습니다.

<#
    This script is an example to help you get started with automation and can be adjusted based on your needs.
    This script assumes:
    - The HDInsight cluster has already been created, and the context where this script is run has permissions to read/write resources in the same resource group.
    - The private DNS zone resource exists in the same subscription as the HDInsight cluster.
We recommend that you use the latest version of the Az.HDInsight module.

#>
$subscriptionId = "<Replace with subscription for deploying HDInsight clusters, and containing private DNS zone resource>"

$clusterName = "<Replace with cluster name>"
$clusterResourceGroupName = "<Replace with resource group name>"

# For example, azurehdinsight.net for public cloud.
$dnsZoneName = "<Replace with private DNS zone name>"
$dnsZoneResourceGroupName = "<Replace with private DNS zone resource group name>"

Connect-AzAccount -SubscriptionId $subscriptionId

# 1. Get cluster endpoints
$clusterEndpoints = $(Get-AzHDInsightCluster -ClusterName $clusterName ` -ResourceGroupName $clusterResourceGroupName).ConnectivityEndpoints

$endpointMapping = @{}

foreach($endpoint in $clusterEndpoints)
{
    $label = $endpoint.Location.ToLower().Replace(".$dnsZoneName".ToLower(), "")
    $ip = $endpoint.PrivateIPAddress

    $endpointMapping.Add($label, $ip)
}

# 2. Confirm that the DNS zone exists.
Get-AzPrivateDnsZone -ResourceGroupName $dnsZoneResourceGroupName -Name $dnsZoneName -ErrorAction Stop

# 3. Update DNS entries for the cluster in the private DNS zone:
#    - If the entries already exist, update to the new IP.
#    - If the entries don't exist, create them.
$recordSets = Get-AzPrivateDnsRecordSet -ZoneName $dnsZoneName -ResourceGroupName $dnsZoneResourceGroupName -RecordType A

foreach($label in $endpointMapping.Keys)
{
    $updateRecord = $null

    foreach($record in $recordSets)
    {
        if($record.Name -eq $label)
        {
            $updateRecord = $record
            break;
        }
        
    }

    if($null -ne $updateRecord)
    {
        $updateRecord.Records[0].Ipv4Address = $endpointMapping[$label]
        Set-AzPrivateDnsRecordSet -RecordSet $updateRecord | Out-Null
    }
    else
    {
        New-AzPrivateDnsRecordSet `
            -ResourceGroupName $dnsZoneResourceGroupName `
            -ZoneName $dnsZoneName `
            -Name $label `
            -RecordType A `
            -Ttl 3600 `
            -PrivateDnsRecord (New-AzPrivateDnsRecordConfig -Ipv4Address $endpointMapping[$label]) | Out-Null
    }
}

resourceProviderConnection아웃바운드로 구성하면 프라이빗 엔드포인트를 사용하여 클러스터별 리소스에 액세스할 수도 있습니다. 해당 리소스는 다음과 같습니다.

  • 스토리지: Azure Data Lake Storage Gen2 및 Azure Blob Storage
  • SQL 메타스토어: Apache Ranger, Ambari, Oozie 및 Hive
  • Azure Key Vault

이러한 리소스에 대해 프라이빗 엔드포인트를 반드시 사용해야 하는 것은 아닙니다. 그러나 이러한 리소스에 대해 프라이빗 엔드포인트를 사용하려는 경우 HDInsight 클러스터를 만들기 전에 리소스를 만들고 프라이빗 엔드포인트 및 DNS 항목을 구성해야 합니다. 이러한 모든 리소스는 프라이빗 엔드포인트 또는 기타 방법을 통해 클러스터 서브넷 내부에서 액세스할 수 있어야 합니다. 프라이빗 엔드포인트를 사용하려는 경우 클러스터 서브넷을 활용하는 것이 좋습니다.

프라이빗 엔드포인트를 통해 Azure Data Lake Storage Gen2에 연결할 때 Gen2 스토리지 계정에 blobdfs 둘 다에 대해 설정된 엔드포인트가 있는지 확인합니다. 자세한 내용은 프라이빗 엔드포인트 만들기를 참조하세요.

방화벽 사용(선택 사항)

HDInsight 클러스터는 여전히 공용 인터넷에 연결하여 아웃바운드 종속성을 얻을 수 있습니다. 액세스를 제한하려면 방화벽을 구성할 수 있지만 필수 사항은 아닙니다.

클러스터 만들기

다음 JSON 코드 조각에는 프라이빗 HDInsight 클러스터를 만들기 위해 Azure Resource Manager 템플릿에서 구성해야 하는 두 가지 네트워크 속성이 포함됩니다.

networkProperties: {
    "resourceProviderConnection": "Outbound"
}

Private Link를 포함하여 많은 HDInsight 엔터프라이즈 보안 기능이 있는 전체 템플릿은 HDInsight 엔터프라이즈 보안 템플릿을 참조하세요.

PowerShell을 사용하여 클러스터를 만들려면 예제를 참조하세요.

Azure CLI를 사용하여 클러스터를 만들려면 예제를 참조하세요.

다음 단계