blumeops/argocd/manifests/tailscale-operator
Erich Blume 0aab73af40 Bump mosquitto to 2.1.2 and tailscale-operator to v1.94.2 (#197)
## Summary
- Pin mosquitto from floating `:2` tag to `2.1.2` (latest upstream, released Feb 9 2026)
- Bump tailscale k8s-operator and proxy images from `v1.94.1` to `v1.94.2`
- Record 7 reviewed services in `service-versions.yaml` (first service review pass)

## Services reviewed (11 total)
| Service | Deployed | Latest | Status |
|---------|----------|--------|--------|
| prometheus | v3.9.1 | v3.9.1 | Current |
| loki | 3.6.5 | 3.6.5 | Current |
| kube-state-metrics | v2.18.0 | v2.18.0 | Current |
| mosquitto | :2 (floating) | 2.1.2 | **Pinned in this PR** |
| frigate | 0.16.4 | 0.16.4 | Current |
| alloy-k8s | v1.13.1 | v1.13.1 | Current |
| tailscale-operator | v1.94.1 | v1.94.2 | **Bumped in this PR** |
| ntfy | v2.11.0 | v2.17.0 | Stale (future PR) |
| frigate-notify | v0.3.5 | v0.5.4 | Stale (future PR) |
| homepage | chart 2.1.0 | app v1.10.1 | Stale (future PR) |
| grafana | chart 8.8.2 | chart 10.5.15 | Stale (future PR) |

## Deployment and Testing
- [ ] `argocd app sync apps`
- [ ] `argocd app set mosquitto --revision service-review/mosquitto-tailscale-operator && argocd app sync mosquitto`
- [ ] `argocd app set tailscale-operator --revision service-review/mosquitto-tailscale-operator && argocd app sync tailscale-operator`
- [ ] Verify mosquitto pod restarts with pinned image
- [ ] Verify tailscale operator and proxy pods update
- [ ] `mise run services-check`

Reviewed-on: https://forge.ops.eblu.me/eblume/blumeops/pulls/197
2026-02-16 17:14:38 -08:00
..
dnsconfig.yaml K8s Migration Phase 1: Infrastructure Setup (#29) 2026-01-19 09:49:52 -08:00
egress-forge.yaml Add Caddy layer4 for Forgejo SSH (#56) 2026-01-25 11:37:23 -08:00
external-secret.yaml Switch all ExternalSecrets to creationPolicy: Owner 2026-01-28 20:27:16 -08:00
kustomization.yaml Restrict flyio-proxy ACLs to dedicated tag:flyio-target endpoints (#126) 2026-02-08 21:54:18 -08:00
operator.yaml Bump mosquitto to 2.1.2 and tailscale-operator to v1.94.2 (#197) 2026-02-16 17:14:38 -08:00
proxyclass.yaml Bump mosquitto to 2.1.2 and tailscale-operator to v1.94.2 (#197) 2026-02-16 17:14:38 -08:00
proxygroup-ingress.yaml Restrict flyio-proxy ACLs to dedicated tag:flyio-target endpoints (#126) 2026-02-08 21:54:18 -08:00
README.md Add Caddy layer4 for Forgejo SSH (#56) 2026-01-25 11:37:23 -08:00

Tailscale Kubernetes Operator

Manifests for the Tailscale Kubernetes Operator, managed via ArgoCD.

Source

Prerequisites

  1. OAuth client in Tailscale admin console with:
    • Devices: Core (Read & Write) - tag: tag:k8s-operator
    • Auth Keys: Read & Write
    • Services: Write
  2. ACL with tag:k8s-operator owning tag:k8s (so operator can tag resources it creates)

Manual Bootstrap (Before ArgoCD)

Tailscale operator must be deployed before ArgoCD since ArgoCD uses Tailscale for ingress.

# 1. Create namespace
kubectl create namespace tailscale

# 2. Apply OAuth secret (uses 1Password)
op inject -i argocd/manifests/tailscale-operator/secret.yaml.tpl | kubectl apply -f -

# 3. Apply manifests via kustomize
kubectl apply -k argocd/manifests/tailscale-operator/

Ongoing Management (After ArgoCD)

Once ArgoCD is running, the operator is managed by the tailscale-operator ArgoCD Application. ArgoCD pulls manifests from forge and applies them automatically.

ArgoCD CLI Commands

# Check application status
argocd app get tailscale-operator

# Trigger a sync (pull latest from forge and apply)
argocd app sync tailscale-operator

# Preview what would change without applying
argocd app diff tailscale-operator

# View deployment history
argocd app history tailscale-operator

# Hard refresh (clear cache and re-fetch from git)
argocd app get tailscale-operator --hard-refresh

Verification

# Check operator pod is running
kubectl get pods -n tailscale

# Check operator logs
kubectl logs -n tailscale -l app.kubernetes.io/name=operator

Files

File Description
kustomization.yaml Kustomize configuration for all manifests
operator.yaml Operator deployment, CRDs, RBAC (secret removed)
proxyclass.yaml ProxyClass with fully-qualified images
dnsconfig.yaml DNSConfig for cluster-to-tailnet name resolution
egress-forge.yaml Egress proxy for accessing forge on indri
secret.yaml.tpl 1Password template for OAuth credentials (manual)
README.md This file

Notes

  • TODO: The OAuth secret (operator-oauth) is not managed by ArgoCD and must be applied manually. Future improvement: integrate with a secrets operator (e.g., External Secrets).
  • Services using the Tailscale LoadBalancer should reference the ProxyClass:
    annotations:
      tailscale.com/proxy-class: "default"
    
  • The egress proxy for forge is deprecated. Forge is now accessible via Caddy at forge.ops.eblu.me (HTTPS) and forge.ops.eblu.me:2222 (SSH), which pods can reach directly.