A complete, minimal app you can copy. It shows the three building blocks every app needs and the two ways to deploy them on this lab. The app is it-tools (a handy dev-tools web page).
it-tools/
deployment.yaml # the pods (2 replicas of the it-tools image)
service.yaml # stable address in front of the pods
ingress.yaml # routes it-tools.<your-domain> -> the service via Traefik
kustomization.yaml# bundles the three + sets the namespace
application.yaml # ArgoCD Application to manage it via GitOps (optional)
flowchart LR
ing[Ingress<br/>it-tools.domain] --> svc[Service :80]
svc --> p1[pod]
svc --> p2[pod]
Edit it-tools/ingress.yaml and replace example.com with your domain:
- host: it-tools.example.com # -> it-tools.yourdomain.comRun inside the VM (vagrant ssh):
sudo k3s kubectl --kubeconfig=/etc/rancher/k3s/k3s.yaml apply -k /vagrant/example/it-toolsOpen https://it-tools.<your-domain>. To remove it: same command with delete instead
of apply.
This is how the real tools work. Edit application.yaml, set repoURL to your fork, then
apply it once:
sudo k3s kubectl --kubeconfig=/etc/rancher/k3s/k3s.yaml apply -f /vagrant/example/application.yamlFrom now on, edit the manifests, git push, and ArgoCD reconciles — no kubectl needed.
ingressClassName: traefik— k3s uses Traefik, nevernginx. Annginxclass is ignored and you get a 404.- No
tls:block — Cloudflare terminates TLS at the edge, so the Ingress stays plain HTTP. See ../docs/networking.md.
→ To package a Helm chart instead of raw manifests, see ../docs/configuration.md ("Adding a new tool").