PLATAFORMA_ADMIN_TOKEN e PLATAFORMA_WEBHOOK_TOKEN. Os dois sao gerados aqui, ao
contrario da api-key do Asaas, que vem do painel do provedor.
O valor nasceu, foi selado e morreu dentro de um unico shell no servidor: nao
foi ecoado, nao foi para arquivo, nao entrou no historico e nao apareceu em ps.
O que se commita e o cifrado, que e publico por natureza.
Vao SOZINHOS neste commit, sem a referencia no Deployment: secretKeyRef de
Secret ausente impede o pod de subir. Primeiro o Secret materializa, depois o
env aponta para ele.
O webhook-token precisa ser CADASTRADO no painel do Asaas com o mesmo valor. Ele
pode ser lido uma vez, por quem for cadastrar:
kubectl -n plataforma-prod get secret plataforma-webhook-token \
-o jsonpath='{.data.token}' | base64 -d
O Ingress do plataforma nao tem catch-all, por desenho: rota publica nova
precisa ser acrescentada a mao, ou devolve 404. Duas estavam faltando, as duas
achadas por scripts/conferir_rotas_publicas.py.
/api/public/conta (P5.8) — a tela de espera depois do pagamento. Quem acabou de
pagar AINDA NAO TEM CONTA, logo nao tem token. O controlador existia
(EstadoDaContaController) e a cadeia ja liberava (permitAll), mas o Ingress
devolvia 404: a tela que existe para tranquilizar quem pagou nao respondia.
/api/public/webhooks/assinatura (P5.1) — e outra coisa do webhooks/asaas que ja
estava la: aquele avisa que uma COBRANCA de cliente foi paga e vai para o
financeiro do tenant; este avisa que alguem assinou a Athletic Map, e dispara o
provisionamento de um tenant NOVO. Contas diferentes no Asaas, servicos
diferentes aqui. Sem esta linha, alguem assinaria, pagaria, e nenhum tenant
seria criado — sem erro em lugar nenhum do nosso lado.
O ipBlock da deny-cross-tenant nao vale para destino em outro namespace (o k3s
avalia depois do DNAT), entao a variavel sozinha daria FalhaTemporaria. Vai
junto a netpol estreita: so o servico-captacao, so o pod do controlador, so a
porta 8080, so saida.
O pod resolvia api.asaas.com e a conexao TCP morria em 5ms. O deny-cross-tenant
fecha egress e nao tinha regra para IP publico. O except das faixas privadas
preserva o isolamento entre tenants, que e o proposito da politica.
O realm do molde nao tinha os papeis que o SecurityConfig dos servicos verifica.
Acrescentados ao ConfigMap de import e a copia em realm/. Nao afeta o realm que
ja existe — o Keycloak so importa realm inexistente.
Com servico-financeiro:1.0 o Flyway aplicava so a V001: a imagem antecede
V002..V007 e a tabela plano_financeiro nem era criada. As tags do molde nao eram
usadas por nenhum tenant do cluster.
O caminho anterior, /api/public/leads/health, nao existe: o LeadController tem um
unico @PostMapping. O pod subia e ficava 0/1 com a aplicacao dizendo Started no
log.
A quota copiada do molde (limits.cpu 4) impedia Keycloak, bff e captacao de criar
pod: os 8 deployments somam 6,2 CPU de limites. Redimensionada para 8 CPU / 8Gi,
e nao copiada do piloto, que roda 18 deployments.
O postgres ficava em ContainerCreating por montar um volume `postgres-tls` que
nao existia: e a mudanca de P2.2, preparada e nunca aplicada neste cluster.
Certificado gerado e selado para este namespace.
Acrescentado o 60-monitoring-netpol.yaml, que nao existia no molde. Sem ele o
tenant funciona e fica invisivel no Grafana. Seleciona os cinco pods de aplicacao
que existem aqui, e nao `app: backend` como o do piloto.
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.