Commit graph

11 commits

Author SHA1 Message Date
ecf2aeb4e8 Fix PostgreSQL Tailscale service ProxyClass
- Add proxy-class annotation to use default ProxyClass
- Fixes CRI-O image name resolution issue

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 09:16:39 -08:00
9854b4dbee Add Tailscale LoadBalancer for PostgreSQL testing
- Expose k8s-pg.tail8d86e.ts.net for testing during migration
- Temporary service until Phase 4 when pg.tail8d86e.ts.net switches
- Update README with connection info and cleanup notes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 09:14:34 -08:00
d75fdfdad6 Add PostgreSQL cluster manifest for Step 7
- Create blumeops-pg Cluster with CloudNativePG
- Add eblume superuser role (matches current brew pg setup)
- Configure pg_hba for password auth from any IP (Tailscale handles security)
- Add secret template for eblume password from 1Password
- Create ArgoCD Application with manual sync policy
- Update Phase 1 plan with implementation notes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 08:55:08 -08:00
a9a667cd81 Enable ServerSideApply for CloudNativePG
Required to handle large CRDs that exceed the kubectl annotation size limit.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 08:11:20 -08:00
1bdfca0f22 Add CloudNativePG operator via ArgoCD (Phase 1 Step 6)
- Add CloudNativePG Application using multi-source Helm pattern
- Helm chart from upstream cloudnative-pg repo
- Values file from our git repo for customization
- Manual sync policy consistent with other workload apps

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 08:06:33 -08:00
32d5927838 Add ArgoCD self-management and app-of-apps pattern
- Add argocd CLI to Brewfile
- Create argocd.yaml for ArgoCD self-management (manual sync)
- Create apps.yaml app-of-apps root (auto-sync for Application resources)
- Convert tailscale-operator to kustomize
- Update READMEs with bootstrap steps and ArgoCD CLI commands
- Change all workload Applications to manual sync policy

App-of-apps auto-syncs to pick up new Application manifests, but child
apps require manual sync for actual workload deployments.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 07:54:04 -08:00
c47ac189c9 Migrate Tailscale operator to ArgoCD management (Phase 1 Step 5)
Adds ArgoCD Application to manage Tailscale operator from forge:
- ArgoCD Application sourced from internal Forgejo via SSH
- DNS config for cluster-to-tailnet name resolution
- Egress proxy for accessing forge on indri
- ACL grants for k8s workloads to reach forge (ports 3001, 2200)
- Template for repository secret with 1Password SSH key reference

Key discovery: 1Password op read requires ?ssh-format=openssh parameter
to get keys in OpenSSH format that ArgoCD's SSH client can read.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 07:12:51 -08:00
d510374432 Fix ArgoCD TLS: use Ingress with Let's Encrypt
- Switch from LoadBalancer to Ingress for automatic TLS certs
- Add ConfigMap patch to disable internal HTTPS redirect
- Tailscale Ingress provides Let's Encrypt certificates

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 20:00:27 -08:00
fc72021d6b Add ArgoCD manifests with Tailscale exposure
- Uses kustomize with remote base from upstream ArgoCD
- Adds Tailscale LoadBalancer service for external access
- Exposed at https://argocd.tail8d86e.ts.net

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 19:41:59 -08:00
950a3a6cc3 Add ProxyClass for CRI-O image compatibility
CRI-O cannot resolve short image names like 'tailscale/tailscale:stable'.
The ProxyClass 'default' sets fully-qualified image references.

Services must use annotation: tailscale.com/proxy-class: "default"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 18:50:27 -08:00
e017117449 Add Tailscale operator manifests (Phase 1 Step 3)
Added:
- argocd/manifests/tailscale-operator/operator.yaml - from Tailscale repo
  - Removed embedded secret (managed separately)
  - Changed image to docker.io/tailscale/k8s-operator:stable for CRI-O
- argocd/manifests/tailscale-operator/secret.yaml.tpl - 1Password template
- argocd/manifests/tailscale-operator/README.md - deployment instructions
- .yamllint.yaml - exclude third-party operator.yaml files

OAuth client requires tag:k8s-operator on Devices write scope.
The operator assigns tag:k8s to resources it creates via ACL ownership.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 18:33:29 -08:00