A productionKubernetes networkbuilt from decades of infrastructure work.
KuberTech.io is the production view of my KuberTech network: a Kubernetes and GitOps platform used to run useful services and show how I design, automate and operate infrastructure.
The wider network traces back to 1997, when small private LANs were the practical answer to a UK internet landscape still dominated by dial-up access, cost and limited bandwidth. It has grown into an ISP-style development platform on virtualised and co-located infrastructure, where I research new technology and keep automation, recovery, networking and platform judgement practical.
KuberTech is the public face of a real Kubernetes platform, not a throwaway demo.
Simon Oakes has been building and running networks since 1997, starting with small private LANs at a time when UK internet access was still mostly dial-up, expensive and bandwidth-limited. Today the wider environment spans virtualised and co-located systems across datacentres, runs useful services and gives new tools a realistic place to prove themselves. This site turns that operating model into something public, reviewable and safe to share.
soakes@uk
From hands-on network building in 1997 to Kubernetes platform engineering.
KuberTech is the public slice of the development network Simon Oakes uses today to operate useful services, research new technology and keep Linux, Kubernetes, networking, automation and recovery skills grounded in practical infrastructure.
It is a controlled slice of a larger environment used for real services, research and long-running practice across Kubernetes, Linux, networking, automation and recovery.
1997 to now
Long-running practice
That path started with small private LANs in the dial-up era, when reliable local networking was the practical way to connect systems and move data. It grew into a datacentre-hosted development platform, keeping learning tied to real systems instead of throwaway examples.
real services
Production discipline
Services are operated with the same habits expected at work: clear ownership, controlled exposure, repeatable change, maintenance windows and recovery paths.
reviewed desired state
GitOps control
Argo CD reconciles reviewed application state from Git, with automated prune and self-heal policies used to keep drift visible and correctable.
ISP roots
Network and edge depth
DNS, routing, VPNs, mail, ingress, certificates and edge connectivity are treated as part of the platform, not as detached service plumbing.
less manual drift
Automation muscle
Ingress, certificates, secret sync, storage, runners, maintenance and upgrades are handled as repeatable platform capabilities rather than manual cluster chores.
designed to fix
Recovery judgement
Vault snapshots, unseal automation, controlled reboots and k3s upgrade plans keep failure handling and maintenance visible before pressure arrives.
03production network
The .io site is the production public slice of the network.
KuberTech.io shows the production side of the environment: the bounded application set, the GitOps model and the platform practices used for the public view of the network.
kubertech.io
Production public view
KuberTech.io shows the production side of KuberTech that is safe to describe publicly: what runs, how it is bounded and how change is handled.
proved first
Development before production
Platform and workload changes are exercised on the development side before the production view is updated, keeping experiments away from the public operating posture.
clear blast radius
Operational boundaries
Applications are grouped by namespace, AppProject, repository source and platform responsibility so the blast radius is visible before work reaches the cluster.
designed for recovery
Recovery posture
Maintenance, unseal, backup and upgrade work is treated as part of the platform story, not as hidden manual effort that only appears during an incident.
04managed applications
The inventory is organised by operational responsibility.
kubertech.io groups Kubernetes applications by the role they play in the platform: workloads, ingress, certificates, secrets, storage, CI/CD runners and maintenance automation. The useful signal is not the manifest count; it is whether the operating model is easy to reason about and safe to change.
app
User workloads
Click to inspect grouped applicationsShowing grouped applications
8 appsToggle category
squid
namespace/squid
workload
policy
GitOps
scope
Bounded
wave
0
Caching forward proxy used for controlled network egress and development traffic patterns.
project
squid
source
squid-appify-k8s
path
overlays/<env>
exposure
internal service
proddevautomated pruneself-heal
vaultwarden
namespace/vaultwarden
workload
policy
GitOps
scope
Bounded
wave
0
Self-hosted password vault workload operated with private access, clear routing expectations and backup consideration.
project
vaultwarden
source
vaultwarden-appify-k8s
path
overlays/<env>
exposure
controlled routed workload
proddevautomated pruneself-heal
vlmcsd
namespace/vlmcsd
workload
policy
GitOps
scope
Bounded
wave
0
Internal licence activation workload for authorised development systems inside the wider network.
project
vlmcsd
source
vlmcsd-appify-k8s
path
overlays/<env>
exposure
internal-only service
proddevautomated pruneself-heal
phpipam
namespace/phpipam
workload
policy
GitOps
scope
Bounded
wave
0
IP address management workload for network records and address planning across the development network.
project
phpipam
source
phpipam-appify-k8s
path
overlays/<env>
exposure
routed workload
proddevautomated pruneself-heal
speedtest-tracker
namespace/speedtest-tracker
workload
policy
GitOps
scope
Bounded
wave
0
Internet performance monitoring workload used to track network behaviour over time.
project
speedtest-tracker
source
speedtest-tracker-appify-k8s
path
overlays/<env>
exposure
routed workload
proddevautomated pruneself-heal
termbin
namespace/termbin
workload
policy
GitOps
scope
Bounded
wave
0
Terminal-friendly paste service for controlled operator handoff and short-lived diagnostic notes.
project
termbin
source
termbin-appify-k8s
path
overlays/<env>
exposure
controlled routed workload
proddevautomated pruneself-heal
transfer
namespace/transfer
workload
policy
GitOps
scope
Bounded
wave
0
Command-line file handoff service used inside the wider network with controlled access expectations.
project
transfer
source
transfer-appify-k8s
path
overlays/<env>
exposure
controlled routed workload
proddevautomated pruneself-heal
ninerouter
namespace/ninerouter
workload
policy
GitOps
scope
Bounded
wave
0
Routed AI access service with image guard automation and controlled promotion expectations.
project
ninerouter
source
ninerouter-appify-k8s
path
overlays/<env>
exposure
routed workload
proddevautomated pruneself-heal
net
Networking and edge
Click to inspect grouped applicationsShowing grouped applications
4 appsToggle category
cloudflare
namespace/cloudflare
networking
policy
GitOps
scope
Bounded
wave
0
Cloudflare edge connectivity for controlled ingress into the KuberTech network.
project
cloudflare
source
cloudflare-appify-k8s
path
base app patched by overlays/<env>
exposure
edge connectivity
proddevautomated pruneself-heal
metallb-crds
namespace/metallb-system
networking
policy
GitOps
scope
Bounded
wave
0
Installs MetalLB custom resources ahead of the controller so load-balancer state has a reliable API surface.
project
metallb
source
metallb-crds-appify-k8s
path
base/apps/metallb-crds.yaml
exposure
cluster internal
proddevautomated pruneself-heal
metallb
namespace/metallb-system
networking
policy
GitOps
scope
Bounded
wave
0
Provides load-balancer IP allocation for services inside the Kubernetes network.
project
metallb
source
MetalLB Helm chart
path
base app patched by overlays/<env>
exposure
cluster networking
proddevautomated pruneself-heal
traefik
namespace/kube-system
networking
policy
GitOps
scope
Bounded
wave
0
Ingress routing layer for HTTP and TCP services, separated from TLS material and edge policy.
project
traefik
source
traefik chart + traefik-appify-k8s
path
charts/traefik/<env>/values.yaml
exposure
ingress edge
proddevautomated pruneself-heal
sec
Secrets and certificates
Click to inspect grouped applicationsShowing grouped applications
4 appsToggle category
external-secrets
namespace/external-secrets
secrets
policy
GitOps
scope
Bounded
wave
1
Synchronises external secret material into Kubernetes namespaces without publishing sensitive values in Git.
project
external-secrets
source
external-secrets Helm chart
path
base/apps/external-secrets.yaml
exposure
cluster internal
proddevautomated pruneself-heal
reflector
namespace/reflector
secrets
policy
GitOps
scope
Bounded
wave
2
Reflects selected secrets and config maps into target namespaces where shared platform material is required.
project
reflector
source
reflector Helm chart
path
base app patched by overlays/<env>
exposure
cluster internal
proddevautomated pruneself-heal
cert-manager
namespace/cert-manager
secrets
policy
GitOps
scope
Bounded
wave
0
Automates certificate resources and lifecycle management for services inside the cluster.
project
cert-manager
source
cert-manager chart + cert-manager-appify-k8s
path
overlays/<env>
exposure
cluster internal
proddevautomated pruneself-heal
traefik-tls
namespace/external-secrets
secrets
policy
GitOps
scope
Bounded
wave
4
Creates the TLS secret material consumed by Traefik routes without coupling certificates directly to ingress configuration.
project
external-secrets
source
traefik-tls-appify-k8s
path
overlays/<env>
exposure
TLS support
proddevautomated pruneself-heal
ci
CI/CD runners
Click to inspect grouped applicationsShowing grouped applications
2 appsToggle category
ci
github-actions-runners
cicd
Self-hosted GitHub Actions runners for trusted automation jobs close to the platform.
policyGitOpsscopeBoundedwave0
namespace
github-actions-runners
project
github-actions-runners
exposure
cluster internal
source
github-actions-runner-appify-k8s
ci
gitlab-runner
cicd
GitLab runner fleet for pipeline work that benefits from being close to the Kubernetes platform.
policyGitOpsscopeBoundedwave0
namespace
gitlab
project
gitlab-runner
exposure
cluster internal
source
gitlab-runner chart + gitlab-runner-appify-k8s
pvc
Storage
Click to inspect grouped applicationsShowing grouped applications
1 appsToggle category
pvc
nfs-subdir-external-provisioner
storage
Dynamic NFS-backed persistent volume provisioning for workloads that need shared storage.
Click to inspect grouped applicationsShowing grouped applications
4 appsToggle category
kured
namespace/kube-system
maintenance
policy
GitOps
scope
Bounded
wave
5
Coordinates node reboots inside a defined maintenance window so patching remains predictable.
project
kured
source
kured Helm chart
path
base/apps/kured.yaml
exposure
cluster internal
proddevautomated pruneself-heal
vault-unseal
namespace/vault-unseal
maintenance
policy
GitOps
scope
Bounded
wave
0
Automates Vault unseal operations so the platform secret backend has a recoverable operating path.
project
vault-unseal
source
vault-unseal chart + vault-unseal-appify-k8s
path
charts/vault-unseal/<env>/values.yaml
exposure
cluster internal
proddevautomated pruneself-heal
vault-raft-snapshot-agent
namespace/vault-raft-snapshot-agent
maintenance
policy
GitOps
scope
Bounded
wave
0
Captures Vault raft snapshots so backup and recovery posture is part of normal operations.
project
vault-raft-snapshot-agent
source
vault-raft-snapshot-agent-appify-k8s
path
overlays/<env>
exposure
cluster internal
proddevautomated pruneself-heal
system-upgrade
namespace/system-upgrade
maintenance
policy
GitOps
scope
Bounded
wave
0
System Upgrade Controller for automated k3s upgrade plans and repeatable node maintenance.
project
system-upgrade
source
system-upgrade-appify-k8s
path
overlays/<env>
exposure
cluster internal
proddevautomated pruneself-heal
api
Platform APIs
Click to inspect grouped applicationsShowing grouped applications
1 appsToggle category
api
metrics
platform
Provides Kubernetes resource metrics used for scheduling, checks and day-to-day platform visibility.
policyGitOpsscopeBoundedwave3
namespace
kube-system
project
metrics-server
exposure
cluster internal
source
metrics-server Helm chart
05reconciliation model
Argo CD boundaries make the operating contract visible.
The production plane is represented through Argo CD Applications, AppProjects, Image Updater policies and storage resources so repository access, namespaces and automation scope are clear before anything reaches the cluster.
Core services are treated as platform capabilities.
Ingress, certificates, secrets, load balancing, storage, maintenance and build runners are separated into service groups so each capability has a clear purpose, boundary and recovery expectation.
networking
Ingress edge
3 apps
Traefik handles cluster routing, TLS material is reconciled separately, and Cloudflare provides the controlled external edge path.
traefiktraefik-tlscloudflare
secrets
Certificate and secret flow
3 apps
Certificate resources, external secret sync and namespace reflection are managed as first-class platform services rather than ad-hoc workload details.
cert-managerexternal-secretsreflector
networking
Load balancing
2 apps
MetalLB CRDs and controller state are split so the controller reconciles only after its API surface is present.
metallb-crdsmetallb
storage
Storage provisioning
1 apps
NFS-backed dynamic provisioning supplies persistent volumes for workloads that need shared storage without hand-built volume steps.
nfs-subdir-external-provisioner
maintenance
Operational maintenance
4 apps
Reboots, k3s upgrade plans, Vault unseal and Vault raft snapshots are managed through GitOps-controlled applications so recovery work is visible.
Self-hosted GitHub and GitLab runners keep automation close to the platform while remaining declared, bounded and GitOps-managed.
github-actions-runnersgitlab-runner
07gitops workflow
The repository layout is part of how the platform is operated.
Base applications, environment overlays, AppProjects and automation policies are split deliberately so changes can be reviewed, constrained, reconciled and promoted without relying on memory or manual cluster work.
Promotion model
dev overlay before prod overlay
Development and production sides use the same application model, giving platform and workload changes a repeatable path from testing to release.
Sync policy
automated prune + self-heal
Automated reconciliation keeps the cluster aligned to reviewed Git state, including pruning obsolete resources and self-healing configuration drift.
step 01
Declare
Applications and AppProjects are versioned in apps-appify-k8s under shared base and environment overlay paths.
step 02
Constrain
AppProjects limit each app to explicit source repositories, namespaces and cluster permissions before reconciliation starts.
step 03
Reconcile
Argo CD applies desired state with automated prune and self-heal enabled across the app set.
step 04
Promote
The development overlay proves platform and workload changes before the same operating model moves to production.
base/apps
Shared Argo CD Applications used by both production and development environments so common platform behaviour is defined once.
overlays/prod/apps
Production application resources and patches for the public network view.
overlays/dev/apps
Development application resources and patches for testing before production promotion.
overlays/*/projects
AppProject boundaries for allowed repositories, namespaces and cluster resources.
overlays/*/argocd
Argo CD Image Updater write-back policies for selected workloads where image automation is intentionally bounded.
overlays/*/storage
Storage provider Applications kept separate from normal workload apps so persistence concerns are easy to review.