Skip to main content
In this guide, we’ll walk through how the AWS VPC CNI plugin assigns IPs to your EKS cluster’s nodes and pods. Each node and pod runs on Elastic Network Interfaces (ENIs) within the VPC subnets in their Availability Zone. Understanding this CNI integration helps you optimize pod density, avoid IP exhaustion, and fine-tune scaling parameters.
The image is a diagram illustrating how a Container Network Interface (CNI) works within a Virtual Private Cloud (VPC), showing a Kubernetes cluster with nodes connected to a subnet via Elastic Network Interfaces (ENIs) in an availability zone.

1. Confirm Your EKS Cluster

Start by verifying which EKS cluster is active:

2. Inspect VPCs and Subnets

It’s recommended to dedicate one VPC per EKS cluster to simplify IP management:
A /16 VPC block yields ~65,000 IPv4 addresses—enough for control plane, nodes, pods, and endpoints.
Running multiple clusters in a single VPC can lead to IP exhaustion. Always project your pod and node scale before choosing CIDR sizes.

3. List ENIs in the VPC

AWS attaches ENIs for both control-plane interfaces and worker-node networking. Use this table to distinguish primary vs. secondary ENIs:

4. Kubernetes Data Plane: Nodes & Pods

Verify that your nodes are Ready and system pods are running:
By default, EKS runs:
  • aws-node DaemonSet (VPC CNI plugin)
  • kube-proxy
  • coredns for DNS resolution

5. Examine the aws-node DaemonSet

Describe the DaemonSet to view replicas and container images:
Key fields:
  • Desired / Current / Ready pod counts
  • Init Container: aws-vpc-cni-init
  • Main Container: aws-node (configures ENIs, warm IP pools)
  • Sidecar: aws-eks-nodeagent (eBPF network policies)

6. aws-node Pod Spec Breakdown

Below is a trimmed excerpt of the DaemonSet pod spec:
Adjust environment variables like WARM_ENI_TARGET and WARM_PREFIX_TARGET to control how many spare IPs the plugin keeps ready.

7. View Init Container Logs

The init container seeds CNI binaries and tunes sysctls:
Sample output:

8. Inspect Node Network Interfaces

SSH into any worker node to see eth0 (primary) and secondary ENIs:
Typical output:
  • eth0: Node’s primary IP
  • eni…: Pod IPs handled by the CNI

9. Review Host CNI Configuration

The init container writes /etc/cni/net.d/10-aws.conflist on each node:
Key sections:
  • "type": "aws-cni" plugin
  • "vethPrefix": "eni"
  • "mtu": "9001"
  • Egress CNI stub

10. List CNI Plugin Binaries

CNI executables live under /opt/cni/bin on each node:
Examples include:
  • aws-cni
  • egress-cni
  • bridge, dhcp, host-local, bandwidth, firewall

11. Verify the aws-cni Binary

Confirm supported CNI versions using the help flag:
Output shows supported protocols:

Further Reading

Watch Video