다음을 통해 공유


AKS(Azure Kubernetes Service)에서 CIDR 블록의 정적 할당 및 향상된 서브넷 지원을 위한 Azure CNI 네트워킹 구성 -(미리 보기)

Azure CNI 동적 IP 할당의 제한 사항은 /16 서브넷을 초과하는 Pod 서브넷 크기의 확장성입니다. 대규모 서브넷이 있더라도 Azure 주소 매핑 제한으로 인해 대규모 클러스터는 여전히 65,000개의 Pod로 제한될 수 있습니다. Azure CNI의 새로운 정적 블록 할당 기능은 개별 IP가 아닌 노드에 CIDR 블록을 할당하여 이 문제를 해결합니다.

다음과 같은 이점을 제공합니다.

  • 향상된 IP 확장성: CIDR 블록은 클러스터 노드에 정적으로 할당되며 기존 CNI를 사용하는 개별 IP의 기존 동적 할당과는 달리 노드의 수명 동안 존재합니다. 이를 통해 CIDR 블록을 기반으로 라우팅할 수 있으며 클러스터당 기존 65,000개의 Pod에서 최대 100만 개의 Pod까지 클러스터 제한을 확장할 수 있습니다. Azure Virtual Network는 클러스터의 규모를 수용할 수 있을 만큼 충분히 커야 합니다.
  • 확장성: 노드 및 Pod 서브넷은 독립적으로 크기를 조정할 수 있습니다. 단일 Pod 서브넷은 클러스터의 여러 노드 풀에서 또는 동일한 VNet에 배포된 여러 AKS 클러스터에서 공유할 수 있습니다. 또한 노드 풀에 대해 별도의 Pod 서브넷을 구성할 수 있습니다.
  • 고성능: Pod에는 가상 네트워크 IP가 할당되므로 VNet의 다른 클러스터 Pod 및 리소스에 직접 연결됩니다.
  • Pod에 대한 별도 VNet 정책: Pod에 별도의 서브넷이 있으므로 노드 정책과 다른 별도의 VNet 정책을 구성할 수 있습니다. 이를 통해 노드가 아닌 Pod에 대해서만 인터넷 연결을 허용하고, Azure NAT Gateway를 사용하여 노드 풀에서 Pod의 원본 IP를 수정하고, NSG를 사용하여 노드 풀 간의 트래픽을 필터링하는 등의 많은 유용한 시나리오가 가능해 집니다.
  • Kubernetes 네트워크 정책: Cilium, Azure NPM 및 Calico는 이 새 솔루션을 사용합니다.

이 문서에서는 AKS에서 CIDR의 정적 할당과 향상된 서브넷 지원을 위해 Azure CNI 네트워킹을 사용하는 방법을 보여 줍니다.

필수 조건

참고 항목

CIDR의 정적 블록 할당을 사용하는 경우 Kubernetes Load Balancer 서비스를 사용하여 애플리케이션을 Private Link 서비스로 노출하는 것은 지원되지 않습니다.

  • 이 문서에도 동일한 필수 조건이 적용되므로 AKS에서 기본 Azure CNI 네트워킹을 구성하기 위한 필수 조건을 검토합니다.

  • AKS에서 기본 Azure CNI 네트워킹을 구성하려면 동일한 매개 변수가 적용되므로 배포 매개 변수를 검토합니다.

  • AKS 엔진 및 DIY 클러스터는 지원하지 않습니다.

  • Azure CLI 버전 2.37.0 이상(버전 '2.0.0b2' 이상의 확장 aks-preview 포함)

  • 기존 클러스터가 있는 경우 IP 서브넷 사용을 모니터링할 수 있도록 컨테이너 인사이트를 사용하도록 설정해야 합니다. 다음 예제와 같이 az aks enable-addons 명령을 사용하여 컨테이너 인사이트를 사용하도록 설정할 수 있습니다.

  • 구독에 대한 구독 수준 기능 플래그인 'Microsoft.ContainerService/AzureVnetScalePreview'를 등록합니다.

    az aks enable-addons --addons monitoring --name <cluster-name> --resource-group <resource-group-name>
    

제한 사항

다음은 Azure CNI 정적 블록 할당 사용의 몇 가지 제한 사항입니다.

  • 필요한 최소 Kubernetes 버전은 1.28입니다.
  • 지원되는 최대 서브넷 크기는 x.x.x.x/12 ~ 100만 IP입니다.
  • 서브넷당 단일 작업 모드만 사용할 수 있습니다. 서브넷에서 정적 블록 할당 모드를 사용하는 경우 동일한 서브넷이 있는 다른 클러스터 또는 노드 풀에서 동적 IP 할당 모드를 사용할 수 없으며 그 반대의 경우도 마찬가지입니다.
  • 새 클러스터에서만 지원되거나 다른 서브넷이 있는 노드 풀을 기존 클러스터에 추가할 때만 지원됩니다. 기존 클러스터 또는 노드 풀 마이그레이션 또는 업데이트는 지원되지 않습니다.
  • 노드 풀의 노드에 할당된 모든 CIDR 블록에서 하나의 IP가 노드의 기본 IP로 선택됩니다. 따라서 --max-pods 값을 선택하는 네트워크 관리자의 경우 아래 계산을 사용하여 요구 사항을 가장 잘 충족하고 서브넷에서 IP를 최적으로 사용하도록 합니다.
    max_pods = (N * 16) - 1
    여기서 N은 모든 양의 정수이고 N > 은 0입니다.

