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