Projects About Writing Contact

I build things and
write about how they break.

NaviauxLab is where I document infrastructure experiments, homelab builds, and the lessons learned when things don't go according to plan. Mostly Kubernetes, networking, and automation. This site runs on the same cluster I'm writing about.

NL
I'm an infrastructure engineer who got tired of only building things for other people. NaviauxLab is my space to experiment with the tools and ideas I'm curious about — without a change management board or a 47-slide architecture review. Right now that means Kubernetes on bare metal, GitOps workflows, and figuring out how much enterprise-grade infrastructure you can run on a single laptop. Everything here is built, broken, fixed, and documented in real time.

What I'm exploring.

The things I'm spending my free time building, breaking, and thinking about.

Kubernetes on Bare Metal

Running a production-grade K8s cluster on a single laptop. Talos Linux, Cilium, Longhorn, Flux — the full stack, no managed services. Figuring out what breaks when you don't have a cloud provider safety net.

GitOps & Automation

Everything in Git, everything declarative. Flux watches the repo, SOPS encrypts the secrets, and the cluster converges to the desired state. The goal: change anything with a commit and a push.

🔒

Zero Trust Networking

Default-deny everything. CiliumNetworkPolicy for egress, standard NetworkPolicy for ingress, and the hard lesson that Cilium evaluates ports after DNAT. Every pod earns its network access.

📈

Observability

Prometheus, Grafana, Alertmanager, and Uptime Kuma. Building dashboards that actually tell you something useful, writing PromQL that doesn't lie, and monitoring the monitoring stack itself.

🛠

Self-Hosting

Running my own RSS reader, uptime monitor, and this portfolio site — all on the homelab cluster. Cloudflare Tunnel for public access with zero open ports. Owning the stack from DNS to disk.

📖

Documentation as Practice

Every stage gets a build log, every mistake becomes a lesson. 52 documented lessons so far. The goal isn't just to build — it's to build in a way someone else (or future me) could reproduce.

The toolkit.

What I'm actively using in the lab. Not a wish list — these are the tools behind the projects below.

Kubernetes & Infrastructure
Kubernetes
Talos Linux
Cilium
Traefik
Longhorn
cert-manager
GitOps & Automation
Flux CD
Helm
Kustomize
SOPS / age
GitHub Actions
Python
Monitoring & Observability
Prometheus
Grafana
Alertmanager
Uptime Kuma
PromQL
node-exporter
Networking & Security
Cloudflare Tunnel
Let's Encrypt
NetworkPolicy
CiliumNetworkPolicy
DNS-01 Challenge
Nginx

Projects.

Things I've built, broken, and documented. Each one started with "how hard can it be?"

Kubernetes Homelab — GitOps from Scratch

A production-grade Kubernetes cluster running on a single Dell laptop. Talos Linux as the immutable OS, Cilium for CNI and L2 load balancing, Longhorn for persistent storage, Flux for GitOps, and cert-manager with Let's Encrypt DNS-01 for real TLS certificates. Cloudflare Tunnel for zero-port public access. Every component deployed, debugged, and documented — 16 build stages, 52 lessons learned, full disaster recovery runbook. This site runs on it.

Kubernetes Talos Linux GitOps / Flux Cloudflare Tunnel

NetworkPolicy Deep Dive — The 2-Hour Incident

Deployed 14 NetworkPolicies at once. Everything broke. Helm upgrades failed, monitoring went dark, and it took two hours to figure out that Cilium's eBPF evaluates ipBlock rules differently than standard Kubernetes. Wrote a full root cause analysis and a three-level explainer (8th grade, high school, and college level). The fix: CiliumNetworkPolicy with toEntities for API access instead of ipBlock CIDR matching.

CiliumNetworkPolicy eBPF Incident Response

Monitoring Stack — Watching the Watchers

Full kube-prometheus-stack deployment with custom Grafana dashboards, PromQL queries that actually work, and the discovery that the monitoring stack itself was about to OOM at 282Mi against a 256Mi limit. Learned that kube_pod_status_phase emits zero-value series for every phase — and that "141 pods not ready" was actually a query bug, not a cluster problem.

Prometheus Grafana PromQL

Cloudflare Tunnel — Public Access, Zero Open Ports

Exposing homelab services to the internet without opening a single router port. Cloudflare Tunnel connects outbound via QUIC, all traffic routes through Traefik, and new services only need a new Ingress resource. DNS-01 validation for Let's Encrypt certificates via the Cloudflare API. Four public services running with production TLS and no inbound firewall rules.

Cloudflare Tunnel Traefik Let's Encrypt

Things I'm writing about.

Lessons learned the hard way. Posts coming soon.

52 Lessons from Building a Kubernetes Homelab

Everything that went wrong, why it went wrong, and what I'd do differently. From "MetalLB + Talos = pain" to "Cilium evaluates ports after DNAT." A field guide for anyone building a K8s homelab on bare metal.

Coming Soon Homelab

The Case for Boring Infrastructure

Nobody writes a blog post about the migration that went perfectly. But maybe they should. A defense of unglamorous infrastructure decisions and the engineers who make them.

Coming Soon Philosophy

GitOps for One: Is It Worth It?

Running Flux, SOPS, Kustomize, and a full CI/CD pipeline for a single-node homelab. Overkill or the only sane way to manage infrastructure? A cost-benefit analysis after 16 stages of building.

Coming Soon GitOps
"Life is an engineering problem. Every challenge has a root cause, and every system can be improved through deliberate analysis, design, and execution. I don't just fix the immediate problem; I seek to understand and address the root cause."

Say hello.

Interested in the homelab build, have a question about something I wrote, or just want to talk infrastructure? I'm here for it.

Message received — I'll get back to you soon. Thanks for reaching out.
Please enter your name
Please enter a valid email
Please enter your message

Or find me elsewhere.

GitHub