AKS(Azure Kubernetes Service)에서 IP의 동적 할당 및 향상된 서브넷 지원을 위해 Azure CNI 네트워킹 구성

기존 CNI의 단점은 AKS 클러스터가 성장함에 따라 Pod IP 주소가 소진되어 더 큰 서브넷에서 전체 클러스터를 다시 빌드해야 한다는 것입니다. Azure CNI의 새로운 동적 IP 할당 기능을 사용하면 AKS 클러스터를 호스팅하는 서브넷과는 별도의 서브넷에서 Pod IP를 할당함으로써 이 문제를 해결할 수 있습니다.

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

  • IP 사용률 향상: IP는 Pod 서브넷에서 클러스터 Pod에 동적으로 할당됩니다. 따라서 모든 노드에 대해 IP의 정적 할당을 수행하는 기존 CNI 솔루션에 비해 클러스터의 IP 사용률이 향상됩니다.
  • 확장 가능하고 유연한 노드 및 Pod 서브넷은 독립적으로 확장할 수 있습니다. 단일 Pod 서브넷은 클러스터의 여러 노드 풀 또는 동일한 VNet에 배포된 여러 AKS 클러스터에서 공유할 수 있습니다. 또한 노드 풀에 대해 별도의 Pod 서브넷을 구성할 수 있습니다.
  • 고성능: Pod에는 가상 네트워크 IP가 할당되므로 VNet의 다른 클러스터 Pod 및 리소스에 직접 연결됩니다. 솔루션은 성능 저하 없이 매우 큰 클러스터를 지원합니다.
  • Pod에 대한 별도 VNet 정책: Pod에 별도의 서브넷이 있으므로 노드 정책과 다른 별도의 VNet 정책을 구성할 수 있습니다. 이를 통해 노드가 아닌 Pod에 대해서만 인터넷 연결을 허용하고, Azure NAT Gateway를 사용하여 노드 풀에서 Pod의 원본 IP를 수정하고, NSG를 사용하여 노드 풀 간의 트래픽을 필터링하는 등의 많은 유용한 시나리오가 가능해 집니다.
  • Kubernetes 네트워크 정책: Azure 네트워크 정책과 Calico는 모두 이 새로운 솔루션을 사용합니다.

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

필수 조건

참고 항목

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

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

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

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

  • Azure CLI 버전 2.37.0 이상.

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

    az aks enable-addons --addons monitoring --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME
    

IP 주소 지정 계획

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

IP는 16개의 일괄 처리로 노드에 할당됩니다. Pod 서브넷 IP 할당은 클러스터의 노드당 최소 16 IP로 계획해야 합니다. 노드는 시작 시 16개의 IP를 요청하고 할당에 할당되지 않은 <8개의 IP가 있을 때마다 16개의 또 다른 일괄 처리를 요청합니다.

Kubernetes 서비스 및 Docker 브리지에 대한 IP 계획은 변경되지 않은 상태로 유지됩니다.

동적 IP 할당 및 향상된 서브넷 지원을 통한 클러스터의 노드당 최대 Pod 수

IP의 동적 할당과 함께 Azure CNI를 사용할 때 노드당 Pod 값은 기존 CNI 동작과 약간 다릅니다.

CNI 기본값 배포 시 구성 가능
기존 Azure CNI 30 예(최대 250)
IP의 동적 할당을 사용하여 Azure CNI 250 예(최대 250)

노드당 최대 Pod 수를 구성하는 것과 관련된 다른 모든 지침은 동일하게 유지됩니다.

배포 매개 변수

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

  • 이제 서브넷 매개 변수는 클러스터 노드와 관련된 서브넷을 참조합니다.
  • 추가 매개 변수 Pod 서브넷 은 IP 주소가 Pod에 동적으로 할당되는 서브넷을 지정하는 데 사용됩니다.

IP의 동적 할당 및 향상된 서브넷 지원을 통해 네트워킹 구성 - Azure CLI

클러스터에서 IP의 동적 할당 및 향상된 서브넷 지원을 사용하는 것은 클러스터 Azure CNI를 구성하는 기본 방법과 비슷합니다. 다음 예제에서는 노드용 서브넷과 Pod용 서브넷을 사용하여 새 가상 네트워크를 만들고 IP의 동적 할당 및 향상된 서브넷 지원을 통해 Azure CNI를 사용하는 클러스터를 만드는 방법을 안내합니다. $subscription과 같은 변수를 사용자의 고유한 값으로 바꿔야 합니다.

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

