Incident Library
  • Root cause
  • Component
  • Symptom
  • Contributing factor
  • Case

Cases1 case

1 to 1 of 1

  1. Symptoms

    Between 23:30 UTC on 1 November and 1:10 UTC on 2 November 2025, both the Healthchecks.io website (healthchecks.io) and the ping endpoints (hc-ping.com) had intermittent connectivity problems: some requests took several seconds to finish and others timed out entirely. The load balancers were running out of connection slots and rejecting legitimate requests, and Healthchecks.io users received false monitoring alerts.

    Trigger

    A misconfigured client flooded the ping endpoint, raising requests for a single UUID from 10 to a sustained 300 requests per second.

    Root cause
    Component
    Contributing factor
    Detection

    Monitoring notifications woke the operator at 00:11 UTC.

    Remediation
    • Identified the offending client addresses, a single IPv4 address and a /64 IPv6 subnet
    • Changed the load balancer configuration to reject TCP requests from those addresses
    Action items
    • Rate-limit with HTTP 429 returned immediately (the "Deny" method) instead of the "tarpit" method
    • Add the missing timeout http-request 5s to the HAProxy configuration to guard against Slowloris attacks
    • Increase the maxconn parameter in the HAProxy configuration
    • Apply the load balancer rate-limiting rules to the hchk.io endpoints as well as hc-ping.com
    • Add a Netdata alert when active HAProxy frontend sessions pass thresholds well below maxconn
    • Change the HAProxy logging format to make the logs easier to use
    Lessons

    The tarpit rate-limiting method only slows clients that make requests one after another; a client sending many requests in parallel is not slowed, and the sockets held during the wait can exhaust the load balancer's connection slots. The operator called it one more lesson learned and switched rate-limited requests to the "Deny" method.

Check your cluster for this

This case involves HAProxy. 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