Uncategorized

Headscale is amazing! 🚀

My Surprise Discovery: How Headscale Simplified Our GitHub Runner Connections

I’ll be the first to admit it: I was skeptical about trying yet another solution for connecting our GitHub-hosted runners to internal resources. But, after weeks of struggling with other options, we stumbled upon Headscale, and it’s been a total game-changer for our team.

We started our journey with Tailscale, which worked great initially, but the per-user pricing didn’t make sense for our scale. So, we moved on to Netbird, which required a lot of effort to set up and still didn’t quite meet our needs. The connections were slow, taking around 10-30 seconds to establish, and the MacOS client was unstable.

Our Search for a Reliable Solution

Next, we tried Netmaker, hoping it would be a plug-and-play alternative that we could host on Kubernetes. Unfortunately, despite significant effort, it couldn’t handle the large number of ephemeral runners we needed. It’s still in an early stage and not production-ready for our use case.

That’s when we decided to give Headscale a try. I had heard of it as a Tailscale drop-in replacement, but I wasn’t sure what to expect. We were also hesitant about its SQLite backend and the warnings against containerized setups. But, we were desperate for a solution that worked, so we decided to take the plunge.

Our Experience with Headscale

After a quick Kubernetes deployment and routing setup, we integrated Headscale into our GitHub Actions workflow. And, wow, were we impressed! Spinning up 200 ephemeral runners at once worked flawlessly, with connections establishing in under 4 seconds. It was like a breath of fresh air after weeks of struggling with other solutions.

What really surprised us was how well Headscale performed without any crazy optimizations. We had spent weeks tuning Netmaker and days tweaking Netbird, but Headscale just worked out of the box. It’s been a huge relief for our team, and we’re now able to focus on other important tasks.

Securing Our Setup

Now that we have Headscale up and running, we’re working on hardening our setup to ensure it’s secure. We’re using an AWS ALB to expose the Headscale controller, and we’re considering using WAF ACLs to secure our GitHub-hosted runners. If you have any experience with this, we’d love to hear your thoughts on the best way to secure our setup.

For now, we’re just enjoying the simplicity and reliability that Headscale has brought to our workflow. It’s amazing how something so simple can make such a big difference in our daily work.

Moje Zaskakujące Odkrycie: Jak Headscale Uprościło Połączenia Naszych Runnerów GitHub

Przyznaję, że byłem sceptyczny co do próbowania kolejnego rozwiązania dla połączeń naszych runnerów GitHub z zasobami wewnętrznymi. Ale po tygodniach walki z innymi opcjami, natknęliśmy się na Headscale, i okazało się, że to było rozwiązanie, którego potrzebowaliśmy.

Zaczęliśmy naszą przygodę z Tailscale, które początkowo działało świetnie, ale cena za użytkownika nie była dla nas opłacalna. Więc przenieśliśmy się do Netbird, które wymagało dużej ilości wysiłku, aby je ustawić, i nadal nie spełniało naszych potrzeb. Połączenia były wolne, zajmując około 10-30 sekund, aby się ustalić, a klient MacOS był niestabilny.

Nasza Wyszukiwarka Niezawodnego Rozwiązania

Następnie spróbowaliśmy Netmaker, mając nadzieję, że będzie to rozwiązanie plug-and-play, które możemy hostować na Kubernetes. Niestety, pomimo znacznych wysiłków, nie mogło poradzić sobie z dużą liczbą ephemeralnych runnerów, których potrzebowaliśmy. Jest to jeszcze we wczesnym stadium i nie jest gotowe do produkcji dla naszego przypadku użycia.

Wtedy postanowiliśmy spróbować Headscale. Słyszałem o nim jako o zastępniku Tailscale, ale nie wiedziałem, czego się spodziewać. Byliśmy również ostrzegani przed użyciem bazy danych SQLite i ostrzeżeniami przeciwko ustawieniom kontenerowym. Ale byliśmy desperacko szukający rozwiązania, które działa, więc postanowiliśmy zaryzykować.

Nasze Doświadczenie z Headscale

Po szybkiej wdrożeniu Kubernetes i ustawieniu routingu, zintegrowaliśmy Headscale z naszym workflow GitHub Actions. I, wow, byliśmy zaskoczeni! Uruchomienie 200 ephemeralnych runnerów na raz działało bezproblemowo, z połączeniami ustalającymi się w czasie krótszym niż 4 sekundy. Było to jak oddech świeżego powietrza po tygodniach walki z innymi rozwiązaniami.

Co nas najbardziej zaskoczyło, to jak dobrze Headscale działało bez żadnych szalonych optymalizacji. Spędziliśmy tygodnie na dostosowywaniu Netmaker i dni na adjustowaniu Netbird, ale Headscale po prostu działało od razu. Było to ogromne ulżenie dla naszego zespołu, i możemy teraz skupić się na innych ważnych zadaniach.

Zabezpieczanie Naszego Rozwiązania

Teraz, gdy mamy Headscale wdrożone, pracujemy nad zabezpieczeniem naszego rozwiązania, aby upewnić się, że jest ono bezpieczne. Używamy AWS ALB do eksponowania kontrolera Headscale, i rozważamy użycie WAF ACL, aby zabezpieczyć nasze GitHub-hostowane runnery. Jeśli masz jakieś doświadczenie z tym, bardzo chcielibyśmy usłyszeć Twoje myśli na temat najlepszego sposobu zabezpieczenia naszego rozwiązania.

Na razie cieszymy się prostotą i niezawodnością, którą Headscale wprowadziło do naszego workflow. To niesamowite, jak coś tak prostego może mieć tak duży wpływ na naszą codzienną pracę.

Leave a Reply

Your email address will not be published. Required fields are marked *

WordPress Appliance - Powered by TurnKey Linux