프라이빗 AKS(Azure Kubernetes Service) 클러스터 만들기

프라이빗 클러스터의 컨트롤 플레인 또는 API 서버에는 RFC1918 - 프라이빗 인터넷용 주소 할당 문서에 정의된 내부 IP 주소가 있습니다. 프라이빗 클러스터를 사용하면 API 서버와 노드 풀 사이의 네트워크 트래픽이 개인 네트워크에만 유지되는지 확인할 수 있습니다.

컨트롤 플레인 또는 API 서버는 AKS(Azure Kubernetes Service)에서 관리하는 Azure 리소스 그룹에 있습니다. 클러스터 또는 노드 풀이 리소스 그룹에 있습니다. 서버와 클러스터 또는 노드 풀은 API 서버 가상 네트워크의 Azure Private Link 서비스 및 AKS 클러스터의 서브넷에 노출되는 프라이빗 엔드포인트를 통해 서로 통신할 수 있습니다.

프라이빗 AKS 클러스터를 프로비전하는 경우 AKS는 기본값으로 프라이빗 DNS 영역이 있는 프라이빗 FQDN과 Azure 공용 DNS에 해당 A 레코드가 있는 추가 공용 FQDN을 만듭니다. 에이전트 노드는 프라이빗 DNS 영역의 A 레코드를 계속 사용하여 API 서버와 통신하기 위해 프라이빗 엔드포인트의 개인 IP 주소를 확인합니다.

이 문서의 목적은 프라이빗 링크 기반 AKS 클러스터를 배포하는 데 도움이 되는 것입니다. 필요한 프라이빗 링크 또는 터널 없이 AKS 클러스터를 만들려면 API Server VNet 통합을 사용하여 Azure Kubernetes Service 클러스터 만들기(미리 보기)를 참조하세요.

사용 가능 지역

프라이빗 클러스터는 AKS가 지원되는 21Vianet 지역에서 운영되는 퍼블릭 지역, Azure Government 및 Microsoft Azure에서 사용할 수 있습니다.

필수 조건

  • Azure CLI 버전 2.28.0 이상 az --version을 실행하여 버전을 찾고 az upgrade를 실행하여 버전을 업그레이드합니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
  • aks-preview 확장 0.5.29 이상입니다.
  • ARM(Azure Resource Manager) 또는 Azure REST API를 사용하는 경우 AKS API 버전은 2021-05-01 이상이어야 합니다.
  • Azure Private Link 서비스는 표준 Azure Load Balancer에서만 지원됩니다. 기본 Azure Load Balancer는 지원되지 않습니다.
  • 사용자 지정 DNS 서버를 사용하려면 Azure 공용 IP 주소 168.63.129.16을 사용자 지정 DNS 서버의 업스트림 DNS 서버로 추가하고 이 공용 IP 주소를 첫 번째 DNS 서버로 추가해야 합니다. Azure IP 주소에 대한 자세한 내용은 IP 주소 168.63.129.16이란?을 참조하세요.
    • 클러스터의 DNS 영역은 168.63.129.16으로 전달하는 영역이어야 합니다. Azure 서비스 DNS 영역 구성에서 영역 이름에 대한 자세한 정보를 찾을 수 있습니다.

참고 항목

이제 Azure Linux 노드 풀을 GA(일반 공급)로 사용할 수 있습니다. 이점 및 배포 단계에 대한 자세한 내용은 AKS용 Azure Linux 컨테이너 호스트 소개를 참조하세요.

