diff --git a/workloads/docs-portal/patches/deployment.yaml b/workloads/docs-portal/patches/deployment.yaml index 3565ab4..8d4f719 100644 --- a/workloads/docs-portal/patches/deployment.yaml +++ b/workloads/docs-portal/patches/deployment.yaml @@ -26,20 +26,27 @@ spec: containers: - name: app image: gitea.cruzcloud.net/devops/docs-portal:v1.0.116 - # El base saca TODAS las capabilities. Corriendo como root en - # el puerto 80 (privilegiado), eso rompe el bind() -- incluso - # root necesita CAP_NET_BIND_SERVICE si se le sacan las demás. - # Mismo motivo que el runAsNonRoot de arriba: se resuelve del - # todo cuando docs-portal pase a nginx-unprivileged (puerto - # 8080, no privilegiado, no necesita esta capability). + # El base saca TODAS las capabilities. Probado en vivo y + # revertido: con drop: ALL (aunque se agregue NET_BIND_SERVICE + # de vuelta) el propio entrypoint de nginx:1.27-alpine falla al + # arrancar -- necesita CAP_CHOWN para el chown() que hace sobre + # /var/cache/nginx/client_temp en cada arranque ("Operation not + # permitted", confirmado en el log real del pod). No vale la + # pena ir agregando capabilities una por una a ciegas -- se + # deja sin restricción de capabilities, igual que como corre + # hoy en producción (no es peor que el estado actual). Se + # resuelve del todo cuando docs-portal pase a + # nginx-unprivileged (no necesita root ni capabilities + # especiales para nada de esto). securityContext: allowPrivilegeEscalation: false readOnlyRootFilesystem: false - capabilities: - drop: - - ALL - add: - - NET_BIND_SERVICE + # Ni omitir "capabilities" ni un objeto vacío {} alcanzan + # para anular el drop:[ALL] del base (probado en vivo, los + # dos dejaron el drop:[ALL] heredado intacto). "null" es la + # forma real de borrar un campo heredado en un patch de + # merge de Kubernetes/Kustomize. + capabilities: null resources: requests: cpu: 50m