$ -weight: 500;">curl -fsSL https://tailscale.com/-weight: 500;">install.sh | sh -weight: 600;">sudo tailscale up --ssh
-weight: 500;">curl -fsSL https://tailscale.com/-weight: 500;">install.sh | sh -weight: 600;">sudo tailscale up --ssh
-weight: 500;">curl -fsSL https://tailscale.com/-weight: 500;">install.sh | sh -weight: 600;">sudo tailscale up --ssh - Server node: old Ivy Bridge desktop, Intel i7-3770K (2012), 32 GB RAM, RTX 2060 12 GB for future PyTorch workloads. Ethernet connection to a 1 Gb switch.
- Worker node: GEEKOM A8 Mini PC, AMD Ryzen 7 8745HS (Zen 4, 8c/16t, 28 W TDP), 32 GB RAM, 1 TB NVMe SSD. Ethernet on the same switch.
- Laptop: HP Pavilion Gaming running Ubuntu 24.04, my main workstation. - Run -weight: 500;">kubectl get pods from anywhere
- SSH into the nodes to debug
- Without opening port 6443 or port 22 on my home router - Manual site-to-site VPN like WireGuard: homegrown config, key generation, peer propagation, MTU tuning. Feasible but time‑consuming.
- Publicly exposed bastion: one node accessible via public SSH, the rest behind it. Increases the attack surface, not interested.
- Managed mesh VPN: Tailscale, Twingate, NetBird. Tailscale is free up to 100 personal devices, based on WireGuard under the hood, and installs in 5 minutes. - My two nodes are physically on the same 1 Gb switch. The Kubernetes data plane (pod‑to‑pod traffic, kubelet‑to‑API‑server) benefits from native throughput, without WireGuard overhead or reduced MTU.
- If Tailscale goes down or Tailscale’s control plane has an incident (rare but it happens), my cluster keeps running. The decoupling of the admin control plane / K8s data plane is intentional.
- Tailscale remains useful for what it’s best at: giving me encrypted access to my cluster from anywhere, without hacks. - If I add a third node outside the LAN (at a friend’s house, on a cloud), I will have to switch to --flannel-iface=tailscale0 because the nodes will no longer be able to reach each other directly.
- No encryption of intra‑cluster network traffic. For a personal homelab, that’s fine. For multi‑site production, it is not acceptable.
- MagicDNS does not mix with the cluster’s CoreDNS. My pods resolve their services via Kubernetes CoreDNS, my laptop resolves hostnames via MagicDNS. No cross‑pollution, but this needs to be understood.