제한 사항

  • IP 권한이 부여된 범위는 프라이빗 API 서버 엔드포인트에 적용할 수 없으며 퍼블릭 API 서버에만 적용됩니다
  • Azure Private Link 서비스 제한 사항은 프라이빗 클러스터에 적용됩니다.
  • 프라이빗 클러스터를 사용하는 Azure DevOps Microsoft 호스팅 에이전트는 지원되지 않습니다. 자체 호스팅 에이전트를 사용하는 것이 좋습니다.
  • Azure Container Registry가 프라이빗 AKS 클러스터에서 작동하도록 설정해야 하는 경우 클러스터 가상 네트워크에서 컨테이너 레지스트리에 대한 프라이빗 링크를 설정하거나 Container Registry 가상 네트워크와 프라이빗 클러스터의 가상 네트워크 간에 피어링을 설정합니다.
  • 기존 AKS 클러스터를 프라이빗 클러스터로 변환하는 기능은 지원되지 않습니다.
  • 고객 서브넷에서 프라이빗 엔드포인트를 삭제하거나 수정하면 클러스터의 작동이 중지됩니다.

프라이빗 AKS 클러스터 만들기

리소스 그룹 만들기

az group create 명령을 사용하여 리소스 그룹을 만듭니다. AKS 클러스터에 기존 리소스 그룹을 사용할 수도 있습니다.

az group create -l eastus -n myResourceGroup

기본 기본 네트워킹

--enable-private-cluster 플래그와 함께 az aks create 명령을 사용하여 기본 네트워킹이 있는 프라이빗 클러스터를 만듭니다.

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster  

고급 네트워킹

다음 플래그와 함께 az aks create 명령을 사용하여 고급 네트워킹이 있는 프라이빗 클러스터를 만듭니다.

az aks create \
    --resource-group <private-cluster-resource-group> \
    --name <private-cluster-name> \
    --load-balancer-sku standard \
    --enable-private-cluster \
    --network-plugin azure \
    --vnet-subnet-id <subnet-id> \
    --dns-service-ip 10.2.0.10 \
    --service-cidr 10.2.0.0/24 

사용자 지정 도메인 사용

내부적으로만 확인할 수 있는 사용자 지정 도메인을 구성하려는 경우 사용자 지정 도메인 사용을 참조하세요.

공용 FQDN 사용 안 함

새 AKS 클러스터에서 공용 FQDN 사용 안 함

--disable-public-fqdn 플래그를 사용하여 프라이빗 AKS 클러스터를 만들 때 공용 FQDN을 사용하지 않도록 설정합니다.

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <private-dns-zone-mode> --disable-public-fqdn

기존 클러스터에서 공용 FQDN 사용 안 함

--disable-public-fqdn 플래그와 함께 az aks update 명령을 사용하여 기존 AKS 클러스터에서 공용 FQDN을 사용하지 않도록 설정합니다.

az aks update -n <private-cluster-name> -g <private-cluster-resource-group> --disable-public-fqdn

프라이빗 DNS 영역 구성

다음 매개 변수를 사용하여 프라이빗 DNS 영역을 구성할 수 있습니다.

  • system: 기본값입니다. --private-dns-zone 인수를 생략하면 AKS는 노드 리소스 그룹에 프라이빗 DNS 영역을 만듭니다.
  • none: 기본값은 공용 DNS입니다. AKS는 프라이빗 DNS 영역을 만들지 않습니다.
  • CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID: 이를 위해서는 Azure 전역 클라우드에서 privatelink.<region>.azmk8s.io 또는 <subzone>.privatelink.<region>.azmk8s.io 형식의 프라이빗 DNS 영역을 만들어야 합니다. 나중에 사용하려면 프라이빗 DNS 영역의 리소스 ID가 필요합니다. 프라이빗 DNS 영역 기여자네트워크 기여자 역할이 있는 사용자 할당 ID 또는 서비스 주체도 필요합니다. API 서버 VNet 통합을 사용하여 배포하는 경우 프라이빗 DNS 영역은 private.<region>.azmk8s.io 또는 <subzone>.private.<region>.azmk8s.io의 명명 형식을 지원합니다.
    • 프라이빗 DNS 영역이 AKS 클러스터와 다른 구독에 있는 경우 두 구독 모두에 Azure 공급자 Microsoft.ContainerServices 를 등록해야 합니다.
    • "fqdn-subdo기본"는 하위 기본 기능을 제공하기 위해 "CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID"와 함께 사용할 수 있습니다privatelink.<region>.azmk8s.io.
    • AKS 클러스터가 Active Directory 서비스 주체를 사용하여 구성된 경우 AKS는 사용자 지정 프라이빗 DNS 영역이 있는 시스템이 할당한 관리 ID 사용을 지원하지 않습니다.
    • <subzone>을 지정하는 경우 <subzone> 이름은 32자로 제한됩니다.

