다음을 통해 공유


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 네트워킹을 사용하는 방법을 보여 줍니다.

필수 조건

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

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

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

  • Azure CLI 버전 2.37.0 이상.

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

    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 할당을 담당하는 NNC(NodeNetworkConfiguration) 리소스를 보고 확인하려면 다음 명령을 실행할 수 있습니다.

kubectl get nodenetworkconfigs -n kube-system -o wide

동적 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-subnet-id를 사용하여 Pod 서브넷을 참조하고 모니터링 추가 기능을 사용하도록 설정하는 클러스터를 만듭니다.

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 \
    --generate-ssh-keys

노드 풀 추가하는 중

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

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 . 그러면 Pod가 다시 시작되고 5-10분 후에 메트릭이 표시됩니다.
  3. Azure Portal의 클러스터 페이지에서 통합 문서로 이동하여 클러스터의 메트릭을 보고 서브넷 IP 사용이라는 통합 문서를 찾습니다.

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

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

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

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

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

  • 다른 클러스터가 새 CNI를 사용하는 동안 클러스터의 일부 노드 풀에서 기존 CNI를 사용할 수 있나요?

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

다음 단계

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