Senior DevOps Engineer
Gourav specializes in helping organizations design secure and scalable Kubernetes infrastructures on AWS.
When running scaled Kubernetes workloads on Amazon EKS, you inevitably hit an IP address exhaustion issue. To keep clusters growing, AWS introduced a vital feature in the Amazon VPC CNI plugin: prefix delegation.
Instead of a node's Elastic Network Interface (ENI) requesting a single IP for every pod, the ENI is assigned an entire block of addresses, a prefix, typically a /28. This significantly accelerates pod IP assignment and boosts scalability.
But what happens when the system fails? We recently encountered a puzzling customer issue where pods could not obtain or maintain client IP addresses, despite the AWS console reporting a high number of available addresses. The catch is that the console shows the number of free individual IPs, not whether those addresses can form usable /28 prefix blocks. Scattered leftover IPs are useless if they cannot form a contiguous block. The pods were stuck in Pending, a classic symptom of IP shortage, yet the numbers contradicted the error.
This post details the debugging journey, from understanding the relationship between /25 and /28 subnets to uncovering the hidden root cause: subnet fragmentation.
Here was the setup and the confusing symptoms we faced:
The immediate conclusion was an IP shortage, but the official metrics suggested otherwise. This meant the visible IP count was a deceptive metric, requiring a deeper look into how prefixes are allocated.
To understand the problem, you must think in terms of address blocks, not individual IPs.
The /25 and /28 Interaction
The CIDR (Classless Inter-Domain Routing) notation defines the size of an IP address range.

A /25 subnet (128 total IPs) can be perfectly divided into eight distinct /28 blocks (16 IPs each).
The critical realization here is that prefix delegation does not assign single IPs; it allocates entire, contiguous /28 chunks to the ENIs.
This was the key insight: The customer's subnet had many free, scattered individual IPs, but these leftover addresses were useless if a clean, contiguous /28 block was not available. The remaining free IPs were too fragmented to form a full block.
Solving this required a methodical approach to eliminate common Amazon EKS issues, such as traffic spikes, and isolate the root cause.
After ruling out the standard culprits, we hypothesized: The issue isn't the total count of free IPs; it's the availability of contiguous /28 blocks. The subnet was suffering from fragmentation.
The Script That Revealed the Truth
To prove the hypothesis, we needed to see every IP currently attached to an ENI within the subnet. We used a simple AWS CLI script:

Running this script confirmed the hypothesis: The allocated IPs were scattered across the subnet's range, consuming portions of all eight potential /28 blocks. Subnet fragmentation was confirmed. Zero full, intact /28 blocks remained for a new ENI to be allocated.
The root cause was definitive: Subnet fragmentation had made all remaining IPs unusable for prefix delegation.
We worked with the customer on two main solutions:
Once a clean /28 block was made available, the prefix delegation mechanism immediately worked, and pods began acquiring IPs without further issues.
If you use prefix delegation in Amazon EKS, your real bottleneck is not "free IP count." It is "available block count."
Speak with our advisors to learn how you can take control of your Cloud Cost