P5.1: Migrate minikube from podman to QEMU2 driver #38

Merged
eblume merged 16 commits from feature/p5.1-qemu2-migration into main 2026-01-21 16:03:38 -08:00
8 changed files with 15 additions and 21 deletions
Showing only changes of commit f0a3cbf5ff - Show all commits

Rename ProxyClass from crio-compat to default

The crio-compat name was misleading since we're now using docker driver.
Renamed to 'default' and updated all references.

Fully-qualified image names still used for consistency across runtimes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Erich Blume 2026-01-21 14:25:02 -08:00

View file

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

View file

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

View file

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

View file

@ -8,7 +8,7 @@ metadata:
name: grafana-tailscale name: grafana-tailscale
namespace: monitoring namespace: monitoring
annotations: annotations:
tailscale.com/proxy-class: "crio-compat" tailscale.com/proxy-class: "default"
spec: spec:
ingressClassName: tailscale ingressClassName: tailscale
defaultBackend: defaultBackend:

View file

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

View file

@ -6,7 +6,7 @@ Manifests for the Tailscale Kubernetes Operator, managed via ArgoCD.
- `operator.yaml` - Static manifest from https://github.com/tailscale/tailscale/tree/main/cmd/k8s-operator/deploy/manifests - `operator.yaml` - Static manifest from https://github.com/tailscale/tailscale/tree/main/cmd/k8s-operator/deploy/manifests
- Secret block removed from `operator.yaml` - managed separately via `secret.yaml.tpl` - Secret block removed from `operator.yaml` - managed separately via `secret.yaml.tpl`
- Image reference changed to fully-qualified `docker.io/tailscale/k8s-operator:stable` for CRI-O compatibility - Image reference changed to fully-qualified `docker.io/tailscale/k8s-operator:stable`
## Prerequisites ## Prerequisites
@ -71,7 +71,7 @@ kubectl logs -n tailscale -l app.kubernetes.io/name=operator
|------|-------------| |------|-------------|
| `kustomization.yaml` | Kustomize configuration for all manifests | | `kustomization.yaml` | Kustomize configuration for all manifests |
| `operator.yaml` | Operator deployment, CRDs, RBAC (secret removed) | | `operator.yaml` | Operator deployment, CRDs, RBAC (secret removed) |
| `proxyclass.yaml` | ProxyClass with fully-qualified images for CRI-O | | `proxyclass.yaml` | ProxyClass with fully-qualified images |
| `dnsconfig.yaml` | DNSConfig for cluster-to-tailnet name resolution | | `dnsconfig.yaml` | DNSConfig for cluster-to-tailnet name resolution |
| `egress-forge.yaml` | Egress proxy for accessing forge on indri | | `egress-forge.yaml` | Egress proxy for accessing forge on indri |
| `secret.yaml.tpl` | 1Password template for OAuth credentials (manual) | | `secret.yaml.tpl` | 1Password template for OAuth credentials (manual) |
@ -81,10 +81,10 @@ kubectl logs -n tailscale -l app.kubernetes.io/name=operator
- **TODO:** The OAuth secret (`operator-oauth`) is not managed by ArgoCD and must be applied - **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). manually. Future improvement: integrate with a secrets operator (e.g., External Secrets).
- Services using the Tailscale LoadBalancer must reference the ProxyClass: - Services using the Tailscale LoadBalancer should reference the ProxyClass:
```yaml ```yaml
annotations: annotations:
tailscale.com/proxy-class: "crio-compat" tailscale.com/proxy-class: "default"
``` ```
- The egress proxy for forge targets `indri.tail8d86e.ts.net` directly (not `forge.tail8d86e.ts.net`) - 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. because Tailscale Serve hostnames are virtual and only work via the Tailscale client.

View file

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

View file

@ -1,17 +1,11 @@
# ProxyClass: crio-compat # ProxyClass: default
# #
# Why this exists: # Specifies fully-qualified image names for Tailscale proxy pods.
# CRI-O (the container runtime used by minikube) cannot resolve short image # This ensures consistent behavior across different container runtimes.
# 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: # Usage:
# Add this annotation to any Tailscale Service or Ingress: # Add this annotation to any Tailscale Service or Ingress:
# tailscale.com/proxy-class: "crio-compat" # tailscale.com/proxy-class: "default"
# #
# This tells the operator to use the fully-qualified image names defined below # This tells the operator to use the fully-qualified image names defined below
# when creating the proxy pod for that resource. # when creating the proxy pod for that resource.
@ -19,7 +13,7 @@
apiVersion: tailscale.com/v1alpha1 apiVersion: tailscale.com/v1alpha1
kind: ProxyClass kind: ProxyClass
metadata: metadata:
name: crio-compat name: default
spec: spec:
statefulSet: statefulSet:
pod: pod: