77 lines
2.8 KiB
YAML
77 lines
2.8 KiB
YAML
# FlowerCore Remote Desktop — TLS + Ingress
|
|
#
|
|
# Source-of-truth split:
|
|
# - bluejay-infra OWNS: Certificate, IngressRoute, all NetworkPolicies
|
|
# (see network-policies.yaml in this directory).
|
|
# - FlowerCore.RemoteDesktop scripts/deploy-web.sh OWNS: Deployment +
|
|
# Service. Reason: image refs like `localhost/fc-desktop:linux-xfce`
|
|
# only exist on each node's containerd after a manual import, so a
|
|
# Deployment manifest in bluejay-infra would race the image-import
|
|
# step and crash-loop.
|
|
#
|
|
# NetworkPolicies moved into bluejay-infra 2026-05-07 — previously they
|
|
# were applied via the deploy script's kubectl apply calls, which broke
|
|
# cluster-rebuild repeatability. See
|
|
# feedback_networkpolicies_belong_in_bluejay_infra.md.
|
|
---
|
|
apiVersion: cert-manager.io/v1
|
|
kind: Certificate
|
|
metadata:
|
|
name: remotedesktop-web-tls
|
|
namespace: fc-desktop
|
|
spec:
|
|
secretName: remotedesktop-web-tls
|
|
issuerRef:
|
|
name: step-ca-acme
|
|
kind: ClusterIssuer
|
|
dnsNames:
|
|
- desktop.iamworkin.lan
|
|
---
|
|
apiVersion: traefik.io/v1alpha1
|
|
kind: IngressRoute
|
|
metadata:
|
|
name: remotedesktop-web
|
|
namespace: fc-desktop
|
|
spec:
|
|
entryPoints:
|
|
- websecure
|
|
routes:
|
|
# Host-level catch-all for desktop.iamworkin.lan. The /guacamole
|
|
# path-prefix match lives in apps/guacamole/guacamole.yaml as a
|
|
# separate IngressRoute in the guacamole namespace — the cluster
|
|
# Traefik disallows cross-namespace service refs, so the PathPrefix
|
|
# rule can't sit here. Traefik's router matching precedence gives
|
|
# longer/more-specific rules priority automatically, so as long as
|
|
# the guacamole IngressRoute exists it takes /guacamole traffic
|
|
# before this catch-all sees it.
|
|
- match: Host(`desktop.iamworkin.lan`)
|
|
kind: Rule
|
|
services:
|
|
- name: remotedesktop-web
|
|
port: 8080
|
|
tls:
|
|
secretName: remotedesktop-web-tls
|
|
# ---- PUBLIC HOST PRE-STAGING (DISABLED - Sprint 61+ exposure go-decision only) ----
|
|
# When the operator decides to expose remotedesktop-web publicly, uncomment + update the host,
|
|
# then verify the five safe-to-expose gates (authentik-safe-to-expose-readiness-2026-06-07.md section 2).
|
|
#
|
|
# --- IngressRoute ---
|
|
# apiVersion: traefik.io/v1alpha1
|
|
# kind: IngressRoute
|
|
# metadata:
|
|
# name: remotedesktop-web-public
|
|
# namespace: fc-desktop
|
|
# spec:
|
|
# entryPoints: [websecure]
|
|
# routes:
|
|
# - match: Host(`desktop.flowercore.io`) && (Method(`GET`) || Method(`HEAD`))
|
|
# kind: Rule
|
|
# middlewares:
|
|
# - name: remotedesktop-web-public-profile-header # injects entitlement profile
|
|
# services:
|
|
# - name: remotedesktop-web
|
|
# port: 8080
|
|
# tls: {}
|
|
# # POST/PUT/PATCH/DELETE miss every route -> Traefik 404 -> no admin writes on the public surface.
|
|
# # Reference pattern: dist.flowercore.io (already live + method-gated; do not edit that one).
|