RESOURCE_GROUP_NAME="myResourceGroup"
VNET_NAME="myVirtualNetwork"
LOCATION="westcentralus"
SUBNET_NAME_1="nodesubnet"
SUBNET_NAME_2="podsubnet"

# Create the resource group
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION

# Create our two subnet network 
az network vnet create --resource-group $RESOURCE_GROUP_NAME --location $LOCATION --name $VNET_NAME --address-prefixes 10.0.0.0/8 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_1 --address-prefixes 10.240.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_2 --address-prefixes 10.241.0.0/16 -o none 

모니터링 추가 기능을 사용하여 --vnet-subnet-id 노드 서브넷을 참조하고 Pod 서브넷을 참조 --pod-subnet-id 하여 클러스터를 만듭니다.

CLUSTER_NAME="myAKSCluster"
SUBSCRIPTION="aaaaaaa-aaaaa-aaaaaa-aaaa"

az aks create --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --location $LOCATION \
    --max-pods 250 \
    --node-count 2 \
    --network-plugin azure \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_1 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_2 \
    --enable-addons monitoring

노드 풀 추가

노드 풀을 추가할 때 사용 --vnet-subnet-id 중인 노드 서브넷과 Pod 서브넷을 참조합니다 --pod-subnet-id. 다음 예제에서는 새 노드 풀을 만들 때 참조되는 두 개의 새 서브넷을 만듭니다.

SUBNET_NAME_3="node2subnet"
SUBNET_NAME_4="pod2subnet"
NODE_POOL_NAME="mynodepool"

az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_3 --address-prefixes 10.242.0.0/16 -o none 
az network vnet subnet create --resource-group $RESOURCE_GROUP_NAME --vnet-name $VNET_NAME --name $SUBNET_NAME_4 --address-prefixes 10.243.0.0/16 -o none 

az aks nodepool add --cluster-name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME --name $NODE_POOL_NAME \
    --max-pods 250 \
    --node-count 2 \
    --vnet-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_3 \
    --pod-subnet-id /subscriptions/$SUBSCRIPTION/resourceGroups/$RESOURCE_GROUP_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME/subnets/$SUBNET_NAME_4 \
    --no-wait

IP 서브넷 사용량 모니터링

Azure CNI는 IP 서브넷 사용량을 모니터링하는 기능을 제공합니다. IP 서브넷 사용량 모니터링을 사용하도록 설정하려면 다음 단계를 수행합니다.

YAML 파일 가져오기

  1. GitHub에서 container-azm-ms-agentconfig.yaml이라는 파일을 다운로드하거나 grep합니다.

  2. 통합에서 azure_subnet_ip_usage을 찾습니다. enabledtrue로 설정합니다.

  3. 파일을 저장합니다.

AKS 자격 증명 가져오기

구독, 리소스 그룹 및 클러스터에 대한 변수를 설정합니다. 다음을 예제로 고려합니다.

az account set --subscription $SUBSCRIPTION
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME

구성 적용

  1. 다운로드한 container-azm-ms-agentconfig.yaml 파일이 저장된 폴더에서 터미널을 엽니다.

  2. 먼저 다음 명령을 사용하여 구성을 적용합니다. kubectl apply -f container-azm-ms-agentconfig.yaml

  3. 그러면 Pod가 다시 시작되고 5-10분 후에 메트릭이 표시됩니다.

  4. 클러스터에서 메트릭을 보려면 Azure Portal의 클러스터 페이지에서 통합 문서로 이동하여 "서브넷 IP 사용량"이라는 통합 문서를 찾습니다. 보기는 다음과 유사합니다.

    A diagram of the Azure portal's workbook blade is shown, and metrics for an AKS cluster's subnet IP usage are displayed.

IP 주소의 동적 할당 및 향상된 서브넷 지원 FAQ

  • 클러스터/노드 풀에 여러 Pod 서브넷을 할당할 수 있나요?

    하나의 서브넷만 클러스터 또는 노드 풀에 할당할 수 있습니다. 그러나 여러 클러스터 또는 노드 풀은 단일 서브넷을 공유할 수 있습니다.

  • 다른 VNet에서 Pod 서브넷을 모두 할당할 수 있나요?

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

  • 클러스터의 일부 노드 풀은 기존 CNI를 사용하는 반면 다른 노드 풀은 새 CNI를 사용할 수 있나요?

    전체 클러스터는 한 가지 유형의 CNI만 사용해야 합니다.

다음 단계

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