proxy-group: "ingress" routes through the shared ProxyGroup instead of spawning a per-ingress proxy
Do not use rules: with host: — the ProxyGroup proxy receives the FQDN as Host header (e.g. <service>.tail8d86e.ts.net), so a short host: <service> won’t match. Use defaultBackend instead.
tls.hosts sets the MagicDNS hostname (becomes <service>.tail8d86e.ts.net)
gethomepage.dev/group — use one of the existing groups: “Services”, “Content”, or “Infrastructure”
tailscale.com/tags is not needed in the default case — the ProxyGroup already applies tag:k8s. Only add this annotation when the service needs public internet access via the flyio-proxy. When you do, you must include both tags (setting tags overrides the ProxyGroup default):
# Sync apps to pick up new Applicationargocd app sync apps# Test on feature branch firstargocd app set <service> --revision <branch>argocd app sync <service># Verifykubectl --context=minikube-indri -n <service> get podskubectl --context=minikube-indri -n <service> logs -f deployment/<service># After PR merge, reset to mainargocd app set <service> --revision mainargocd app sync <service>
Checklist
Manifests in argocd/manifests/<service>/
Application in argocd/apps/<service>.yaml
Tailscale Ingress via ProxyGroup with Homepage annotations
Caddy route (if pod-to-service access needed)
Tested on feature branch
PR reviewed and merged
Reset to main branch
Service added to service-versions.yaml for version tracking