fix(plataforma): tenants alcancam o Keycloak compartilhado (JWKS) -- sem isto todo acesso logado dos tenants provisionados voltava 401

This commit is contained in:
deploy
2026-09-26 17:19:14 +00:00
parent 3a2824bfa8
commit 8cf23987cd
@@ -0,0 +1,45 @@
# =============================================================================
# Os tenants CHEGAM ao Keycloak compartilhado — para baixar as chaves (JWKS)
# que validam o login, e para o client `operacao` pedir token.
#
# FALTAVA, e o efeito era TODO acesso logado dos tenants provisionados
# recusado. Medido em 2026-09-26: um token VALIDO do realm do `teste5`,
# emitido por este Keycloak, voltou 401 do BFF do teste5 — o log mostrava o
# `NimbusJwtDecoder` sem conseguir baixar o JWKS de
# `keycloak.plataforma-prod.svc:8080`. Os tenants TINHAM a saida liberada (a
# `deny-cross-tenant` deles abre 8080 para `plataforma-prod`); faltava a
# ENTRADA deste lado. A `deny-cross-tenant` daqui so aceita o proprio
# namespace e o kube-system.
#
# Nao aparecia em log nenhum ate alguem logar: o JWKS so e buscado na primeira
# requisicao autenticada. Zero erro no log e "ninguem usou", nao "funciona".
#
# Mesmo desenho da `tenants-no-pgbouncer` (15-): so a porta 8080, so o pod do
# Keycloak, por rotulo `athleticmap.io/tenant` para todo tenant provisionado,
# e por nome para os quatro antigos (criados a mao, sem o rotulo), que migram
# para este Keycloak a partir de 2026-09-26 (card 156 / P4.8).
# =============================================================================
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: tenants-no-keycloak
namespace: plataforma-prod
spec:
podSelector:
matchLabels: { app: keycloak }
policyTypes: [Ingress]
ingress:
- from:
- namespaceSelector:
matchExpressions:
- { key: athleticmap.io/tenant, operator: Exists }
- namespaceSelector:
matchLabels: { kubernetes.io/metadata.name: piloto-prod }
- namespaceSelector:
matchLabels: { kubernetes.io/metadata.name: demo-prod }
- namespaceSelector:
matchLabels: { kubernetes.io/metadata.name: acme-prod }
- namespaceSelector:
matchLabels: { kubernetes.io/metadata.name: escolinha-prod }
ports:
- { protocol: TCP, port: 8080 }