Issues with Tunnel Server

Incident Report for Signadot

Postmortem

Postmortem: Cluster connectivity outage, September 24, 2026

Duration: 21:43 to 23:15 UTC (about 92 minutes) Status page: Incident report

Summary

On September 24, 2026, clusters connected to Signadot lost their connection to the Signadot control plane for about 92 minutes, and sandbox creation failed during that window. A control plane release that day included an upgrade to Go 1.27. A behavior change in Go 1.27's HTTP client caused an internal health check to leak connections until the service that maintains cluster connections ran out of resources. We restored service by rolling back the release, and have since shipped a fix.

We're sorry for the disruption this caused.

What happened

For over a year, an internal health check had opened a connection on each run and closed it without reading the full response. Under earlier Go versions, that closed the connection. Go 1.27 instead keeps the connection open for reuse, and since the health check never reused it, every run leaked one.

The leak began when the release rolled out and grew steadily until the affected service ran out of resources and clusters lost connectivity.

Timeline (UTC, September 24)

Time Event 20:03 Control plane release rolls out. The leak begins. 21:43 Clusters lose connectivity. 23:04 Release rolled back. 23:09 Root cause identified. 23:15 Connectivity restored.

A fix was merged on September 25 and shipped in a follow-up release.

What we found

  • A toolchain upgrade changed the behavior of unchanged code. Our pre-release testing didn't run at production scale, so the leak grew too slowly there to notice.
  • A missing resource limit turned a leak into an outage. With a limit in place, the leak would have caused a quick restart instead.
  • We needed better health signals. Alerting on resource usage and cluster connections would have flagged the leak well before it became an outage.
  • The same pattern existed elsewhere, including in software that runs in customer clusters. None of it had shipped with Go 1.27, so it was never affected, and it is now fixed.

What we've done

  • Fixed the health check, with a regression test that fails on Go 1.27 without the fix.
  • Found and fixed the same pattern across our other components before any affected release shipped.
  • Added a resource limit so a similar leak is contained to a quick restart.
  • Re-released the control plane with the fix and monitored it closely.

For a more detailed postmortem, please contact us.

Posted Oct 16, 2026 - 19:55 UTC

Resolved

This incident has been resolved by reverting our latest release. A full post-mortem and RCA will follow.
Posted Sep 24, 2026 - 23:24 UTC

Monitoring

A fix has been implemented and we are monitoring the results.
Posted Sep 24, 2026 - 23:20 UTC

Investigating

We are currently investigating this issue.
Posted Sep 24, 2026 - 22:46 UTC
This incident affected: API & Control Plane (Cluster Control Plane).