Files
tools/minio/templates/ingress-public.yaml
T
arcodangeandClaude Opus 5 1490f4c514
Helm Charts / Detect changed charts (push) Successful in 1m6s
Helm Charts / Detect changed charts (pull_request) Successful in 1m5s
Helm Charts / Library charts tool (push) Has been skipped
Helm Charts / Library charts tool (pull_request) Has been skipped
Helm Charts / Application charts pgcat (push) Has been skipped
Helm Charts / Application charts pgcat (pull_request) Has been skipped
feat(minio) — exposer l'API S3 en HTTPS public (s3.arcodange.fr) + CORS de la PWA
Sans ça, la synchronisation des vidéos ne peut pas marcher, et ce sont des faits
du navigateur : une page servie en https ne peut pas émettre de requête vers
http:// (contenu mixte), et `.lab` n'est pas résolvable hors du LAN. L'ingress
existant est en entrypoint `web` sans TLS, sur un domaine interne — donc
inutilisable depuis kadans.arcodange.fr, en déplacement COMME à la maison.

Même motif que grafana/templates/ingress-public.yaml : entrypoint `web`, TLS
terminé par le tunnel Cloudflare (wildcard *.arcodange.fr), middleware crowdsec.
Le `.lab` interne reste inchangé.

PAS de basic-auth, contrairement à kadans-public : une requête S3 porte sa propre
signature (SigV4), et un défi HTTP Basic casserait le PUT présigné auquel le
navigateur ne peut pas répondre. L'autorisation vient de l'URL signée et de sa
durée de vie courte.

CORS déclaré sur les origines EXACTES de la PWA (.fr et .lab), jamais « * » :
une URL présignée qui fuiterait serait sinon rejouable depuis n'importe quel
site. Sans cette liste, le préflight OPTIONS échoue et le PUT ne part même pas.

⚠ Signalé, NON mesuré : le tunnel Cloudflare plafonne probablement le corps
d'une requête (~100 Mo sur les offres gratuites). À éprouver avec un vrai
téléversement. Contexte utile : sur le corpus réel du fondateur (707 vidéos,
~2 ans), la durée MOYENNE est de 53 s et deux vidéos seulement dépassent 5 min —
au palier « travail » de l'ADR-018, 100 Mo valent ~29 min de cours.

Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
Claude-Session: https://claude.ai/code/session_01CoafGWmRVESaWX819USUUA
2026-07-26 01:56:35 +02:00

38 lines
1.6 KiB
YAML

# Exposition PUBLIQUE s3.arcodange.fr, EN PLUS du .lab interne (qui reste
# inchangé). Même motif que `grafana/templates/ingress-public.yaml` : entrypoint
# `web` — le TLS est terminé en amont par le tunnel Cloudflare (wildcard
# *.arcodange.fr → traefik.kube-system.svc:80) — et middleware crowdsec.
#
# POURQUOI c'est nécessaire (et pas un confort) : la PWA est servie en
# https://kadans.arcodange.fr. Un navigateur REFUSE une requête vers http://
# depuis une page https (contenu mixte), et `.lab` n'est de toute façon pas
# résolvable hors du LAN. Sans cet ingress, le téléversement d'une vidéo ne peut
# marcher NI en déplacement, NI même à la maison — c'est le maillon qui manque
# à kadans-api#23 (URL présignées).
#
# ⚠ PAS de basic-auth ici, contrairement à kadans-public : une requête S3 porte
# sa propre signature (SigV4) dans ses en-têtes ou son URL. Un défi HTTP Basic
# casserait le PUT présigné du navigateur, qui n'a aucun moyen d'y répondre.
# L'autorisation vient de l'URL signée, avec sa durée de vie courte.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minio-public
namespace: tools
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: web
traefik.ingress.kubernetes.io/router.middlewares: kube-system-crowdsec@kubernetescrd
spec:
ingressClassName: traefik
rules:
- host: s3.arcodange.fr
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: minio
port:
number: 9000