Files
athletic-map-deploy/tenants/plataforma/17-netpol-api-do-kubernetes.yaml
T

45 lines
1.9 KiB
YAML

# =============================================================================
# P5.6/P5.9 — o provisionamento alcanca a API do Kubernetes.
#
# ── O QUE ESTAVA ACONTECENDO (achado em 2026-09-20, com o RBAC ja no ar) ────
#
# Com o ClusterRole e o RoleBinding aplicados, um `curl` de dentro do pod do
# `servico-captacao` ainda devolvia `000` — nem chegava a receber 403. A
# internet respondia (200 de fora), a API nao.
#
# O motivo: a `deny-cross-tenant` deste namespace libera saida para
# `ipBlock: 0.0.0.0/0` **na porta 443**, e a API do k3s atende na **6443**. O
# pod fala com `10.43.0.1:443` (o ClusterIP do Service `kubernetes`), mas o
# controlador de rede avalia DEPOIS do DNAT — e ali o destino ja e
# `187.77.37.184:6443`, que nao casa com nenhuma regra.
#
# Sem esta politica o RBAC nao adianta: a etapa de espera de rollout (P5.6) e a
# de suspensao (P5.9) falham por REDE, com uma mensagem que fala de HTTP.
#
# ── O IP ESTA ESCRITO AQUI, E ISSO E LIMITACAO DA FERRAMENTA ────────────────
#
# NetworkPolicy so entende IP e porta; nao existe "o Service kubernetes" como
# destino. O endereco e o do no (`kubectl -n default get endpoints kubernetes`).
# **No dia em que o no mudar de IP, este arquivo muda junto** — e o sintoma
# sera de novo `000` no lugar de 403.
#
# So o `servico-captacao` precisa disso: nenhum outro pod do namespace fala com
# a API. Por isso o `podSelector` e por app, e nao vazio.
# =============================================================================
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: egress-api-do-kubernetes
namespace: plataforma-prod
spec:
podSelector:
matchLabels:
app: servico-captacao
policyTypes: [Egress]
egress:
- to:
- ipBlock:
cidr: 187.77.37.184/32
ports:
- { protocol: TCP, port: 6443 }