diff --git a/helm/APP_NAME/templates/networkpolicy.yaml b/helm/APP_NAME/templates/networkpolicy.yaml index 465568b..309309a 100644 --- a/helm/APP_NAME/templates/networkpolicy.yaml +++ b/helm/APP_NAME/templates/networkpolicy.yaml @@ -3,12 +3,30 @@ # - Ingress: rke2-ingress-nginx (web-backend público) + Prometheus (scrape de /metrics). # - Egress: DNS, Harbor (pull en startup), ns-addons del tenant (BD). # Nota: el cluster tenant usa rke2-ingress-nginx en kube-system, NO Traefik. +# Materializada como Helm hook (pre-install/pre-upgrade, weight "-8") para que +# este disponible ANTES de que el Job Alembic (hook weight 0) ejecute su +# InitContainer wait-for-secret — el InitContainer hace REST API call al +# kube-apiserver y necesita egress DNS + API permitidos. Sin esto, el chicken- +# and-egg con default-deny del namespace `apps` (entregado por stack-deployer) +# bloquea el hook → curl falla DNS → Job timeout → helm install fail → la +# NetworkPolicy nunca se aplica en la fase principal. +# +# Weight ordering (mas chico = antes): +# -10 AddonClaim -> -8 NetworkPolicy -> -7 Role/RoleBinding -> -5 SA -> 0 Job Alembic +# +# delete-policy: before-hook-creation (NO hook-succeeded): la fase principal del +# Deployment necesita la NetworkPolicy viva en runtime; solo se borra/recrea al +# inicio del proximo hook (idempotente entre upgrades). apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: {{ .Release.Name }} labels: {{- include "app.labels" . | nindent 4 }} + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-weight": "-8" + "helm.sh/hook-delete-policy": before-hook-creation spec: podSelector: matchLabels: @@ -58,7 +76,9 @@ spec: port: 3306 - protocol: TCP port: 6033 - # Harbor pull (registro de imágenes) + # 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. - to: - ipBlock: cidr: 0.0.0.0/0