참고 항목

CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID는 Azure CLI 외에 ARM 템플릿을 사용하여 구성할 수 있습니다. privateDNSZone은 다음 예와 같이 프라이빗 DNS 영역 리소스 ID를 허용합니다.

properties.apiServerAccessProfile.privateDNSZone.
"apiServerAccessProfile": {
"enablePrivateCluster": true,
"privateDNSZone": "system|none|[resourceId(..., 'Microsoft.Network/privateDnsZones', 'privatelink.<region>.azmk8s.io']"
}

Important

클러스터를 만든 후에는 CUSTOM_PRIVATE_DNS_ZONE_RESOURCE_ID를 변경할 수 없으며 삭제할 수도 없습니다. 그렇지 않으면 클러스터에서 업그레이드 작업을 수행하는 데 문제가 발생합니다.

프라이빗 DNS 영역을 사용하여 프라이빗 AKS 클러스터 만들기

다음 플래그와 함께 az aks create 명령을 사용하여 프라이빗 DNS 영역이 있는 프라이빗 AKS 클러스터를 만듭니다.

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone [system|none]

사용자 지정 프라이빗 DNS 영역 또는 프라이빗 DNS 하위 영역을 사용하여 프라이빗 AKS 클러스터 만들기

다음 플래그와 함께 az aks create 명령을 사용하여 사용자 지정 프라이빗 DNS 영역 또는 하위 영역이 있는 프라이빗 AKS 클러스터를 만듭니다.

# The custom private DNS zone name should be in the following format: "<subzone>.privatelink.<region>.azmk8s.io"

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <custom private dns zone or custom private dns subzone resourceID>

사용자 지정 프라이빗 DNS 영역 및 사용자 지정 하위 도메인을 사용하여 프라이빗 AKS 클러스터 만들기

다음 플래그와 함께 az aks create 명령을 사용하여 사용자 지정 프라이빗 DNS 영역 및 하위 도메인이 있는 프라이빗 AKS 클러스터를 만듭니다.

# The custom private DNS zone name should be in one of the following formats: "privatelink.<region>.azmk8s.io" or "<subzone>.privatelink.<region>.azmk8s.io"

az aks create -n <private-cluster-name> -g <private-cluster-resource-group> --load-balancer-sku standard --enable-private-cluster --enable-managed-identity --assign-identity <resourceID> --private-dns-zone <custom private dns zone resourceID> --fqdn-subdomain <subdomain>

프라이빗 DNS 영역에서 퍼블릭으로 프라이빗 클러스터 업데이트

참고 항목

이 기능을 사용하려면 aks-preview 확장 버전 >= 0.5.97이 필요합니다.

다음 플래그와 함께 az aks update 명령을 사용하여 프라이빗 클러스터를 byo 또는 system에서 none으로 업데이트합니다.

az aks update -n <private-cluster-name> -g <private-cluster-resource-group> --private-dns-zone none

참고 항목

byo 또는 system에서 none으로만 업데이트할 수 있습니다. 업데이트 값의 다른 조합은 지원되지 않습니다.

프라이빗 클러스터에 연결하기 위한 옵션

API 서버 엔드포인트에 공용 IP 주소가 없습니다. API 서버를 관리하려면 AKS 클러스터의 Azure VNet(Virtual Network)에 대한 액세스 권한이 있는 VM을 사용해야 합니다. 프라이빗 클러스터에 대한 네트워크 연결을 설정할 경우 몇 가지 옵션이 있습니다.

