We Dropped Harbor for Large Images. A Traefik Default Was the Cause.
I stopped pushing large images to Harbor because the pushes kept failing. The cause was a default in Traefik, which I had adopted only because ingress-nginx was retired. It took me a while to see that, and the reason is the useful part. Every metric I had said the system was healthy. The setup The cluster is new and runs on bare metal. Only HTTP and HTTPS need to be reachable from outside.…
The report details a technical issue faced during the migration of large image pushes from Harbor to Traefik in a newly established bare-metal cluster. The cluster utilized Cloudflare Tunnel for public accessibility, with Traefik acting as the ingress-nginx replacement, which was retired in March 2026. Initial upon migration, large images (over 100 MB) experienced intermittent failures during the push to Harbor, failing to meet the 60-second readTimeout set by Traefik's default configuration.
This default covered the entire request, including the body, and cut off parts that exceeded this limit, resulting in 504 Gateway Timeout errors. The problem was elusive as metrics showed no anomalies. However, after enabling detailed tracing in Traefik and Cloudflare, it was discovered that the failures were consistent with the readTimeout settings leading to partial uploads.
The resolution involved adjusting the Traefik entrypoint's readTimeout to 10 minutes (10m) for both web and websecure ports. This adjustment successfully allowed the large image pushes through without interruption, rectifying the issue. The incident highlights the importance of being aware of default timeout settings when adopting new components and the value of using traces to diagnose complex network issues.
Written by urgent.news from Dev.to's reporting — not their text. Machine-written — may contain errors; check the original before relying on it.