기존 CNI의 단점은 AKS 클러스터가 성장함에 따라 Pod IP 주소가 소진되어 더 큰 서브넷에서 전체 클러스터를 다시 빌드해야 한다는 것입니다. Azure CNI의 새로운 동적 IP 할당 기능을 사용하면 AKS 클러스터를 호스팅하는 서브넷과는 별도의 서브넷에서 Pod IP를 할당함으로써 이 문제를 해결할 수 있습니다.
다음과 같은 이점이 있습니다.
- IP 사용률 향상: IP가 Pod 서브넷에서 클러스터 Pod으로 동적으로 할당됩니다. 이로 인해 모든 노드에 대해 IP의 정적 할당을 수행하는 기존 CNI 솔루션과 비교하여 클러스터의 IP 사용률이 향상됩니다.
- 확장성 및 유연성: 노드 및 Pod 서브넷은 독립적으로 크기를 조정할 수 있습니다. 단일 Pod 서브넷은 클러스터의 여러 노드 풀에서 또는 동일한 VNet에 배포된 여러 AKS 클러스터에서 공유할 수 있습니다. 또한 노드 풀에 대해 별도의 Pod 서브넷을 구성할 수 있습니다.
- 솔루션은 성능 저하 없이 매우 큰 클러스터를 지원합니다. The solution supports very large clusters without any degradation in performance.
- Pod에 대한 별도 VNet 정책: Pod에 별도의 서브넷이 있으므로 노드 정책과 다른 별도의 VNet 정책을 구성할 수 있습니다. 이를 통해 노드가 아닌 Pod에 대해서만 인터넷 연결을 허용하고, Azure NAT Gateway를 사용하여 노드 풀에서 Pod의 원본 IP를 수정하고, NSG를 사용하여 노드 풀 간의 트래픽을 필터링하는 등의 많은 유용한 시나리오가 가능해 집니다.
- Kubernetes 네트워크 정책: Azure 네트워크 정책 및 Calico는 모두 이 새 솔루션으로 작동합니다.
이 문서에서는 AKS에서 Azure CNI Pod 서브넷 - 동적 IP 할당 및 향상된 서브넷 지원을 사용하는 방법을 보여 줍니다.
Prerequisites
Review the prerequisites for configuring basic Azure CNI networking in AKS, as the same prerequisites apply to this article.
Review the deployment parameters for configuring basic Azure CNI networking in AKS, as the same parameters apply.
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
Pod 서브넷을 사용하는 클러스터의 노드당 최대 Pod - 동적 IP 할당 및 향상된 서브넷 지원
Azure CNI Pod 서브넷을 사용하는 경우 노드당 Pod 값 - 동적 IP 할당은 기존 CNI 동작과 약간 다릅니다.
| CNI | Default | 배포 시 구성 가능 |
|---|---|---|
| 기존 Azure CNI | 30 | 예(최대 250) |
| Azure CNI Pod 서브넷 - 동적 IP 할당 | 250 | 예(최대 250) |
노드당 최대 Pod 수를 구성하는 것과 관련된 다른 모든 지침은 동일하게 유지됩니다.
Deployment parameters
The deployment parametersfor configuring basic Azure CNI networking in AKS are all valid, with two exceptions:
- The subnet parameter now refers to the subnet related to the cluster's nodes.
- An additional parameter pod subnet is used to specify the subnet whose IP addresses will be dynamically allocated to pods.
Pod 서브넷 구성 - 동적 IP 할당 및 향상된 서브넷 지원 - Azure CLI
Pod 서브넷 사용 - 클러스터에서 동적 IP 할당 및 향상된 서브넷 지원은 클러스터 Azure CNI를 구성하기 위한 기본 방법과 유사합니다. 다음 예제에서는 노드용 서브넷과 Pod용 서브넷을 사용하여 새 가상 네트워크를 만들고 Azure CNI Pod 서브넷 - 동적 IP 할당 및 향상된 서브넷 지원을 사용하는 클러스터를 만드는 방법을 안내합니다. $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 파일 가져오기
Download or grep the file named container-azm-ms-agentconfig.yaml from GitHub.
통합에서
azure_subnet_ip_usage를 찾습니다.enabled를true로 설정합니다.파일을 저장합니다.
AKS 자격 증명 가져오기
구독, 리소스 그룹 및 클러스터에 대한 변수를 설정합니다. 다음을 예제로 고려합니다.
az account set --subscription $SUBSCRIPTION
az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP_NAME
구성 적용
- Open the terminal in the folder in which the downloaded container-azm-ms-agentconfig.yaml file is saved.
kubectl apply -f container-azm-ms-agentconfig.yaml명령을 사용하여 구성을 적용합니다. 그러면 Pod가 다시 시작되고 5-10분 후에 메트릭이 표시됩니다.- Azure Portal의 클러스터 페이지에서 Workbooks로 이동하여 클러스터의 메트릭을 보고 서브넷 IP 사용량이라는 통합 문서를 찾습니다.
Azure CNI Pod 서브넷 - 동적 IP 할당 및 향상된 서브넷 지원 FAQ
클러스터/노드 풀에 여러 Pod 서브넷을 할당할 수 있나요?
하나의 서브넷만 클러스터 또는 노드 풀에 할당할 수 있습니다. 그러나 여러 클러스터 또는 노드 풀은 단일 서브넷을 공유할 수 있습니다.
전부 다른 VNet의 Pod 서브넷을 할당할 수 있나요?
아니요, Pod 서브넷은 클러스터와 동일한 VNet에 속해야 합니다.
다른 클러스터가 새 CNI를 사용하는 동안 클러스터의 일부 노드 풀에서 기존 CNI를 사용할 수 있나요?
전체 클러스터는 하나의 CNI 유형만 사용해야 합니다.
Next steps
AKS의 네트워킹에 대한 자세한 내용은 다음 문서를 참조하세요.
Azure Kubernetes Service