From bba57209754b52b5790cdfb87dc6065769b4fb0d Mon Sep 17 00:00:00 2001 From: ilopez Date: Mon, 25 May 2026 10:28:50 -0500 Subject: [PATCH] fix(chart): NetworkPolicy egress 0.0.0.0/0 :443+:6443 (RKE2/DO public IP DNAT) Validacion en cluster tenant DO destapo el issue: el Service `kubernetes` en ns default tiene endpoint a la IP PUBLICA del Droplet:6443, no a una ClusterIP intra-cluster. kube-proxy DNATea 10.43.0.1:443 -> public-ip:6443. Calico aplica las NetworkPolicy egress rules contra la IP de DESTINO POST-DNAT, asi que namespaceSelector "default" no matchea (no hay pod selector aplicable). ipBlock 0.0.0.0/0 cubre ambos: apiserver public-ip:6443 + Harbor:443. Trade-off de seguridad menor (egress permitido a IPs externas por 443/6443) aceptable para Golden Path: las apps web necesitan llegar a apiserver y posiblemente a HTTPS externos (APIs publicas). Endurecimiento P3 con egress NetworkPolicy mas granular cuando haya use cases especificos. Co-Authored-By: Claude Opus 4.7 --- helm/APP_NAME/templates/networkpolicy.yaml | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/helm/APP_NAME/templates/networkpolicy.yaml b/helm/APP_NAME/templates/networkpolicy.yaml index 309309a..46a8ac0 100644 --- a/helm/APP_NAME/templates/networkpolicy.yaml +++ b/helm/APP_NAME/templates/networkpolicy.yaml @@ -76,13 +76,24 @@ spec: port: 3306 - protocol: TCP port: 6033 - # kube-apiserver (10.43.0.1:443) y Harbor pull (registro de imágenes). - # 0.0.0.0/0:443 cubre ambos. El InitContainer wait-for-secret del Job - # Alembic necesita egress al apiserver para hacer GET secret via REST API. + # kube-apiserver + Harbor pull (registro externo). + # + # NOTA RKE2/DO: el Service `kubernetes` (ns default) tiene endpoint hacia + # la IP PUBLICA del Droplet en port 6443 (no ClusterIP intra-cluster). Por + # eso namespaceSelector "default" NO funciona — kube-proxy DNATea + # 10.43.0.1:443 a la public IP:6443 del nodo. Calico aplica la regla NP + # contra la IP de destino post-DNAT, asi que requiere ipBlock que cubra + # la public IP. + # + # ipBlock 0.0.0.0/0 cubre ambos: apiserver public IP:6443 + Harbor:443. + # El InitContainer wait-for-secret del Job Alembic necesita esto para + # REST API call. - to: - ipBlock: cidr: 0.0.0.0/0 ports: - protocol: TCP port: 443 + - protocol: TCP + port: 6443 {{- end }}