참고 항목

AKS 클러스터와 동일한 VNet에서 VM을 만드는 것이 가장 쉬운 옵션입니다. Express 경로 및 VPN은 비용을 추가하고 추가 네트워킹 복잡성이 필요합니다. 가상 네트워크 피어링을 사용하려면 네트워크 CIDR 범위를 계획하여 겹치는 범위가 없도록 해야 합니다.

가상 네트워크 피어링

가상 네트워크 피어링은 프라이빗 클러스터에 액세스하는 한 가지 방법입니다. 가상 네트워크 피어링을 사용하려면 가상 네트워크와 프라이빗 DNS 영역 간에 링크를 설정해야 합니다.

  1. 브라우저에서 Azure Portal로 이동합니다.
  2. Azure Portal에서 노드 리소스 그룹으로 이동합니다.
  3. 프라이빗 DNS 영역을 선택합니다.
  4. 왼쪽 창에서 가상 네트워크를 선택합니다.
  5. VM의 가상 네트워크를 프라이빗 DNS 영역에 추가하는 새 링크를 만듭니다. DNS 영역 링크를 사용할 수 있게 되는 데 몇 분 정도 걸립니다.
  6. Azure Portal에서 클러스터의 가상 네트워크가 포함된 리소스 그룹으로 이동합니다.
  7. 오른쪽 창에서 가상 네트워크를 선택합니다. 가상 네트워크 이름은 aks-vnet-* 형식으로 되어 있습니다.
  8. 왼쪽 창에서 피어링을 선택합니다.
  9. 추가를 선택하고 VM의 가상 네트워크를 추가한 다음 피어링을 만듭니다. 자세한 내용은 가상 네트워크 피어링을 참조하세요.

사용자 지정 DNS를 사용하여 허브 및 스포크

허브 및 스포크 아키텍처 는 일반적으로 Azure에서 네트워크를 배포하는 데 사용됩니다. 이러한 배포 중 상당수에서 스포크 VNet의 DNS 설정은 중앙 DNS 전달자를 참조하여 온-프레미스 및 Azure 기반 DNS 확인을 허용하도록 구성됩니다. 이러한 네트워킹 환경에 AKS 클러스터를 배포하는 경우 몇 가지 특별한 고려 사항이 있습니다.

Private cluster hub and spoke

  • 프라이빗 클러스터가 프로비저닝되면 기본적으로 프라이빗 엔드포인트(1)와 프라이빗 DNS 영역(2)이 클러스터 관리형 리소스 그룹에서 생성됩니다. 클러스터는 프라이빗 영역의 A 레코드를 사용하여 API 서버와 통신할 프라이빗 엔드포인트의 IP를 확인합니다.
  • 프라이빗 DNS 영역은 클러스터 노드가 연결된 VNet에만 연결됩니다(3). 즉, 연결된 VNet의 호스트만 프라이빗 엔드포인트를 확인할 수 있습니다. VNet에 사용자 지정 DNS가 구성되지 않은 시나리오(기본값)에서 이 작업은 연결로 인해 프라이빗 DNS 영역에 있는 레코드를 확인할 수 있는 DNS의 168.63.129.16에 위치한 호스트 지점으로서 문제 없이 작동합니다.
  • 클러스터를 포함하는 VNet에 사용자 지정 DNS 설정(4)이 있는 시나리오에서는 프라이빗 DNS 영역이 사용자 지정 DNS 확인자(5)가 포함된 VNet에 연결되지 않으면 클러스터 배포가 실패합니다. 이 링크는 클러스터 프로비전 중에 프라이빗 영역을 만든 후 또는 이벤트 기반 배포 메커니즘(예: Azure Event Grid 및 Azure Functions)을 사용하여 영역을 만들 때 자동화를 통해 수동으로 만들 수 있습니다. 초기 배포 중에 클러스터 오류를 방지하기 위해 프라이빗 DNS 영역 리소스 ID를 사용하여 클러스터를 배포할 수 있습니다. 리소스 유형 Microsoft.ContainerService/managedCluster 및 API 버전 2022-07-01에서만 작동합니다. ARM 템플릿 또는 Bicep 리소스 정의와 함께 이전 버전을 사용하는 것은 지원되지 않습니다.

