해당 IP 는 노드의 공인 IP 임을 확인할 수 있습니다. 만약 Private Subnet 에 배포된 노드라면 NAT IP 를 사용한다는 것을 알 수 있습니다.
3. VPC CNI 의 Pod 제한
VPC CNI 의 특징에 의해 , EC2 인스턴스 타입별 ENI 최대 개수와 할당 가능한 최대 IP 개수에 의해 파드 개수가 결정됩니다.
인스턴스 타입별 최대 ENI 개수와 IP 개수는 아래 공식 문서에서 확인할 수 있습니다.
Max Pod 공식은 다음과 같습니다.
( MaxENI * (IPv4addr-1) + 2 )
ENI 당 할당 가능한 최대 IP 개수를 곱하되, 첫 번째 IP 는 Node 의 IP 이므로, Pod 가 할당되지 않습니다. 또한 , aws-node 와 kube-proxy Pod 는 host-networking 을 사용하므로 별도의 VPC IP 가 필요하지 않아 2개를 더해주게 됩니다.
4. VPC CNI Pod 제한 해결
VPC CNI Pod 제한을 해결할 수 있는 방안으로는 Prefix Delegation, WARM & MIN IP/Prefix Target , Custom Network 등이 있습니다.
4.1. Prefix Delegation
AWS Docs
EC2 인스턴스의 ENI Prefix 할당 모드를 통해 더 많고 탄력적인 IP 를 가질 수 있게 되었습니다. 이 기능은 AWS Nitro 기반의 EC2 인스턴스 유형일 경우에만 사용 가능합니다.
접두사 할당모드를 활성화 시키기 위해서는 앞서 우리가 보았던 AWS Node 의 옵션 중 ENABLE_PREFIX_DELEGATION 옵션을 활성화 시켜야 합니다.
kubectl set env daemonset aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true
기존의 IP 할당 방식과 다른 점은 , ENI 에 개별 Secondary IP 가 부여되지 않고 /28 의 범위의 IP 대역이 부여된다는 것입니다.
해당 옵션을 활성화 했다면 실제 Pod 를 여러개 배포해봅시다.
먼저, 쿠버네티스에 limitranges 정책이 걸려있는지 확인합니다.
kubectl describe limitranges
쿠버네티스 상에 올라오는 컨테이너의 성능을 보장하기 위해 컨테이너 당 최소 0.1CPU 를 사용하도록 보장해주는 정책입니다. 실습이니 해당 정책을 삭제합니다.