ea7da4364a
Namespace, banco, Keycloak e realm proprios, separados dos clientes e do tenant de demonstracao. Leva 4 contextos (configuracao, cadastro, financeiro, captacao) mais bff e SPA, e nao os 13 de um cliente: a Athletic Map nao e escolinha. Ingress escrito do zero, sem o stub backend legado e sem catch-all /api. Duas rotas publicas, ambas por desenho: /api/public/leads (o formulario da landing page) e /api/public/webhooks/asaas (o aviso de pagamento, que chega da internet sem token nosso). Dominio em *.athleticmap.influxdigital.com.br, e nao no canonico athleticmap.com do P0.9: aquele ainda nao tem registro A, e com desafio HTTP-01 nascer nele daria certificado nao emitido e login quebrado. Tres SealedSecret gerados para ESTE namespace, e a chave publica do backup no lugar do placeholder. As 7 imagens locais exigidas estao no no, incluindo servico-captacao:1.0 e atm-pg-backup:1.0, construidas hoje. Preparado em P3.1 a P3.4. Validado com kubectl --dry-run: 32 documentos.
94 lines
5.1 KiB
YAML
94 lines
5.1 KiB
YAML
# Ingress do tenant `plataforma`.
|
|
#
|
|
# ── Por que este arquivo foi escrito, e nao copiado ───────────────────────────
|
|
#
|
|
# O piloto guarda o Ingress dentro de `30-apps-stubs.yaml`, junto com o stub
|
|
# `backend`. Copiar aquele arquivo traria duas coisas que este tenant nao deve
|
|
# herdar:
|
|
#
|
|
# 1. O proprio stub `backend`, que P0.5 mediu nao atender trafego nenhum (11
|
|
# requisicoes externas em 50 dias, todas 401) e que esta em fila para ser
|
|
# aposentado. Tenant novo nao nasce com divida.
|
|
# 2. A rota catch-all `/api` -> `backend`. Aqui nao ha catch-all: o que nao
|
|
# casa com um prefixo conhecido devolve 404, que e a resposta honesta.
|
|
#
|
|
# Os nomes de Service tambem divergem de proposito: o piloto publica `frontend`,
|
|
# e aqui o Service se chama `frontend-spa` (veja `95-frontend-spa.yaml`). Copiar
|
|
# o do piloto daria um Ingress apontando para um Service inexistente.
|
|
#
|
|
# ── Por que o dominio e `.influxdigital.com.br`, e nao `.athleticmap.com` ─────
|
|
#
|
|
# O canonico decidido com o usuario em 2026-09-16 (P0.9) e
|
|
# `<tenant>.athleticmap.com`. Ele ainda NAO vale, e nascer nele hoje quebraria
|
|
# justamente o criterio deste card ("login funciona"):
|
|
#
|
|
# - `plataforma.athleticmap.com` e `auth-plataforma.athleticmap.com` nao tem
|
|
# registro A nenhum (conferido em 2026-09-17 por nslookup);
|
|
# - o apex `athleticmap.com` resolve para 72.61.42.87, que NAO e o cluster —
|
|
# o cluster e 187.77.37.184;
|
|
# - cert-manager usa desafio HTTP-01, entao sem o host resolvindo para o
|
|
# cluster o certificado nao e emitido, e sem certificado nao ha login.
|
|
#
|
|
# Ja `*.athleticmap.influxdigital.com.br` e wildcard para o cluster (conferido:
|
|
# ate um subdominio inventado resolve para 187.77.37.184). Entao este tenant
|
|
# sobe hoje e atravessa o corte de dominio junto com os demais, no passo 5 do
|
|
# `docs/p09-plano-de-corte-dominio.md` — e nao numa migracao propria.
|
|
#
|
|
# ── As rotas publicas ────────────────────────────────────────────────────────
|
|
#
|
|
# Duas, e ambas por desenho:
|
|
#
|
|
# `/api/public/leads` quem preenche o formulario da landing page
|
|
# ainda nao e cliente, e portanto nao tem token.
|
|
# `/api/public/webhooks/asaas` o aviso de pagamento chega dos servidores do
|
|
# provedor, que tambem nao tem token nosso; quem
|
|
# autentica e o cabecalho `asaas-access-token`.
|
|
#
|
|
# Nenhuma outra rota esta aberta, e nao ha catch-all — o que significa que uma
|
|
# rota publica NOVA em qualquer servico precisa ser acrescentada aqui a mao, ou
|
|
# devolve 404. O `scripts/conferir_rotas_publicas.py` existe para isso nao
|
|
# depender de alguem lembrar.
|
|
apiVersion: networking.k8s.io/v1
|
|
kind: Ingress
|
|
metadata:
|
|
name: plataforma
|
|
namespace: plataforma-prod
|
|
annotations:
|
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
|
traefik.ingress.kubernetes.io/router.middlewares: plataforma-prod-redirect-https@kubernetescrd
|
|
spec:
|
|
ingressClassName: traefik
|
|
tls:
|
|
- hosts:
|
|
- plataforma.athleticmap.influxdigital.com.br
|
|
- auth-plataforma.athleticmap.influxdigital.com.br
|
|
secretName: plataforma-tls
|
|
rules:
|
|
- host: plataforma.athleticmap.influxdigital.com.br
|
|
http:
|
|
paths:
|
|
# PUBLICA — sem token, por desenho. Vem primeiro porque o Traefik
|
|
# ordena por tamanho do prefixo, mas deixar explicito evita que alguem
|
|
# reordene sem perceber.
|
|
- { path: /api/public/leads, pathType: Prefix, backend: { service: { name: servico-captacao, port: { number: 80 } } } }
|
|
|
|
# PUBLICA — o aviso de pagamento do Asaas, que chega da internet sem
|
|
# token nenhum (P3.3). NAO casa com /api/financeiro: o controlador
|
|
# atende em /api/public/webhooks/asaas, e como aqui nao ha catch-all,
|
|
# a ausencia desta linha daria 404 em todo aviso — a cobranca seria
|
|
# paga e nunca baixada. Quem autentica e o cabecalho
|
|
# `asaas-access-token`, conferido no WebhookAsaasController.
|
|
- { path: /api/public/webhooks/asaas, pathType: Prefix, backend: { service: { name: servico-financeiro, port: { number: 80 } } } }
|
|
|
|
# O resto exige token, como em qualquer tenant.
|
|
- { path: /api/configuracao, pathType: Prefix, backend: { service: { name: servico-configuracao, port: { number: 80 } } } }
|
|
- { path: /api/cadastro, pathType: Prefix, backend: { service: { name: servico-cadastro, port: { number: 80 } } } }
|
|
- { path: /api/financeiro, pathType: Prefix, backend: { service: { name: servico-financeiro, port: { number: 80 } } } }
|
|
- { path: /bff, pathType: Prefix, backend: { service: { name: servico-bff, port: { number: 80 } } } }
|
|
- { path: /, pathType: Prefix, backend: { service: { name: frontend-spa, port: { number: 80 } } } }
|
|
|
|
- host: auth-plataforma.athleticmap.influxdigital.com.br
|
|
http:
|
|
paths:
|
|
- { path: /, pathType: Prefix, backend: { service: { name: keycloak, port: { number: 8080 } } } }
|