참고 항목

조건부 전달은 하위 도메인을 지원하지 않습니다.

참고 항목

kubenet을 사용하여 자체 경로 테이블 가져오기 및 프라이빗 클러스터를 사용하여 자체 DNS 가져오기를 사용하는 경우 클러스터 만들기가 실패합니다. 클러스터 만들기를 실패한 후에는 노드 리소스 그룹의 RouteTable을 서브넷에 연결하여 성공적으로 클러스터를 만듭니다.

프라이빗 엔드포인트 연결 사용

프라이빗 클러스터와 통신하기 위해 VNet을 피어링할 필요가 없도록 프라이빗 엔드포인트를 설정할 수 있습니다. 프라이빗 엔드포인트를 사용하려면 가상 네트워크에 새 프라이빗 엔드포인트를 만든 다음, 가상 네트워크와 새 프라이빗 DNS 영역 간에 링크를 만듭니다.

Important

가상 네트워크가 사용자 지정 DNS 서버로 구성된 경우 환경에 맞게 프라이빗 DNS를 적절하게 설정해야 합니다. 자세한 내용은 가상 네트워크 이름 확인 설명서를 참조하세요.

프라이빗 엔드포인트 리소스 만들기

VNet에서 프라이빗 엔드포인트 리소스를 만듭니다.

  1. 브라우저에서 Azure Portal로 이동합니다.
  2. Azure Portal 메뉴에서 리소스 만들기를 선택합니다.
  3. 프라이빗 엔드포인트를 검색하고 프라이빗 엔드포인트 > 만들기를 선택합니다.
  4. 만들기를 실행합니다.
  5. 기본 사항 탭에서 다음 옵션을 설정합니다.
    • 프로젝트 세부 정보:
      • Azure 구독을 선택합니다.
      • 가상 네트워크가 있는 Azure 리소스 그룹을 선택합니다.
    • 인스턴스 세부 정보:
      • myPrivateEndpoint와 같은 프라이빗 엔드포인트의 이름을 입력합니다.
      • 프라이빗 엔드포인트에 대한 지역을 선택합니다.

Important

선택한 지역이 연결하려는 가상 네트워크와 동일한지 확인합니다. 그렇지 않으면 구성 탭에 가상 네트워크가 표시되지 않습니다.

  1. 다음: 리소스를 선택하고 다음 옵션을 설정합니다.
    • 연결 방법: 내 디렉터리의 Azure 리소스에 연결을 선택합니다.
    • 구독: 프라이빗 클러스터가 있는 구독을 선택합니다.
    • 리소스 종류: Microsoft.ContainerService/managedClusters를 선택합니다.
    • 리소스: 프라이빗 클러스터를 선택합니다.
    • 대상 하위 리소스: 관리를 선택합니다.
  2. 다음: Virtual Network를 선택하고 다음 옵션을 설정합니다.
    • 네트워킹:
      • 가상 네트워크: 가상 네트워크를 선택합니다.
      • 서브넷: 서브넷을 선택합니다.
  3. 다음: DNS>다음: 태그를 선택하고 필요에 따라 키-값을 설정합니다.
  4. 다음: 검토 + 만들기>만들기를 선택합니다.

리소스가 만들어지면 나중에 사용할 수 있도록 프라이빗 엔드포인트의 개인 IP 주소를 기록합니다.

프라이빗 DNS 영역 만들기

