¿Cómo administrar usuarios de linux con Kubernetes?

Sep 25 2020

Quiero proteger mis clústeres con SecurityContext.RunAsUser. La pregunta es simple: ¿qué usuario debo usar?

Sé que el usuario con el UID 1001 (por ejemplo) dentro de un contenedor es el usuario con el UID 1001 en el host. Entonces, ¿debería crear un usuario con UID 1001 llamado pod_useren todos mis hosts y forzar a todos los pods a usar este usuario? ¿O debería verificar que no haya ningún usuario con este UID en todos mis hosts? No encontré una guía de mejores prácticas sobre esto.

Tengo el mismo tipo de pregunta sobre el Dockerfile: ¿debería declarar un usuario en el Dockerfile con un UID específico y reutilizarlo SecurityContext.RunAsUser? Algunas imágenes oficiales se ejecutan con un usuario codificado específico en Dockerfile, y otras se ejecutan como nadie. Encontré esta publicación interesante pero no hay una respuesta clara: Kubernetes: administración de usuarios de Linux .

Respuestas

2 DavidMaze Sep 25 2020 at 22:54

Mi recomendación ideal aquí sería:

  • Su Dockerfile RUN adduserpara crear un usuario no root y cambia USERa ese usuario después de realizar toda la instalación del software
  • No es necesario especificar explícitamente un ID de usuario en la configuración de Kubernetes
  • No importa cuál sea ese nombre de usuario o ID numérico, o si es el mismo ID de usuario que existe en otro contenedor o en el host, siempre que el uid numérico no sea 0

El único lugar donde hay un problema práctico es si el contenedor intenta almacenar datos en un volumen. Una vez más, el caso ideal sería evitar esto por completo; prefiera usar una base de datos o almacenamiento en la nube si esa es una posibilidad.

Si necesita utilizar un volumen local, puede configurar específicamente una política de seguridad con un archivo fsGroup:. Es un ID de grupo numérico arbitrario (no un ID de usuario) que será el propietario de los archivos en el volumen y también se agregará a la lista de grupos para el proceso del contenedor principal.

apiVersion: v1
kind: Pod
spec:
  securityContext:
    fsGroup: 12345  # or any numeric gid

No utilice hostPathvolúmenes en absoluto: no puede garantizar que el mismo contenido estará en cada nodo si el pod se reprograma, y ​​si el nodo falla, el contenido que vive solo en ese nodo se perderá.