Kube-proxy or ELB delaying packets of HTTP requests
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Introduction
When HTTP requests look “delayed” in Kubernetes on AWS, the delay is usually not a component intentionally holding packets. More often it is queueing, connection reuse behavior, health-check transitions, overloaded pods, or node-level network pressure. kube-proxy and ELB are part of the traffic path, but you need to measure each hop before blaming either one.
Understand the Request Path First
A typical path is:
- client connects to an AWS load balancer
- the load balancer forwards to a node or directly to a target, depending on setup
- Kubernetes service routing sends traffic to a pod
- the application handles the request
A delay at any of those layers can feel identical from the client side.
That is why “ELB is delaying packets” and “kube-proxy is delaying packets” are usually hypotheses, not conclusions.
What kube-proxy Actually Does
kube-proxy programs service routing rules, commonly through iptables or IPVS. It is not an application proxy buffering HTTP bodies at Layer 7. Its job is to translate service traffic to backend pod endpoints.
That means typical Kubernetes-side causes are:
- a large or stale conntrack table
- overloaded nodes
- endpoint churn while pods are starting or failing
- uneven traffic distribution
- readiness probes marking pods unavailable too slowly or too late
In iptables mode, rules are kernel-level packet filters. In IPVS mode, service load balancing is often more efficient under larger endpoint counts, but either mode can still look slow if the node or pods are unhealthy.
What the AWS Load Balancer Might Be Doing
On AWS, the load balancer type matters:
- ALB works at Layer 7 and can show request-level timing metrics
- NLB works at Layer 4 and is closer to raw TCP forwarding
- Classic ELB is older and behaves differently from both
Perceived delay can come from:
- targets failing health checks and traffic being retried elsewhere
- idle timeout mismatches
- backend connections not being accepted quickly
- cross-zone traffic or target scarcity during scaling events
Again, this is usually system behavior under conditions, not a hidden “delay packets” feature.
Measure Before You Guess
Start with observations at each layer.
Check Kubernetes endpoints and pod readiness:
Check whether the node is under connection-tracking pressure:
Check the application response time directly from inside the cluster:
If in-cluster timing is already high, the problem is likely not the external load balancer.
Common Real Causes
In practice, these issues show up more often than a kube-proxy bug:
- application threads are saturated, so requests wait before processing
- readiness probes allow traffic before the app is actually warm
- a few pods are hot while others are idle
- conntrack tables are near capacity on busy nodes
- keep-alive, idle timeout, or retry settings are mismatched between client, load balancer, and app
Notice that none of those require packet delay as an explicit feature. They create delay as an emergent effect.
When To Suspect the Networking Layer
Only after you rule out application latency should you focus on the networking layer itself. Stronger indicators include:
- retransmissions visible in packet captures
- sudden spikes tied to node changes or service rule updates
- clear improvement when switching service mode or node type
- cluster-wide symptoms across multiple unrelated services
At that point, compare node metrics, load balancer metrics, and app timings side by side.
Common Pitfalls
- Calling any latency symptom a
kube-proxyor ELB delay without measuring the application first. - Ignoring readiness and health-check behavior during deployments.
- Looking only at client-side latency and not at in-cluster timings.
- Forgetting that ALB, NLB, and Classic ELB have different behavior and metrics.
- Assuming
kube-proxyis an HTTP-aware component when it usually is not.
Summary
- '
kube-proxyand ELB are part of the request path, but neither should be blamed without measurements.' - Most “packet delay” reports are really queueing, retries, health-check churn, or backend slowness.
- Measure service endpoints, pod readiness, conntrack pressure, and in-cluster latency first.
- Load balancer type matters because ALB, NLB, and Classic ELB behave differently.
- Treat the problem as end-to-end latency analysis, not as a search for one guilty component.
Related reading
- Kubectl error memcache.go265 couldn’t get current server API group list Get
- kubectl expose --typeLoadBalancer not working
- kubectl proxy unauthorized when accessing from another machine
- Kubernetes - How to know latest supported API version
- kubeadm init shows kubelet isn't running or healthy
- kubectl attach Unable to use a TTY - container es-node did not allocate one
- Kubernetes - Pass Public IP of Load Balance as Environment Variable into Pod
- Kubernetes - resolve hostname of a service

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.