# Ingress for the informed-decision approver surface on decisions.coulomb.social. # # Requires cert-manager ClusterIssuer letsencrypt-prod and DNS # decisions.coulomb.social -> cluster IP (A record confirmed 2026-09-10). # # ONE path rule on purpose. reuse-surface reported (2026-07-07) that a host # carrying an Exact /health rule alongside a catch-all `/` Prefix rule had the # exact match swallowed by the catch-all, so the public health URL 404'd while # the pod was healthy. Splitting /auth, /api and / across backends here would # reproduce that. Everything on this host stays on one backend; if the surface # ever needs a second one, set traefik.ingress.kubernetes.io/router.priority # explicitly rather than relying on rule order. apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: informed-decision namespace: informed-decision annotations: cert-manager.io/cluster-issuer: letsencrypt-prod # websecure only (forgejo/coulomb-social pattern): leave HTTP free for # cert-manager HTTP-01 solvers. TLS app traffic stays on 443; the ACME # challenge uses the solver ingress on 80. traefik.ingress.kubernetes.io/router.entrypoints: websecure traefik.ingress.kubernetes.io/router.tls: "true" spec: ingressClassName: traefik tls: - hosts: [decisions.coulomb.social] secretName: informed-decision-tls rules: - host: decisions.coulomb.social http: paths: - path: / pathType: Prefix backend: service: name: informed-decision port: number: 80