K8s Migration Phase 1: Infrastructure Setup #29

Merged
eblume merged 20 commits from feature/k8s-phase1-kickoff into main 2026-01-19 09:49:53 -08:00
5 changed files with 21 additions and 10 deletions
Showing only changes of commit 739f2f7da5 - Show all commits

Rename ProxyClass to crio-compat with documentation

- Rename from generic "default" to descriptive "crio-compat"
- Add detailed comments explaining why this ProxyClass exists
- Update all Service/Ingress annotations to use new name
- Remove invalid `default: true` field (not a real ProxyClass field)

The ProxyClass exists because CRI-O cannot resolve short image names.
Each Tailscale Service/Ingress needs the annotation to use it.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Erich Blume 2026-01-19 09:40:11 -08:00

View file

@ -10,7 +10,7 @@ metadata:
name: argocd-server-tailscale
namespace: argocd
annotations:
tailscale.com/proxy-class: "default"
tailscale.com/proxy-class: "crio-compat"
spec:
ingressClassName: tailscale
defaultBackend:

View file

@ -8,6 +8,7 @@ metadata:
namespace: databases
annotations:
tailscale.com/hostname: "k8s-pg"
tailscale.com/proxy-class: "crio-compat"
spec:
type: LoadBalancer
loadBalancerClass: tailscale

View file

@ -84,7 +84,7 @@ kubectl logs -n tailscale -l app.kubernetes.io/name=operator
- Services using the Tailscale LoadBalancer must reference the ProxyClass:
```yaml
annotations:
tailscale.com/proxy-class: "default"
tailscale.com/proxy-class: "crio-compat"
```
- The egress proxy for forge targets `indri.tail8d86e.ts.net` directly (not `forge.tail8d86e.ts.net`)
because Tailscale Serve hostnames are virtual and only work via the Tailscale client.

View file

@ -11,7 +11,7 @@ metadata:
namespace: tailscale
annotations:
tailscale.com/tailnet-fqdn: indri.tail8d86e.ts.net
tailscale.com/proxy-class: "default"
tailscale.com/proxy-class: "crio-compat"
spec:
type: ExternalName
externalName: placeholder

View file

@ -1,16 +1,26 @@
# ProxyClass for CRI-O compatibility
# CRI-O cannot resolve short image names, so we must use fully-qualified references.
# This ProxyClass sets the tailscale container images to use docker.io prefix.
# ProxyClass: crio-compat
#
# With `default: true`, this ProxyClass is automatically applied to all
# Services/Ingresses that don't explicitly specify a different proxy-class.
# Why this exists:
# CRI-O (the container runtime used by minikube) cannot resolve short image
# names like "tailscale/tailscale:stable". It requires fully-qualified names
# with an explicit registry prefix (e.g., "docker.io/tailscale/tailscale:stable").
#
# The Tailscale operator creates proxy pods (StatefulSets) for each LoadBalancer
# Service or Ingress. By default, these pods use short image names which fail
# on CRI-O with "ImageInspectError".
#
# Usage:
# Add this annotation to any Tailscale Service or Ingress:
# tailscale.com/proxy-class: "crio-compat"
#
# This tells the operator to use the fully-qualified image names defined below
# when creating the proxy pod for that resource.
---
apiVersion: tailscale.com/v1alpha1
kind: ProxyClass
metadata:
name: default
name: crio-compat
spec:
default: true
statefulSet:
pod:
tailscaleContainer: