From fa3fbfb0a562be8b52d7f7a473adf6875c6eb58c Mon Sep 17 00:00:00 2001 From: Xe Iaso Date: Wed, 9 Jul 2025 10:56:12 -0400 Subject: [PATCH] feat(blog): incident report for TI-20250709-0001 (#795) * feat(blog): incident report for TI-20250709-0001 Signed-off-by: Xe Iaso * chore: spelling check-spelling run (pull_request) for Xe/TI-20250709-0001 Signed-off-by: check-spelling-bot on-behalf-of: @check-spelling * fix(blog/TI-20250709-0001): add TecharoHQ/anubis#794 Signed-off-by: Xe Iaso * fix(blog/TI-20250709-0001): amend grammar Signed-off-by: Xe Iaso --------- Signed-off-by: Xe Iaso Signed-off-by: check-spelling-bot --- .github/actions/spelling/expect.txt | 3 + .../blog/2025-07-09-incident-report/index.mdx | 105 ++++++++++++++++++ .../window-portal.jpg | Bin 0 -> 31259 bytes 3 files changed, 108 insertions(+) create mode 100644 docs/blog/2025-07-09-incident-report/index.mdx create mode 100644 docs/blog/2025-07-09-incident-report/window-portal.jpg diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt index 228e576..5ec204a 100644 --- a/.github/actions/spelling/expect.txt +++ b/.github/actions/spelling/expect.txt @@ -147,6 +147,7 @@ Imagesift imgproxy impressum inp +internets IPTo iptoasn iss @@ -312,6 +313,8 @@ Velen vendored vhosts videotest +VKE +Vultr waitloop weblate webmaster diff --git a/docs/blog/2025-07-09-incident-report/index.mdx b/docs/blog/2025-07-09-incident-report/index.mdx new file mode 100644 index 0000000..d42e1ed --- /dev/null +++ b/docs/blog/2025-07-09-incident-report/index.mdx @@ -0,0 +1,105 @@ +--- +slug: incident/TI-20250709-0001 +title: "TI-20250709-0001: IPv4 traffic failures for Techaro services" +authors: [xe] +tags: [incident] +image: ./window-portal.jpg +--- + +![](./window-portal.jpg) + +Techaro services were down for IPv4 traffic on July 9th, 2025. This blogpost is a report of what happened, what actions were taken to resolve the situation, and what actions are being done in the near future to prevent this problem. Enjoy this incident report! + +{/* truncate */} + +:::note + +In other companies, this kind of documentation would be kept internal. At Techaro, we believe that you deserve radical candor and the truth. As such, we are proving our lofty words with actions by publishing details about how things go wrong publicly. + +Everything past this point follows my standard incident root cause meeting template. + +::: + +This incident report will focus on the services affected, timeline of what happened at which stage of the incident, where we got lucky, the root cause analysis, and what action items are being planned or taken to prevent this from happening in the future. + +## Timeline + +All events take place on July 9th, 2025. + +| Time (UTC) | Description | +| :--------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 12:32 | Uptime Kuma reports that another unrelated website on the same cluster was timing out. | +| 12:33 | Uptime Kuma reports that Thoth's production endpoint is failing gRPC health checks. | +| 12:35 | Investigation begins, [announcement made on Xe's Bluesky](https://bsky.app/profile/xeiaso.net/post/3ltjtdczpwc2x) due to the impact including their personal blog. | +| 12:39 | `nginx-ingress` logs on the production cluster show IPv6 traffic but an abrupt cutoff in IPv4 traffic around 12:32 UTC. Ticket is opened with the hosting provider. | +| 12:41 | IPv4 traffic resumes long enough for Uptime Kuma to report uptime, but then immediately fails again. | +| 12:46 | IPv4 traffic resumes long enough for Uptime Kuma to report uptime, but then immediately fails again. (repeat instances of this have been scrubbed, but it happened about every 5-10 minutes) | +| 12:48 | First reply from the hosting provider. | +| 12:57 | Reply to hosting provider, ask to reboot the load balancer. | +| 13:00 | Incident responder because busy due to a meeting under the belief that the downtime was out of their control and that uptime monitoring software would let them know if it came back up. | +| 13:20 | Incident responder ended meeting and went back to monitoring downtime and preparing this document. | +| 13:34 | IPv4 traffic starts to show up in the `ingress-nginx` logs. | +| 13:35 | All services start to report healthy. Incident status changes to monitoring. | +| 13:48 | Incident closed. | +| 14:07 | Incident re-opened. Issues seem to be manifesting as BGP issues in the upstream provider. | +| 14:10 | IPv4 traffic resumes and then stops. | +| 14:18 | IPv4 traffic resumes again. Incident status changes to monitoring. | +| 14:40 | Incident closed. | + +## Services affected + +| Service name | User impact | +| :-------------------------------------------------- | :----------------- | +| [Anubis Docs](https://anubis.techaro.lol) (IPv4) | Connection timeout | +| [Anubis Docs](https://anubis.techaro.lol) (IPv6) | None | +| [Thoth](/docs/admin/thoth/) (IPv4) | Connection timeout | +| [Thoth](/docs/admin/thoth/) (IPv6) | None | +| Other websites colocated on the same cluster (IPv4) | Connection timeout | +| Other websites colocated on the same cluster (IPv6) | None | + +## Root cause analysis + +In simplify server management, Techaro runs a [Kubernetes](https://kubernetes.io/) cluster on [Vultr VKE](https://www.vultr.com/kubernetes/) (Vultr Kubernetes Engine). When you do this, Vultr needs to provision a [load balancer](https://docs.vultr.com/how-to-use-a-vultr-load-balancer-with-vke) to bridge the gap between the outside world and the Kubernetes world, kinda like this: + +```mermaid +--- +title: Overall architecture +--- + +flowchart LR + UT(User Traffic) + subgraph Provider Infrastructure + LB[Load Balancer] + end + subgraph Kubernetes + IN(ingress-nginx) + TH(Thoth) + AN(Anubis Docs) + OS(Other sites) + + IN --> TH + IN --> AN + IN --> OS + end + + UT --> LB --> IN +``` + +Techaro controls everything inside the Kubernetes side of that diagram. Anything else is out of our control. That load balancer is routed to the public internet via [Border Gateway Protocol (BGP)](https://en.wikipedia.org/wiki/Border_Gateway_Protocol). + +If there is an interruption with the BGP sessions in the upstream provider, this can manifest as things either not working or inconsistently working. This is made more difficult by the fact that the IPv4 and IPv6 internets are technically separate networks. With this in mind, it's very possible to have IPv4 traffic fail but not IPv6 traffic. + +The root cause is that the hosting provider we use for production services had flapping IPv4 BGP sessions in its Toronto region. When this happens all we can do is open a ticket and wait for it to come back up. + +## Where we got lucky + +The Uptime Kuma instance that caught this incident runs on an IPv4-only network. If it was dual stack, this would not have been caught as quickly. + +The `ingress-nginx` logs print IP addresses of remote clients to the log feed. If this was not the case, it would be much more difficult to find this error. + +## Action items + +- A single instance of downtime like this is not enough reason to move providers. Moving providers because of this is thus out of scope. +- Techaro needs a status page hosted on a different cloud provider than is used for the production cluster (`TecharoHQ/TODO#6`). +- Health checks for IPv4 and IPv6 traffic need to be created (`TecharoHQ/TODO#7`). +- Remove the requirement for [Anubis to pass Thoth health checks before it can start if Thoth is enabled](https://github.com/TecharoHQ/anubis/pull/794). diff --git a/docs/blog/2025-07-09-incident-report/window-portal.jpg b/docs/blog/2025-07-09-incident-report/window-portal.jpg new file mode 100644 index 0000000000000000000000000000000000000000..04647cf343c74f36a905cfac823d1685e48c6f76 GIT binary patch literal 31259 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