fix(docs-portal): no forzar drop de capabilities, rompe el arranque de nginx
Detectado en vivo: el pod nuevo crasheaba con 'chown(...) Operation not permitted' -- nginx:1.27-alpine necesita CAP_CHOWN en su propio entrypoint. drop:[ALL] + add:[NET_BIND_SERVICE] no alcanzaba. Se saca la restriccion de capabilities entera para este container (capabilities: null en el patch, unica forma real de anular el drop:[ALL] heredado del base -- omitir el campo u objeto vacio no alcanzan, confirmado en vivo). No es peor que el estado actual en produccion; se resuelve del todo con nginx-unprivileged. Co-Authored-By: Claude Sonnet 5 <[email protected]> Claude-Session: https://claude.ai/code/session_011FqYP3Wf1W63Qmh7qgXAAT
This commit is contained in:
1 parent
dcc5bb2d57
commit
827086049c
1 file changed
+18
-11
@@ -26,20 +26,27 @@ spec:
|
|||||||
containers:
|
containers:
|
||||||
- name: app
|
- name: app
|
||||||
image: gitea.cruzcloud.net/devops/docs-portal:v1.0.116
|
image: gitea.cruzcloud.net/devops/docs-portal:v1.0.116
|
||||||
# El base saca TODAS las capabilities. Corriendo como root en
|
# El base saca TODAS las capabilities. Probado en vivo y
|
||||||
# el puerto 80 (privilegiado), eso rompe el bind() -- incluso
|
# revertido: con drop: ALL (aunque se agregue NET_BIND_SERVICE
|
||||||
# root necesita CAP_NET_BIND_SERVICE si se le sacan las demás.
|
# de vuelta) el propio entrypoint de nginx:1.27-alpine falla al
|
||||||
# Mismo motivo que el runAsNonRoot de arriba: se resuelve del
|
# arrancar -- necesita CAP_CHOWN para el chown() que hace sobre
|
||||||
# todo cuando docs-portal pase a nginx-unprivileged (puerto
|
# /var/cache/nginx/client_temp en cada arranque ("Operation not
|
||||||
# 8080, no privilegiado, no necesita esta capability).
|
# 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:
|
securityContext:
|
||||||
allowPrivilegeEscalation: false
|
allowPrivilegeEscalation: false
|
||||||
readOnlyRootFilesystem: false
|
readOnlyRootFilesystem: false
|
||||||
capabilities:
|
# Ni omitir "capabilities" ni un objeto vacío {} alcanzan
|
||||||
drop:
|
# para anular el drop:[ALL] del base (probado en vivo, los
|
||||||
- ALL
|
# dos dejaron el drop:[ALL] heredado intacto). "null" es la
|
||||||
add:
|
# forma real de borrar un campo heredado en un patch de
|
||||||
- NET_BIND_SERVICE
|
# merge de Kubernetes/Kustomize.
|
||||||
|
capabilities: null
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu: 50m
|
cpu: 50m
|
||||||
|
|||||||
Reference in new issue
Block a user