Files
athletic-map-deploy/tenants/acme/30-apps-stubs.yaml
T

106 lines
4.8 KiB
YAML

# Apps do tenant acme:
# - backend: Spring Boot OAuth2 Resource Server (imagem athletic-map-backend:1.0, importada no k3s)
# - frontend: SPA OIDC Authorization Code + PKCE (keycloak-js) chamando /api/me
# - bff: stub (whoami) — sera substituido na evolucao
---
apiVersion: apps/v1
kind: Deployment
metadata: { name: backend, namespace: acme-prod, labels: { app: backend } }
spec:
replicas: 1
selector: { matchLabels: { app: backend } }
template:
metadata: { labels: { app: backend } }
spec:
containers:
- name: backend
image: docker.io/library/athletic-map-backend:1.3
imagePullPolicy: Never
env:
- { name: ATM_JWK_SET_URI, value: "http://keycloak:8080/realms/athleticmap/protocol/openid-connect/certs" }
- { name: ATM_ISSUER, value: "https://auth-acme.athleticmap.com/realms/athleticmap" }
- { name: ATM_TENANT, value: "acme" }
ports: [{ containerPort: 8083 }]
readinessProbe:
httpGet: { path: /api/public/health, port: 8083 }
initialDelaySeconds: 20
periodSeconds: 10
failureThreshold: 24
---
apiVersion: v1
kind: Service
metadata: { name: backend, namespace: acme-prod, labels: { app: backend } }
spec:
selector: { app: backend }
ports: [{ name: http, port: 80, targetPort: 8083 }]
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: acme
namespace: acme-prod
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
traefik.ingress.kubernetes.io/router.middlewares: acme-prod-redirect-https@kubernetescrd
spec:
ingressClassName: traefik
tls:
- hosts:
- acme.athleticmap.influxdigital.com.br
- acme.athleticmap.com
- auth-acme.athleticmap.influxdigital.com.br
- auth-acme.athleticmap.com
secretName: acme-tls
rules:
- host: acme.athleticmap.influxdigital.com.br
http:
paths:
# P4.6: o nginx da SPA resolve /bff e /api/<contexto> por dentro.
#
# Ate 2026-09-22 havia UMA linha por contexto aqui, mais o /bff — catorze
# ao todo. Cada mudanca de topologia obrigava a editar o Ingress de todos
# os tenants; agora quem conhece a topologia interna e o
# `frontend/nginx.conf.template`, que viaja junto com a imagem.
#
# O destino deste /api mudou de `backend` (o legado) para `frontend-spa`.
# **O que o visitante ve NAO muda:** um caminho nao mapeado continua
# recebendo 401 — antes do backend legado, agora do BFF, para onde o
# nginx manda o /api que sobra. A decisao "401 ou 404" segue aberta e
# intacta; isto so tira o legado do caminho do trafego.
#
# ORDEM: `/api/public` e `/api/public/webhooks/asaas` vivem no
# `96-ingress-garmin-public.yaml` e tem prefixo MAIS LONGO, entao vencem
# este — o Traefik ordena por tamanho. Conferido.
- { path: /api, pathType: Prefix, backend: { service: { name: frontend-spa, port: { number: 80 } } } }
- { path: /, pathType: Prefix, backend: { service: { name: frontend-spa, port: { number: 80 } } } }
- host: acme.athleticmap.com
http:
paths:
# P4.6: o nginx da SPA resolve /bff e /api/<contexto> por dentro.
#
# Ate 2026-09-22 havia UMA linha por contexto aqui, mais o /bff — catorze
# ao todo. Cada mudanca de topologia obrigava a editar o Ingress de todos
# os tenants; agora quem conhece a topologia interna e o
# `frontend/nginx.conf.template`, que viaja junto com a imagem.
#
# O destino deste /api mudou de `backend` (o legado) para `frontend-spa`.
# **O que o visitante ve NAO muda:** um caminho nao mapeado continua
# recebendo 401 — antes do backend legado, agora do BFF, para onde o
# nginx manda o /api que sobra. A decisao "401 ou 404" segue aberta e
# intacta; isto so tira o legado do caminho do trafego.
#
# ORDEM: `/api/public` e `/api/public/webhooks/asaas` vivem no
# `96-ingress-garmin-public.yaml` e tem prefixo MAIS LONGO, entao vencem
# este — o Traefik ordena por tamanho. Conferido.
- { path: /api, pathType: Prefix, backend: { service: { name: frontend-spa, port: { number: 80 } } } }
- { path: /, pathType: Prefix, backend: { service: { name: frontend-spa, port: { number: 80 } } } }
- host: auth-acme.athleticmap.influxdigital.com.br
http:
paths:
- { path: /, pathType: Prefix, backend: { service: { name: keycloak, port: { number: 8080 } } } }
- host: auth-acme.athleticmap.com
http:
paths:
- { path: /, pathType: Prefix, backend: { service: { name: keycloak, port: { number: 8080 } } } }