사용 가능 지역

이 기능은 다음 지역에서 사용할 수 없습니다.

  • 미국 남부
  • 미국 동부 2
  • 미국 서부
  • 미국 서부 2

IP 주소 지정 계획

IP 주소 계획을 더욱 유연하고 세부적으로 세울 수 있습니다. 노드와 Pod는 독립적으로 크기를 조정하기 때문에 주소 공간을 별도로 계획할 수도 있습니다. Pod 서브넷은 노드 풀의 세분성으로 구성될 수 있으므로 노드 풀을 추가할 때 언제든지 새 서브넷을 추가할 수 있습니다. 클러스터/노드 풀의 시스템 Pod는 Pod 서브넷에서 IP를 수신하기 때문에 이 동작을 고려해야 합니다.

이 시나리오에서는 /28(16개 IP)의 CIDR 블록이 노드 풀에 대한 '--max-pod' 구성에 따라 노드에 할당됩니다. 이 구성은 노드당 최대 Pod 수를 정의합니다. 내부 목적을 위해 해당 노드의 사용 가능한 모든 IP에서 각 노드에 1개의 IP가 예약되어 있습니다.

따라서 IP를 결정하고 계획할 때 '--max-pods' 구성을 정의하는 것이 필수적이며, 아래와 같이 가장 잘 계산할 수 있습니다. max_pods_per_node = (16 * N) - 1 여기서 N은 0보다 큰 양의 정수

IP 낭비가 없는 이상적인 값은 위의 식을 준수하기 위해 최대 Pod 값이 필요합니다.

  • 예 1: max_pods = 30, 노드당 할당된 CIDR 블록 = 2, Pod에 사용 가능한 총 IP =(16 * 2) - 1 = 32 - 1 = 31, 노드당 IP 낭비 = 31 - 30 = 1 [낭비 적음 - 허용 가능한 사례]
  • 예 2: max_pods = 31, 노드당 할당된 CIDR 블록 = 2, Pod에 사용 가능한 총 IP =(16 * 2) - 1 = 32 - 1 = 31, 노드당 IP 낭비 = 31 - 31 = 0 [이상적인 경우]
  • 예 3: max_pods = 32, 노드당 할당된 CIDR 블록 = 3, Pod에 사용 가능한 총 IP =(16 * 3) - 1 = 48 - 1 = 47, 노드당 IP 낭비 = 47 - 32 = 15 [낭비 많음 - 권장되지 않는 사례]

Kubernetes Service에 대한 IP 계획은 변경되지 않습니다.

참고 항목

VNet에 클러스터의 규모를 지원하기에 충분히 크고 연속적인 주소 공간이 있는지 확인합니다.

배포 매개 변수

AKS에서 기본 Azure CNI 네트워킹을 구성하기 위한 배포 매개 변수는 다음 두 가지 예외를 제외하고 모두 유효합니다.

  • vnet subnet id 매개 변수는 이제 클러스터 노드와 관련된 서브넷을 참조합니다.
  • 매개 변수 pod subnet id는 노드 풀의 Pod에 정적 또는 동적으로 할당될 IP 주소의 서브넷을 지정하는 데 사용됩니다.
  • pod ip allocation mode 매개 변수는 동적 개별 할당이나 정적 블록 할당을 사용할지 여부를 지정합니다.

시작하기 전에

  • Azure CLI를 사용하는 경우 aks-preview 확장이 필요합니다. aks-preview Azure CLI 확장 설치를 참조하세요.
  • ARM 또는 REST API를 사용하는 경우 AKS API 버전은 2024-01-02-preview 이상이어야 합니다.

aks-preview Azure CLI 확장 설치

  1. az extension add 명령을 사용하여 aks-preview 확장을 설치합니다.

    az extension add --name aks-preview
    
  2. az extension update 명령을 사용하여 확장의 최신 버전으로 업데이트합니다. 확장은 '2.0..0b2' 이상 버전이어야 합니다.

    az extension update --name aks-preview
    