프라이빗 엔드포인트가 생성되면 프라이빗 클러스터에서 만든 프라이빗 DNS 영역과 동일한 이름으로 새 프라이빗 DNS 영역을 만듭니다.

  1. Azure Portal의 노드 리소스 그룹으로 이동합니다.
  2. 프라이빗 DNS 영역 및 레코드를 선택합니다.
    • *.privatelink.<region>.azmk8s.io 패턴을 따르는 프라이빗 DNS 영역의 이름입니다.
    • A 레코드의 이름(프라이빗 DNS 이름 제외)입니다.
    • TTL(Time to Live).
  3. Azure Portal에서 리소스 만들기를 선택합니다.
  4. 프라이빗 DNS 영역을 검색하고 > 프라이빗 DNS 영역 만들기를 선택합니다.
  5. 기본 사항 탭에서 다음 옵션을 설정합니다.
    • 프로젝트 세부 정보:
      • 구독을 선택합니다.
      • 프라이빗 엔드포인트를 만든 리소스 그룹을 선택합니다.
    • 인스턴스 세부 정보:
      • 이전 단계에서 검색된 DNS 영역의 이름을 입력합니다.
      • 지역은 기본적으로 리소스 그룹의 위치로 설정됩니다.
  6. 검토 + 만들기>만들기를 차례로 선택합니다.

A 레코드 만들기

프라이빗 DNS 영역이 만들어지면 프라이빗 엔드포인트를 프라이빗 클러스터에 연결하는 A 레코드를 만듭니다.

  1. 이전 단계에서 만든 프라이빗 DNS 영역으로 이동합니다.
  2. 개요 페이지에서 레코드 집합을 선택합니다.
  3. 레코드 집합 추가 탭에서 다음 옵션을 설정합니다.
    • 이름: 프라이빗 클러스터의 DNS 영역에 있는 A 레코드에서 검색된 이름을 입력합니다.
    • 형식: A-주소 레코드를 선택합니다.
    • TTL: 프라이빗 클러스터의 DNS 영역에 있는 A 레코드의 번호를 입력합니다.
    • TTL 단위: 프라이빗 클러스터의 DNS 영역에서 A 레코드의 값과 일치하도록 드롭다운 값을 변경합니다.
    • IP 주소: 사용자가 만든 프라이빗 엔드포인트의 IP 주소를 입력합니다.

Important

A 레코드를 만들 때 FQDN(정규화된 도메인 이름)이 아닌 이름만 사용합니다.

A 레코드가 만들어지면 프라이빗 DNS 영역을 프라이빗 클러스터에 액세스할 가상 네트워크에 연결합니다.

  1. 이전 단계에서 만든 프라이빗 DNS 영역으로 이동합니다.
  2. 왼쪽 창에서 가상 네트워크 링크를 선택합니다.
  3. 추가를 선택하고 다음 옵션을 설정합니다.
    • 링크 이름: 가상 네트워크 링크의 이름을 입력합니다.
    • 구독: 프라이빗 클러스터가 있는 구독을 선택합니다.
    • 가상 네트워크: 프라이빗 클러스터의 가상 네트워크를 선택합니다.
  4. 확인을 선택하여 링크를 만듭니다.

작업을 완료할 때까지 몇 분 정도 걸릴 수 있습니다. 가상 네트워크 링크가 만들어지면 2단계에서 사용한 가상 네트워크 링크 탭에서 액세스할 수 있습니다.

Warning

프라이빗 클러스터가 중지되고 다시 시작되면 프라이빗 클러스터의 원래 프라이빗 링크 서비스가 제거되고 다시 생성되어 프라이빗 엔드포인트와 프라이빗 클러스터 간의 연결이 끊어집니다. 이 문제를 해결하려면 프라이빗 클러스터에 연결된 사용자가 만든 프라이빗 엔드포인트를 삭제하고 다시 만듭니다. 다시 만든 프라이빗 엔드포인트에 새 IP 주소가 있는 경우 DNS 레코드도 업데이트해야 합니다.

다음 단계

관련된 모범 사례에 대해서는 AKS의 네트워크 연결 및 보안에 대한 모범 사례를 참조하세요.