Cases3 cases
1 to 3 of 3
IL-0445Chatwork's service on EKS became unstable as conntrack tables on some nodes overflowed and connections were droppedChatwork2021- Symptoms
In 2020 Chatwork moved its legacy system from EC2 to EKS, running both sides in parallel with Route53 weighted records. Once more than a certain share of requests was sent to the EKS side, the service suddenly became unstable. On some nodes the conntrack table had gone past its limit and connections to the application were being dropped.
- Trigger
During the migration from EC2 to EKS, Chatwork sent more than a certain share of requests to the EKS side. Later, applying node-local-dns with force_tcp in its configuration made DNS unstable again.
- Root cause
- Component
- Contributing factor
- Remediation
- Raised the conntrack maxPerCore value in the kube-proxy configuration
- Installed dns-autoscaler so CoreDNS ran with more pods
- Installed node-local-dns as a DaemonSet on every node
- Replaced force_tcp with prefer_udp in the node-local-dns configuration
- Lessons
On EKS, dns-autoscaler and node-local-dns made DNS stable, but node-local-dns must not use force_tcp there. Stable DNS also matters for sizing the number of pods correctly, since blocked DNS queries had made the pod count grow.
IL-0013The conntrack table filled up on downsized GKE nodes and a high-traffic aggregation proxy saw climbing connection resetsloveholidays2020- Symptoms
Shortly after a round of changes, loveholidays saw connectivity problems and raised error rates on its aggregation service. The service is a proxy between two other services of more than 100 instances each, handles over 10,000 requests per second continuously and can spike to four times that.
- Trigger
Three changes together: a change in service architecture, halving the RAM of the nodes that run the aggregation service, and sharding a downstream service, which doubled the number of connections to track.
- Root cause
- Component
- Contributing factor
- Detection
Rising error rates and climbing connection reset errors in HAProxy, then node_exporter conntrack metrics compared with their limit.
- Remediation
- moved the aggregation service to nodes with more RAM
- limited the number of aggregation service pods per node
- Action items
- Alert when conntrack table use goes above 75%, with (node_nf_conntrack_entries / on (pod) node_nf_conntrack_entries_limit / on (pod) group_right kube_pod_info) > 0.75
- Lessons
The conntrack limit is tied to node memory, so resizing a node pool silently resizes the connection table, and on GKE the ratio did not match the commonly cited formula. A high-traffic proxy on small nodes can exhaust it, and the symptoms are connection resets and timeouts, so conntrack use needs its own metric and alert.
IL-0033Uneven load across kube-dns pods and a DNS packets-per-second limit pushed service latency to 20 secondsAirbnb2019- Symptoms
On May 10 the latency graphs of several services showed a few spikes of up to about one second, then latency climbed to five seconds and then to 20 seconds, and it stayed there for a long time. The same pattern appeared on many services, not just one.
- Trigger
Several services sent a high volume of external DNS queries, all of which went through kube-dns.
- Root cause
- Component
- Contributing factor
- Detection
Latency graphs of several services showed the rise; engineers then looked at load per kube-dns pod.
- Lessons
By default a pod discovers DNS through the kube-dns cluster IP and uses the ClusterFirst policy, so even external lookups go through kube-dns. If a pod does not need cluster DNS, set its dnsPolicy to Default or None. Check the DNS policy early and often. iptables picks backends at random and is not a load balancer, so pods behind a cluster IP, kube-dns included, can carry very different loads.
These 3 cases involve kube-proxy and conntrack table. kubegap audits a Kubernetes cluster for gaps like these, read-only, from Claude Code or Codex; its checks cite public reports like the ones in this library.
By root cause1
Capacity exhaustion3 cases
- Component
- Contributing factor
- Organisation
IL-0445Chatwork's service on EKS became unstable as conntrack tables on some nodes overflowed and connections were droppedChatwork2021IL-0013The conntrack table filled up on downsized GKE nodes and a high-traffic aggregation proxy saw climbing connection resetsloveholidays2020IL-0033Uneven load across kube-dns pods and a DNS packets-per-second limit pushed service latency to 20 secondsAirbnb2019