From 4da96a831474bd38d810da3ec50608995cca6e10 Mon Sep 17 00:00:00 2001 From: Cristian Felipe Cruz Buitron Date: Mon, 17 Aug 2026 00:45:51 -0500 Subject: [PATCH] fix(frontend): agregar runAsUser explicito, runAsNonRoot solo no alcanza Detectado en vivo: el pod nuevo fallaba con CreateContainerConfigError -- 'container has runAsNonRoot and image has non-numeric user (nextjs), cannot verify user is non-root'. El Dockerfile define el usuario por nombre (useradd ... nextjs), Kubernetes no puede confirmar el UID real sin arrancar el contenedor. Se agrega runAsUser: 1001 explicito (coincide con el --uid 1001 del useradd real del Dockerfile). Los 2 pods viejos siguieron sirviendo trafico sin interrupcion mientras tanto. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_011FqYP3Wf1W63Qmh7qgXAAT --- .../ecommerce/frontend/patches/deployment.yaml | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/workloads/ecommerce/frontend/patches/deployment.yaml b/workloads/ecommerce/frontend/patches/deployment.yaml index 4c5774a..7996421 100644 --- a/workloads/ecommerce/frontend/patches/deployment.yaml +++ b/workloads/ecommerce/frontend/patches/deployment.yaml @@ -19,6 +19,10 @@ spec: labels: app: frontend spec: + # runAsUser explícito -- ver comentario largo más abajo, junto al + # container, sobre por qué runAsNonRoot solo no alcanza acá. + securityContext: + runAsUser: 1001 containers: - name: app image: gitea.cruzcloud.net/devops/ecommerce-frontend:v1.0.104 @@ -45,8 +49,15 @@ spec: path: /api/health port: http # El Dockerfile de frontend ya corre como usuario "nextjs" no-root - # (a diferencia de docs-portal) -- runAsNonRoot: true del base - # se queda tal cual, sin override. + # (a diferencia de docs-portal) -- pero runAsNonRoot: true del + # base SOLO no alcanza: probado en vivo, falló con "container + # has runAsNonRoot and image has non-numeric user (nextjs), + # cannot verify user is non-root". El Dockerfile define el + # usuario por NOMBRE (useradd ... nextjs), y sin un runAsUser + # numérico Kubernetes no puede confirmar que no sea root sin + # arrancar el contenedor -- y por eso rechaza arrancarlo. El + # UID real es 1001 (useradd --uid 1001 ... nextjs en el + # Dockerfile). # # Sí hace falta NET_BIND_SERVICE: el puerto real es 80 # (privilegiado, <1024). El Dockerfile ya hace setcap sobre el