Research-Stack/5-Applications/webrtc-bridge/k8s/bridge.yaml
Brandon Schneider 683bde4af6 feat(infra): WebRTC bridge + Caddy edge config + Tailscale Funnel
WebRTC bridge (5-Applications/webrtc-bridge/):
- Go signaling server with pion/webrtc v4 + gorilla/websocket
- Browser client with dark UI, RTT/ICE metrics, request builder
- HTTP proxy over WebRTC data channel to Traefik
- k3s deployment on 361395-1 with hostNetwork
- Traefik IngressRoute at /webrtc with stripPrefix middleware
- Bypasses Tailscale DERP relay latency (~129ms → direct P2P)

Caddy edge config (5-Applications/caddy-edge/):
- Caddyfile with Porkbun DNS-01 challenge
- JSON config with explicit TLS connection policies
- k3s deployment on 361395-1 with hostNetwork
- Note: TLS handshake fails in Caddy 2.10.2 (internal error)
  despite certs being loaded. Using Tailscale Funnel instead.

Infrastructure fixes:
- Tailscale Funnel enabled on 361395-1 → Traefik
- Traefik ingress for 361395-1.tail4e7094.ts.net → Homer
- Funnel hostname: https://361395-1.tail4e7094.ts.net
2026-05-28 13:11:53 -05:00

100 lines
2.1 KiB
YAML

apiVersion: v1
kind: Namespace
metadata:
name: edge
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: webrtc-bridge
namespace: edge
labels:
app: webrtc-bridge
spec:
replicas: 1
selector:
matchLabels:
app: webrtc-bridge
template:
metadata:
labels:
app: webrtc-bridge
spec:
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
nodeSelector:
kubernetes.io/hostname: 361395-1
containers:
- name: webrtc-bridge
image: localhost/webrtc-bridge:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
name: http
env:
- name: PORT
value: "8080"
- name: PROXY_TARGET
value: "http://100.102.173.61:30080"
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "250m"
readinessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 10
periodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
name: webrtc-bridge
namespace: edge
spec:
selector:
app: webrtc-bridge
ports:
- port: 80
targetPort: 8080
name: http
type: ClusterIP
---
# Traefik IngressRoute to expose under /webrtc path on the Funnel hostname.
# Traefik is already configured for 361395-1.tail4e7094.ts.net via Tailscale Funnel.
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: webrtc-bridge
namespace: edge
spec:
entryPoints:
- web
routes:
- match: Host(`361395-1.tail4e7094.ts.net`) && PathPrefix(`/webrtc`)
kind: Rule
services:
- name: webrtc-bridge
port: 80
middlewares:
- name: webrtc-strip-prefix
---
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: webrtc-strip-prefix
namespace: edge
spec:
stripPrefix:
prefixes:
- /webrtc