AzureVnetScalePreview 기능 플래그 등록

  1. az feature register 명령을 사용하여 AzureVnetScalePreview 기능 플래그를 등록합니다.

    az feature register --namespace "Microsoft.ContainerService" --name "AzureVnetScalePreview"
    

    상태가 Registered로 표시되는 데 몇 분 정도 걸립니다.

  2. 또한 az feature show 명령을 사용하여 등록 상태를 확인합니다.

    az feature show --namespace "Microsoft.ContainerService" --name "AzureVnetScalePreview"
    
  3. 상태가 Registered(등록됨)를 반영하면 az provider register 명령을 사용하여 Microsoft.ContainerService 리소스 공급자의 등록을 새로 고칩니다.

    az provider register --namespace Microsoft.ContainerService
    

CIDR 블록의 정적 할당과 향상된 서브넷 지원을 통한 네트워킹 구성 - Azure CLI

클러스터에서 CIDR 블록을 정적으로 할당하는 것은 동적 IP 할당을 위한 클러스터 Azure CNI를 구성하는 기본 방법과 비슷합니다. 다음 예에서는 노드용 서브넷과 Pod용 서브넷으로 새 가상 네트워크를 만들고 CIDR 블록을 정적으로 할당하여 Azure CNI를 사용하는 클러스터를 만드는 과정을 안내합니다. $subscription과 같은 변수는 반드시 사용자의 고유한 값으로 바꿔주세요.

두 개의 서브넷이 있는 가상 네트워크를 만듭니다.

resourceGroup="myResourceGroup"
vnet="myVirtualNetwork"
location="myRegion"

# Create the resource group
az group create --name $resourceGroup --location $location

# Create our two subnet network 
az network vnet create --resource-group $resourceGroup --location $location --name $vnet --address-prefixes 10.0.0.0/8 -o none 
az network vnet subnet create --resource-group $resourceGroup --vnet-name $vnet --name nodesubnet --address-prefixes 10.240.0.0/16 -o none 
az network vnet subnet create --resource-group $resourceGroup --vnet-name $vnet --name podsubnet --address-prefixes 10.40.0.0/13 -o none 

--vnet-subnet-id를 사용하여 노드 서브넷을 참조하고, --pod-subnet-id를 사용하여 Pod 서브넷을 참조하고, --pod-ip-allocation-mode를 사용하여 IP 할당 모드를 정의하고 모니터링 추가 기능을 사용하도록 설정하여 클러스터를 만듭니다.

clusterName="myAKSCluster"
subscription="aaaaaaa-aaaaa-aaaaaa-aaaa"

az aks create \
    --name $clusterName \
    --resource-group $resourceGroup \
    --location $location \
    --max-pods 250 \
    --node-count 2 \
    --network-plugin azure \
    --pod-ip-allocation-mode StaticBlock \
    --vnet-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/nodesubnet \
    --pod-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/podsubnet \
    --enable-addons monitoring \
    --generate-ssh-keys

노드 풀 추가하는 중

노드 풀을 추가할 때 --vnet-subnet-id를 사용하여 노드 서브넷을 참조하고, --pod-subnet-id를 사용하여 Pod 서브넷을 참조하고, '--pod-ip-allocation-mode'를 사용하여 할당 모드를 참조합니다. 다음 예제에서는 새 노드 풀을 만들 때 참조되는 두 개의 새 서브넷을 만듭니다.

az network vnet subnet create -g $resourceGroup --vnet-name $vnet --name node2subnet --address-prefixes 10.242.0.0/16 -o none 
az network vnet subnet create -g $resourceGroup --vnet-name $vnet --name pod2subnet --address-prefixes 10.243.0.0/16 -o none 

az aks nodepool add --cluster-name $clusterName -g $resourceGroup  -n newnodepool \
    --max-pods 250 \
    --node-count 2 \
    --vnet-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/node2subnet \
    --pod-subnet-id /subscriptions/$subscription/resourceGroups/$resourceGroup/providers/Microsoft.Network/virtualNetworks/$vnet/subnets/pod2subnet \
    --pod-ip-allocation-mode StaticBlock \
    --no-wait

CIDR 블록의 정적 할당 및 향상된 서브넷 지원 FAQ

  • 클러스터에 여러 개의 Pod 서브넷을 할당할 수 있나요?

    여러 개의 서브넷을 클러스터에 할당할 수 있지만 각 노드 풀에는 하나의 서브넷만 할당할 수 있습니다. 동일하거나 다른 클러스터의 여러 노드 풀은 동일한 서브넷을 공유할 수 있습니다.

  • 전부 다른 VNet의 Pod 서브넷을 할당할 수 있나요?

    아니요, Pod 서브넷은 클러스터와 동일한 VNet에 속해야 합니다.

  • 클러스터의 일부 노드 풀은 동적 IP 할당을 사용하는 반면 다른 노드 풀은 새로운 정적 블록 할당을 사용할 수 있나요?

    네, 다른 노드 풀은 다른 할당 모드를 사용할 수 있습니다. 그러나 서브넷이 하나의 할당 모드에서 사용되면 연관된 모든 노드 풀에서 동일한 할당 모드로만 사용할 수 있습니다.

다음 단계

AKS의 네트워킹에 대한 자세한 내용은 다음 문서를 참조하세요.