fix(N16): resumo diario pelo Service interno do captacao (o nome publico nao conecta de dentro do cluster); regras de rede tenants<->captacao 8083

This commit is contained in:
deploy
2026-09-29 17:49:39 +00:00
parent 15b3ae7e95
commit 8f437c7d59
11 changed files with 113 additions and 10 deletions
@@ -162,6 +162,8 @@ spec:
- { protocol: TCP, port: 5432 }
- { protocol: TCP, port: 6432 }
- { protocol: TCP, port: 8080 }
# captacao (N16, 2026-09-29): o resumo diario vai pelo Service interno.
- { protocol: TCP, port: 8083 }
# 4. HTTPS para a internet publica. Ver o cabecalho: nao da para estreitar
# com flannel, e uma lista de CIDR de SaaS quebraria a cobranca sem aviso.
+2 -2
View File
@@ -12,7 +12,7 @@
# 1. token do client `operacao` no realm do tenant (o mesmo das tarefas do
# financeiro: Secret `operacao-credentials`);
# 2. GET http://runtime-operacao/api/resumo-do-tenant (lista de 1 ou 2 meses);
# 3. POST https://plataforma.athleticmap.com/api/public/resumo-do-tenant/{{TENANT}}
# 3. POST http://servico-captacao.plataforma-prod.svc/api/public/resumo-do-tenant/{{TENANT}}
# com o cabecalho `x-atm-resumo-token` — do Secret `resumo-credentials`, que
# so vale para ESTE tenant (HMAC do nome dele com a chave da plataforma).
#
@@ -117,7 +117,7 @@ spec:
- name: ISSUER_HOST
value: auth.athleticmap.com
- name: DESTINO
value: https://plataforma.athleticmap.com/api/public/resumo-do-tenant/{{TENANT}}
value: http://servico-captacao.plataforma-prod.svc/api/public/resumo-do-tenant/{{TENANT}}
- name: CLIENT_SECRET
valueFrom:
secretKeyRef:
@@ -0,0 +1,18 @@
# N16 (2026-09-29): saida do CronJob do resumo para o captacao da plataforma, pelo
# Service interno (porta 8083 do pod). Par da 23-netpol-tenants-no-captacao da plataforma.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: egress-captacao-compartilhado
namespace: acme-prod
spec:
podSelector: {}
policyTypes: [Egress]
egress:
- to:
- namespaceSelector:
matchLabels: { kubernetes.io/metadata.name: plataforma-prod }
podSelector:
matchLabels: { app: servico-captacao }
ports:
- { protocol: TCP, port: 8083 }
+2 -2
View File
@@ -12,7 +12,7 @@
# 1. token do client `operacao` no realm do tenant (o mesmo das tarefas do
# financeiro: Secret `operacao-credentials`);
# 2. GET http://runtime-operacao/api/resumo-do-tenant (lista de 1 ou 2 meses);
# 3. POST https://plataforma.athleticmap.com/api/public/resumo-do-tenant/acme
# 3. POST http://servico-captacao.plataforma-prod.svc/api/public/resumo-do-tenant/acme
# com o cabecalho `x-atm-resumo-token` — do Secret `resumo-credentials`, que
# so vale para ESTE tenant (HMAC do nome dele com a chave da plataforma).
#
@@ -117,7 +117,7 @@ spec:
- name: ISSUER_HOST
value: auth.athleticmap.com
- name: DESTINO
value: https://plataforma.athleticmap.com/api/public/resumo-do-tenant/acme
value: http://servico-captacao.plataforma-prod.svc/api/public/resumo-do-tenant/acme
- name: CLIENT_SECRET
valueFrom:
secretKeyRef:
@@ -0,0 +1,18 @@
# N16 (2026-09-29): saida do CronJob do resumo para o captacao da plataforma, pelo
# Service interno (porta 8083 do pod). Par da 23-netpol-tenants-no-captacao da plataforma.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: egress-captacao-compartilhado
namespace: demo-prod
spec:
podSelector: {}
policyTypes: [Egress]
egress:
- to:
- namespaceSelector:
matchLabels: { kubernetes.io/metadata.name: plataforma-prod }
podSelector:
matchLabels: { app: servico-captacao }
ports:
- { protocol: TCP, port: 8083 }
+2 -2
View File
@@ -12,7 +12,7 @@
# 1. token do client `operacao` no realm do tenant (o mesmo das tarefas do
# financeiro: Secret `operacao-credentials`);
# 2. GET http://runtime-operacao/api/resumo-do-tenant (lista de 1 ou 2 meses);
# 3. POST https://plataforma.athleticmap.com/api/public/resumo-do-tenant/demo
# 3. POST http://servico-captacao.plataforma-prod.svc/api/public/resumo-do-tenant/demo
# com o cabecalho `x-atm-resumo-token` — do Secret `resumo-credentials`, que
# so vale para ESTE tenant (HMAC do nome dele com a chave da plataforma).
#
@@ -117,7 +117,7 @@ spec:
- name: ISSUER_HOST
value: auth.athleticmap.com
- name: DESTINO
value: https://plataforma.athleticmap.com/api/public/resumo-do-tenant/demo
value: http://servico-captacao.plataforma-prod.svc/api/public/resumo-do-tenant/demo
- name: CLIENT_SECRET
valueFrom:
secretKeyRef:
@@ -0,0 +1,18 @@
# N16 (2026-09-29): saida do CronJob do resumo para o captacao da plataforma, pelo
# Service interno (porta 8083 do pod). Par da 23-netpol-tenants-no-captacao da plataforma.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: egress-captacao-compartilhado
namespace: escolinha-prod
spec:
podSelector: {}
policyTypes: [Egress]
egress:
- to:
- namespaceSelector:
matchLabels: { kubernetes.io/metadata.name: plataforma-prod }
podSelector:
matchLabels: { app: servico-captacao }
ports:
- { protocol: TCP, port: 8083 }
+2 -2
View File
@@ -12,7 +12,7 @@
# 1. token do client `operacao` no realm do tenant (o mesmo das tarefas do
# financeiro: Secret `operacao-credentials`);
# 2. GET http://runtime-operacao/api/resumo-do-tenant (lista de 1 ou 2 meses);
# 3. POST https://plataforma.athleticmap.com/api/public/resumo-do-tenant/escolinha
# 3. POST http://servico-captacao.plataforma-prod.svc/api/public/resumo-do-tenant/escolinha
# com o cabecalho `x-atm-resumo-token` — do Secret `resumo-credentials`, que
# so vale para ESTE tenant (HMAC do nome dele com a chave da plataforma).
#
@@ -117,7 +117,7 @@ spec:
- name: ISSUER_HOST
value: auth.athleticmap.com
- name: DESTINO
value: https://plataforma.athleticmap.com/api/public/resumo-do-tenant/escolinha
value: http://servico-captacao.plataforma-prod.svc/api/public/resumo-do-tenant/escolinha
- name: CLIENT_SECRET
valueFrom:
secretKeyRef:
@@ -0,0 +1,18 @@
# N16 (2026-09-29): saida do CronJob do resumo para o captacao da plataforma, pelo
# Service interno (porta 8083 do pod). Par da 23-netpol-tenants-no-captacao da plataforma.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: egress-captacao-compartilhado
namespace: piloto-prod
spec:
podSelector: {}
policyTypes: [Egress]
egress:
- to:
- namespaceSelector:
matchLabels: { kubernetes.io/metadata.name: plataforma-prod }
podSelector:
matchLabels: { app: servico-captacao }
ports:
- { protocol: TCP, port: 8083 }
+2 -2
View File
@@ -12,7 +12,7 @@
# 1. token do client `operacao` no realm do tenant (o mesmo das tarefas do
# financeiro: Secret `operacao-credentials`);
# 2. GET http://runtime-operacao/api/resumo-do-tenant (lista de 1 ou 2 meses);
# 3. POST https://plataforma.athleticmap.com/api/public/resumo-do-tenant/piloto
# 3. POST http://servico-captacao.plataforma-prod.svc/api/public/resumo-do-tenant/piloto
# com o cabecalho `x-atm-resumo-token` — do Secret `resumo-credentials`, que
# so vale para ESTE tenant (HMAC do nome dele com a chave da plataforma).
#
@@ -117,7 +117,7 @@ spec:
- name: ISSUER_HOST
value: auth.athleticmap.com
- name: DESTINO
value: https://plataforma.athleticmap.com/api/public/resumo-do-tenant/piloto
value: http://servico-captacao.plataforma-prod.svc/api/public/resumo-do-tenant/piloto
- name: CLIENT_SECRET
valueFrom:
secretKeyRef:
@@ -0,0 +1,29 @@
# N16 (2026-09-29): o CronJob `resumo-para-a-plataforma` de cada tenant entrega o
# resumo diario ao captacao pelo Service interno — de dentro do cluster o nome
# publico nao conecta (hairpin pelo balanceador). Mesmo padrao do
# 16-netpol-tenants-no-keycloak: tenants novos pelo label, os 4 antigos pelo nome.
# So a porta do captacao; nenhum outro pod da plataforma fica exposto.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: tenants-no-captacao
namespace: plataforma-prod
spec:
podSelector:
matchLabels: { app: servico-captacao }
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: 8083 }