Files
athletic-map-deploy/tenants/plataforma/18-netpol-sealed-secrets.yaml
T
deploy 8e0a2a8f18 feat(plataforma): o certificado de selagem vem do controlador, pela URL
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.
2026-09-22 13:07:28 +00:00

61 lines
2.7 KiB
YAML

# =============================================================================
# P5.3 — o provisionamento alcanca o controlador do sealed-secrets.
#
# ── POR QUE, E POR QUE SO AGORA ─────────────────────────────────────────────
#
# A etapa `SEGREDOS_SELADOS` precisa do certificado PUBLICO do controlador. Ate
# 2026-09-22 ela o lia de um ARQUIVO; desde entao aceita tambem a URL
# `http://sealed-secrets-controller.kube-system:8080/v1/cert.pem`, que e a forma
# recomendada — o controlador ROTACIONA a chave a cada 30 dias (medido: 16/06,
# 16/07, 15/08, 14/09), e um arquivo versionado nasce certo e fica velho em um
# mes, EM SILENCIO.
#
# ── O MESMO DEFEITO DO 17-netpol-api-do-kubernetes, PELA MESMA CAUSA ────────
#
# Medido em 2026-09-22, de dentro do pod do `servico-captacao`:
#
# getent hosts sealed-secrets-controller.kube-system -> 10.43.71.152 OK
# curl http://sealed-secrets-controller.kube-system:8080/v1/cert.pem
# -> HTTP 000, exit 7
#
# O nome RESOLVE e a conexao NAO sai. A `deny-cross-tenant` libera
# `ipBlock: 10.43.0.0/16`, que cobre o ClusterIP `10.43.71.152` — e nao adianta:
# **o controlador de rede do k3s avalia DEPOIS do DNAT**, e ali o destino ja e o
# IP do POD do controlador (`10.42.x.x`), que nao casa com nenhuma regra.
#
# E a mesma armadilha que fez a API do Kubernetes devolver `000` em 2026-09-20,
# e vale registrar que ela se repete: `ipBlock` com ClusterIP nao protege nem
# libera nada para destino em OUTRO namespace.
#
# ── POR QUE ESTA REGRA E ESTREITA ───────────────────────────────────────────
#
# `podSelector` por app: so o `servico-captacao` sela segredo; nenhum outro pod
# do namespace tem o que pedir ao controlador.
#
# O destino e o POD do controlador, por rotulo, e nao o namespace inteiro —
# `namespaceSelector` sozinho abriria a porta 8080 de TODO o kube-system.
#
# Saida apenas; o controlador nunca inicia conversa conosco.
# =============================================================================
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: egress-sealed-secrets
namespace: plataforma-prod
spec:
podSelector:
matchLabels:
app: servico-captacao
policyTypes: [Egress]
egress:
- to:
- namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: kube-system
podSelector:
matchLabels:
name: sealed-secrets-controller
ports:
- port: 8080
protocol: TCP