Azure CNI(Container Networking Interface) Pod 서브넷
Azure CNI Pod 서브넷은 클러스터 노드의 별도의 서브넷의 Pod에 IP 주소를 할당합니다. 이 기능은 동적 IP 할당 및 정적 블록 할당(미리 보기)의 두 가지 모드에서 사용할 수 있습니다.
필수 조건
참고 항목
CIDR의 정적 블록 할당을 사용하는 경우 Kubernetes Load Balancer 서비스를 사용하여 애플리케이션을 Private Link 서비스로 노출하는 것은 지원되지 않습니다.
이 문서에도 동일한 필수 조건이 적용되므로 AKS에서 기본 Azure CNI 네트워킹을 구성하기 위한 필수 조건을 검토합니다.
AKS에서 기본 Azure CNI 네트워킹을 구성하려면 동일한 매개 변수가 적용되므로 배포 매개 변수를 검토합니다.
AKS 엔진 및 DIY 클러스터는 지원하지 않습니다.
Azure CLI 버전
2.37.0
이상 및aks-preview
확장 버전2.0.0b2
이상.구독에 대한 구독 수준 기능 플래그인 'Microsoft.ContainerService/AzureVnetScalePreview'를 등록합니다.
기존 클러스터가 있는 경우 IP 서브넷 사용량 추가 항목을 모니터링할 수 있도록 컨테이너 인사이트를 사용하도록 설정해야 합니다. 다음 예제와 같이
az aks enable-addons
명령을 사용하여 컨테이너 인사이트를 사용하도록 설정할 수 있습니다.az aks enable-addons --addons monitoring --name <cluster-name> --resource-group <resource-group-name>
동적 IP 할당 모드
동적 IP 할당은 AKS 클러스터를 호스팅하는 서브넷과는 별개인 서브넷에서 Pod IP를 할당하여 Pod IP 주소 고갈 문제를 완화하는 데 도움이 됩니다.
동적 IP 할당 모드는 다음과 같은 이점을 제공합니다.
- IP 사용률 향상: IP가 Pod 서브넷에서 클러스터 Pod으로 동적으로 할당됩니다. 이로 인해 모든 노드에 대해 IP의 정적 할당을 수행하는 기존 CNI 솔루션과 비교하여 클러스터의 IP 사용률이 향상됩니다.
- 확장성 및 유연성: 노드 및 Pod 서브넷은 독립적으로 크기를 조정할 수 있습니다. 단일 Pod 서브넷은 클러스터의 여러 노드 풀에서 또는 동일한 VNet에 배포된 여러 AKS 클러스터에서 공유할 수 있습니다. 또한 노드 풀에 대해 별도의 Pod 서브넷을 구성할 수 있습니다.
- 고성능: Pod가 VNet IP를 할당받으므로 VNet의 다른 클러스터 Pod 및 리소스에 직접 연결됩니다. 솔루션은 성능 저하 없이 매우 큰 클러스터를 지원합니다.
- Pod에 대한 별도 VNet 정책: Pod에 별도의 서브넷이 있으므로 노드 정책과 다른 별도의 VNet 정책을 구성할 수 있습니다. 이를 통해 노드가 아닌 Pod에 대해서만 인터넷 연결을 허용하고, Azure NAT Gateway를 사용하여 노드 풀에서 Pod의 원본 IP를 수정하고, NSG(네트워크 보안 그룹)를 사용하여 노드 풀 간의 트래픽을 필터링하는 등의 많은 유용한 시나리오가 가능해 집니다.
- Kubernetes 네트워크 정책: Azure 네트워크 정책 및 Calico는 모두 이 모드로 작동합니다.
IP 주소 지정 계획
동적 IP 할당을 사용하면 노드와 Pod가 독립적으로 확장되므로 주소 공간을 별도로 계획할 수 있습니다. Pod 서브넷은 노드 풀의 세분성으로 구성될 수 있으므로 노드 풀을 추가할 때 언제든지 새 서브넷을 추가할 수 있습니다. 클러스터/노드 풀의 시스템 Pod는 Pod 서브넷에서 IP를 수신하기 때문에 이 동작을 고려해야 합니다.
IP는 16개의 일괄 처리로 노드에 할당됩니다. Pod 서브넷 IP 할당은 클러스터의 노드당 최소 16 IP로 계획해야 합니다. 이는 노드가 시작 시 16개의 IP를 요청하고 할당에 할당되지 않은 <8개의 IP가 있을 때마다 16개의 또 다른 일괄 처리를 요청하기 때문입니다.
Kubernetes 서비스 및 Docker 브리지에 대한 IP 주소 계획은 변경되지 않습니다.
정적 블록 할당 모드(미리 보기)
정적 블록 할당은 개별 IP가 아닌 노드에 CIDR 블록을 할당하여 잠재적인 Pod 서브넷 크기 조정 및 Azure 주소 매핑 제한을 완화하는 데 도움이 됩니다.
정적 블록 할당 모드는 다음과 같은 이점을 제공합니다.
- 향상된 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는 이 솔루션을 사용합니다.
제한 사항
다음은 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 주소 지정 계획
정적 블록 할당을 사용하면 노드와 Pod가 독립적으로 확장되므로 주소 공간을 별도로 계획할 수 있습니다. Pod 서브넷은 노드 풀의 세분성으로 구성될 수 있으므로 노드 풀을 추가할 때 언제든지 새 서브넷을 추가할 수 있습니다. 클러스터/노드 풀의 시스템 Pod는 Pod 서브넷에서 IP를 수신하기 때문에 이 동작을 고려해야 합니다.
노드당 최대 Pod 수를 정의하는 노드 풀에 대한 --max-pods
구성에 따라 /28(16개 IP)의 CIDR 블록이 노드에 할당됩니다. 내부 목적을 위해 해당 노드의 사용 가능한 모든 IP에서 각 노드에 1개의 IP가 예약되어 있습니다.
IP를 계획하는 동안 max_pods_per_node = (16 * N) - 1
(N
은 0
보다 큰 양의 정수) 계산을 사용하여 --max-pods
구성을 정의하는 것이 중요합니다.
IP 낭비가 없는 이상적인 값은 위의 식을 준수하기 위해 최대 Pod 값이 필요합니다.
다음 예제 사례를 참조하세요.
예제 사례 | max_pods |
노드당 할당된 CIDR 블록 | Pod에 사용할 수 있는 총 IP | 노드에 대한 IP 낭비 |
---|---|---|---|---|
낮은 낭비(허용 가능) | 30 | 2 | (16 * 2) - 1 = 32 - 1 = 31 | 31 - 30 = 1 |
이상적인 사례 | 31 | 2 | (16 * 2) - 1 = 32 - 1 = 31 | 31 - 31 = 0 |
높은 낭비(권장되지 않음) | 32 | 3 | (16 * 3) - 1 = 48 - 1 = 47 | 47 - 32 = 15 |
Kubernetes 서비스에 대한 IP 주소 계획은 변경되지 않습니다.
참고 항목
VNet에 클러스터의 규모를 지원하기에 충분히 크고 연속적인 주소 공간이 있는지 확인합니다.
Azure Kubernetes Service