Skip to content
🎉 Launch sale:50% off everything over $22 — automatically applied at checkout· ends Aug 2Shop the sale →
DevOps AI ToolKit
Newsletter
All guides
AWS with AI By James Joyner IV · · 9 min read Last reviewed Jul 2026

AWS Error: EKS worker nodes stuck in 'NotReady' — Cause, Fix, and Troubleshooting Guide

Quick answer

Fix EKS nodes stuck NotReady: broken aws-node CNI, missing node IAM policies, security-group gaps to the control plane, and subnet IP exhaustion.

  • #aws
  • #cloud
  • #troubleshooting
  • #errors
  • #eks
Free toolkit

Stuck on this AWS with AI error? Get the free incident triage checklist

A one-page PDF — the exact steps to isolate, fix, and verify a production error like this one. No spam, unsubscribe anytime.

Overview

A Kubernetes node reports Ready only after its kubelet registers with the control plane, the CNI (on EKS, the aws-node VPC CNI) initializes pod networking, and no node-level pressure conditions are set. When any of those fail, the node registers but stays NotReady, so the scheduler won’t place pods on it and workloads stay Pending.

You will see it from kubectl:

NAME                            STATUS     ROLES    AGE   VERSION
ip-10-0-3-51.ec2.internal       NotReady   <none>   6m    v1.29.6-eks-REDACTED

kubectl describe node shows the underlying condition, e.g.:

Ready   False   KubeletNotReady   container runtime network not ready: NetworkReady=false ... cni plugin not initialized

It occurs when the VPC CNI can’t run, the node’s IAM role lacks required policies, the node can’t reach the control-plane endpoint, or the subnet has no free IPs.

Symptoms

  • kubectl get nodes shows one or more nodes NotReady; pods stay Pending.
  • aws-node and/or kube-proxy pods are CrashLoopBackOff in kube-system.
  • The managed node group shows DEGRADED or nodes flap between Ready/NotReady.
  • New nodes from an autoscaler never become schedulable.

Common Root Causes

1. The VPC CNI (aws-node) can’t initialize

aws-node is crashing or can’t attach ENIs/IPs, so the node’s network never becomes ready.

2. The node IAM role is missing required policies

Nodes need AmazonEKSWorkerNodePolicy, AmazonEC2ContainerRegistryReadOnly, and AmazonEKS_CNI_Policy. Missing the CNI policy stops IP assignment.

3. Security groups / NACLs block the control plane

The node can’t reach the EKS API endpoint (443) or the control plane can’t reach the kubelet (10250), so registration/health checks fail.

4. Subnet IP exhaustion

The CNI can’t allocate secondary IPs/ENIs because the subnet is out of addresses.

5. Node pressure conditions

DiskPressure, MemoryPressure, or PIDPressure (e.g. a full disk on /var/lib/containerd) flip the node NotReady.

How to diagnose

Step 1: Read the node’s conditions and events

kubectl describe node ip-10-0-3-51.ec2.internal | sed -n '/Conditions:/,/Events:/p'

The Ready condition’s Reason/Message (CNI not initialized, disk pressure, kubelet stopped posting status) points at the layer to fix.

Step 2: Check the system daemonsets

kubectl get pods -n kube-system -o wide | grep -E 'aws-node|kube-proxy'
kubectl logs -n kube-system ds/aws-node -c aws-node --tail=50

CNI errors here (e.g. failed to assign an IP address) confirm networking or IAM/subnet causes.

Step 3: Verify the node role and networking

aws eks describe-nodegroup --cluster-name prod --nodegroup-name ng-1 \
  --query 'nodegroup.[nodeRole,health.issues]' --output json

ROLE=$(aws eks describe-nodegroup --cluster-name prod --nodegroup-name ng-1 \
  --query 'nodegroup.nodeRole' --output text | awk -F/ '{print $NF}')
aws iam list-attached-role-policies --role-name "$ROLE" --output table

Step 4: Check free IPs in the node subnets

aws ec2 describe-subnets --subnet-ids subnet-REDACTED \
  --query 'Subnets[].[SubnetId,AvailableIpAddressCount]' --output table

Fixes

Attach the missing node IAM policies

for p in AmazonEKSWorkerNodePolicy AmazonEC2ContainerRegistryReadOnly AmazonEKS_CNI_Policy; do
  aws iam attach-role-policy --role-name "$ROLE" --policy-arn arn:aws:iam::aws:policy/$p
done

Restore CNI networking

Ensure aws-node is healthy (update the VPC CNI add-on if outdated) and recycle affected nodes:

aws eks update-addon --cluster-name prod --addon-name vpc-cni --resolve-conflicts OVERWRITE
kubectl rollout restart ds/aws-node -n kube-system

Open control-plane connectivity and free up IPs

Allow node↔control-plane traffic (443 outbound to the cluster SG, 10250 inbound from it), and relieve exhaustion by adding a larger/second subnet or enabling prefix delegation on the CNI.

Clear disk pressure

Increase the node volume size in the launch template, or clean image/log buildup, then replace the node.

What to watch out for

  • The Ready condition message names the failing layer — always read it before guessing (CNI vs. disk vs. kubelet).
  • A missing AmazonEKS_CNI_Policy looks like a networking bug but is really IAM — check attached policies early.
  • IP exhaustion scales with pod density; prefix delegation or larger subnets prevents recurrence.
  • Nodes that pass registration but never go Ready are almost always CNI/IAM/SG, not the Kubernetes version.
Free download · 368-page PDF

Fixed it? Get 500 AWS with AI & DevOps AI prompts — free

500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.

  • 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
  • Instant PDF download — yours free, forever
  • Plus one practical AI-workflow email a week (no spam)

Single opt-in · unsubscribe anytime · no spam.

Did this fix your issue?

Free download · 368-page PDF

Get 500 Battle-Tested DevOps AI Prompts — Free

500 battle-tested, copy-paste AI prompts engineered by a senior systems engineer — every one with fill-in placeholders and safety/back-out notes. Drop your email and it's yours.

  • 500 prompts: Linux · Kubernetes · Terraform · OpenStack · GitLab · Docker · Monitoring · Incident Response
  • Instant PDF download — yours free, forever
  • Plus one practical AI-workflow email a week (no spam)

Single opt-in · unsubscribe anytime · no spam.