이 문서에서는 새 AKS 클러스터 또는 기존 AKS 클러스터에서 시스템 할당 관리 ID를 사용하도록 설정하고, 시스템 할당 관리 ID의 주체 ID를 가져오고, 시스템 할당 관리 ID에 대한 역할 할당을 추가하는 방법을 설명합니다.
사전 요구 사항
AKS(Azure Kubernetes Service)의 관리 ID 개요를 참조하여 AKS에서 사용할 수 있는 다양한 유형의 관리 ID와 이를 사용하여 Azure 리소스에 안전하게 액세스하는 방법을 이해합니다.
명령을 사용하여
az account set구독을 현재 활성 구독으로 설정합니다.az account set --subscription <subscription-id>
기존 Azure 리소스 그룹입니다. 없는 경우
az group create명령을 사용하여 하나를 생성할 수 있습니다.az group create \ --name <resource-group-name> \ --location <location>
- Azure CLI 버전 2.23.0 이상이 설치되었습니다.
az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요. - 시스템 할당 관리 ID를 사용하도록 기존 클러스터를 업데이트하려면 Azure CLI 버전 2.49.0 이상이 설치되어 있어야 합니다.
- Terraform이 로컬로 설치되었습니다. 설치 지침은 Terraform 설치를 참조하세요.
제한점
- 관리 ID를 사용하여 클러스터를 만든 후에는 서비스 주체를 사용하도록 다시 전환할 수 없습니다.
- 관리 ID가 사용하도록 설정된 클러스터를 다른 테넌트로 이동하거나 마이그레이션하는 것은 지원되지 않습니다.
- 클러스터에 Microsoft Entra Pod 관리 ID(
aad-pod-identity)가 사용하도록 설정된 경우, NMI(노드 관리 ID) Pod는 노드의 iptables를 수정하여 IMDS(Azure 인스턴스 메타데이터) 엔드포인트에 대한 호출을 가로챕니다. 이 구성은 특정 Pod가aad-pod-identity를 사용하지 않더라도 IMDS 엔드포인트에 대한 모든 요청이 NMI에 의해 가로채진다는 것을 의미합니다.- AzurePodIdentityException 사용자 지정 리소스 정의(CRD)를 구성하여 CRD에 정의된 레이블과 일치하는 Pod에서 시작된 IMDS 엔드포인트로의 요청이 NMI에서 처리되지 않고 프록시되도록 지정할 수 있습니다.
kubernetes.azure.com/managedby: aks레이블이 있는 시스템 포드를 kube-system 네임스페이스에서 제외하려면 AzurePodIdentityException CRD를 구성하십시오. 자세한 내용은 AKS(Azure Kubernetes Service)에서 Microsoft Entra Pod 관리 ID 사용을 참조하세요. - 예외를 구성하려면 mic-exception YAML 설치합니다.
- AzurePodIdentityException 사용자 지정 리소스 정의(CRD)를 구성하여 CRD에 정의된 레이블과 일치하는 Pod에서 시작된 IMDS 엔드포인트로의 요청이 NMI에서 처리되지 않고 프록시되도록 지정할 수 있습니다.
- AKS는 사용자 지정 프라이빗 DNS 영역을 사용하는 경우 시스템이 할당한 관리 ID의 사용을 지원하지 않습니다.
클러스터 업데이트 고려 사항
클러스터를 업데이트할 때 다음 정보를 고려합니다.
- 업데이트는 사용할 VHD 업데이트가 있는 경우에만 작동합니다. 최신 VHD를 실행하는 경우 다음 VHD를 사용할 수 있을 때까지 기다린 후에 업데이트를 수행해야 합니다.
- Azure CLI는 마이그레이션 후 추가 기능의 권한이 올바르게 설정되도록 합니다. Azure CLI를 사용하여 마이그레이션 작업을 수행하지 않는 경우 추가 기능 ID의 사용 권한을 직접 처리해야 합니다. ARM(Azure Resource Manager) 템플릿을 사용하는 예제는 ARM 템플릿을 사용하여 Azure 역할 할당 참조하세요.
- 클러스터가 ACR(Azure Container Registry)에서 이미지를 가져오는 데
--attach-acr를 사용한 경우, 클러스터를 업데이트한 후az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id>명령을 실행하여 새로 생성된 관리 ID용 kubelet이 ACR에서 이미지를 가져올 수 있는 권한을 획득하도록 해야 합니다. 그렇지 않으면 업데이트 후 ACR에서 끌어올 수 없습니다.
새 AKS 클러스터에서 시스템 할당 관리 ID 사용
시스템 할당 관리 ID는 새 AKS 클러스터를 만들 때 기본적으로 사용하도록 설정됩니다.
az aks create 명령을 사용하여 AKS 클러스터를 만듭니다.
az aks create \
--resource-group <resource-group-name> \
--name <aks-cluster-name> \
--generate-ssh-keys
시스템 할당 관리 ID를 사용하도록 기존 클러스터 업데이트
az aks update 명령과 --enable-managed-identity 매개 변수를 사용하여 기존 AKS 클러스터를 서비스 주체에서 시스템 할당 관리 ID로 업데이트합니다.
az aks update \
--resource-group <resource-group-name> \
--name <aks-cluster-name> \
--enable-managed-identity
서비스 주체 대신 시스템이 할당한 관리 ID를 사용하도록 클러스터를 업데이트한 후에는 컨트롤 플레인과 Pod가 Azure의 다른 서비스에 액세스할 때 시스템이 할당한 관리 ID를 사용하여 권한을 부여합니다. Kubelet은 사용자가 에이전트 풀을 업그레이드할 때까지 서비스 주체를 계속 사용합니다. 노드에서 az aks nodepool upgrade --resource-group <resource-group-name> --cluster-name <aks-cluster-name> --name <node-pool-name> --node-image-only 명령을 사용하여 관리 ID로 업데이트할 수 있습니다. 노드 풀을 업그레이드할 때 노드 풀의 노드가 차단 및 드레이닝되고 이미지로 다시 설치되면서 AKS 클러스터에 대해 가동 중지 시간이 발생합니다.
시스템 할당 관리 ID의 주체 ID 가져오기
az aks show 명령을 사용하여 클러스터의 시스템 할당 관리 ID에 대한 주체 ID를 가져옵니다.
CLIENT_ID=$(az aks show \
--name <aks-cluster-name> \
--resource-group <resource-group-name> \
--query identity.principalId \
--output tsv)
시스템에서 할당된 관리 ID에 대한 역할 할당 추가
메모
사용자 지정 리소스 그룹에 Network Contributor 역할을 할당해야 하는 경우는 VNet(가상 네트워크), 연결된 Azure 디스크, 고정 IP 주소 또는 기본 작업자 노드 리소스 그룹 외부의 경로 테이블에 대한 것입니다.
az role assignment create 명령을 사용하여 시스템 할당 관리 ID에 Azure RBAC 역할을 할당합니다. 다음 예제에서는 시스템 할당 관리 ID에 네트워크 참가자 역할을 할당합니다. 역할 할당은 VNet을 포함하는 리소스 그룹으로 범위가 지정됩니다.
az role assignment create \
--assignee <client-id> \
--role "Network Contributor" \
--scope <custom-resource-group-id>
메모
클러스터의 관리 ID에 부여된 권한이 전파되는 데 최대 60분이 걸릴 수 있습니다.
Terraform 구성 파일 만들기
Terraform 구성 파일은 Terraform에서 만들고 관리하는 인프라를 정의합니다.
명명된
main.tf파일을 만들고 다음 코드를 추가하여 Terraform 버전을 정의하고 Azure 공급자를 지정합니다.terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} }다음 코드를 추가하여
main.tfAzure 리소스 그룹을 만듭니다. 필요에 따라 리소스 그룹의 이름과 위치를 자유롭게 변경할 수 있습니다.resource "azurerm_resource_group" "example" { name = "aks-rg" location = "East US" }
Terraform을 사용하여 시스템 할당 관리 ID를 사용하여 AKS 클러스터 만들기
다음 코드를 추가하여 main.tf 시스템 할당 관리 ID를 사용하여 AKS 클러스터를 만듭니다.
resource "azurerm_kubernetes_cluster" "system_assigned" {
name = "aks-system"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
dns_prefix = "akssystem"
identity {
type = "SystemAssigned"
}
default_node_pool {
name = "system"
node_count = 1
vm_size = "Standard_DS2_v2"
}
}
Terraform을 사용하여 시스템 할당 관리 ID에 대한 역할 할당 추가
다음 코드를 추가하여 main.tf 시스템 할당 관리 ID에 대한 역할 할당을 만듭니다. 이 예제에서는 시스템 할당 관리 ID에 네트워크 참가자 역할을 할당합니다. 역할 할당은 VNet을 포함하는 리소스 그룹으로 범위가 지정됩니다.
resource "azurerm_role_assignment" "system_assigned_network_contributor" {
scope = azurerm_resource_group.example.id
role_definition_name = "Network Contributor"
principal_id = azurerm_kubernetes_cluster.system_assigned.identity[0].principal_id
}
Terraform 초기화
main.tf 파일이 있는 디렉터리에서 terraform init 명령어를 사용해 Terraform을 초기화하세요. 이 명령은 Terraform을 사용하여 Azure 리소스를 관리하는 데 필요한 Azure 공급자를 다운로드합니다.
terraform init
Terraform 실행 계획 만들기
terraform plan 명령을 사용하여 Terraform 실행 계획을 만듭니다. 이 명령은 Terraform이 Azure 구독에서 만들거나 수정할 리소스를 보여 줍니다.
terraform plan
Terraform 구성 적용
실행 계획을 검토하고 확인한 후 명령을 사용하여 Terraform 구성을 적용합니다 terraform apply . 이 명령은 Azure 구독의 파일에 정의된 main.tf 리소스를 만들거나 수정합니다.
terraform apply
Terraform 배포 확인
Terraform 구성을 적용한 후 az aks show 명령에 --query 매개 변수를 사용하여 출력을 필터링하고 ID 정보를 표시함으로써 배포가 제대로 되었는지 확인할 수 있습니다. 다음은 그 예입니다.
az aks show \
--name <cluster-name> \
--resource-group <resource-group> \
--query identity.type \
--output tsv
관련 콘텐츠
AKS의 관리 ID에 대한 자세한 내용은 다음 문서를 참조하세요.