Identificación de Problemas de Permisos de Volumen
En este paso, crearemos un escenario que demuestre los problemas comunes de permisos de volumen en Kubernetes. Estos problemas suelen ocurrir al usar volúmenes HostPath o volúmenes persistentes donde los permisos del sistema de archivos no coinciden con el ID de usuario que se ejecuta en el contenedor.
Comprensión del Problema
Cuando un contenedor se ejecuta como un usuario no root pero intenta acceder a un volumen propiedad de root (u otro usuario), pueden ocurrir errores de "permiso denegado". Este es un problema común en entornos de producción donde ejecutar contenedores como usuarios no root es una práctica recomendada de seguridad.
Creación de un Volumen HostPath con Problemas de Permisos
Creemos un pod que intente acceder a un volumen HostPath con propiedad root:
- Cree un archivo YAML para la configuración de nuestro pod:
cd ~/project/k8s-volume-demo
nano hostpath-pod.yaml
- Copie el siguiente contenido en el archivo:
apiVersion: v1
kind: Pod
metadata:
name: hostpath-pod
spec:
containers:
- name: container-1
image: ubuntu:22.04
command:
[
"/bin/bash",
"-c",
"while true; do echo 'Trying to write' >> /data/output.txt; sleep 10; done"
]
volumeMounts:
- name: host-data
mountPath: /data
securityContext:
runAsUser: 1000 ## Run as non-root user
volumes:
- name: host-data
hostPath:
path: /home/labex/project/k8s-volume-demo/data
type: Directory
-
Guarde el archivo (presione Ctrl+X, luego Y, luego Enter).
-
Cree el pod en su clúster de Kubernetes:
kubectl apply -f hostpath-pod.yaml
- Espere un momento, luego verifique el estado del pod:
kubectl get pods
- Debería ver que el pod se está ejecutando, pero si verificamos los registros, podríamos ver errores:
kubectl logs hostpath-pod
Podría ver errores de "permiso denegado" como:
bash: /data/output.txt: Permission denied
- Confirmemos el problema verificando los permisos en nuestro directorio host:
ls -la ~/project/k8s-volume-demo/data
Debería ver una salida como:
total 12
drwxr-xr-x 2 root root 4096 Jan 1 12:00 .
drwxr-xr-x 3 labex labex 4096 Jan 1 12:00 ..
-rw-r--r-- 1 root root 19 Jan 1 12:00 test.txt
El directorio y los archivos son propiedad de root, pero nuestro contenedor se está ejecutando como el ID de usuario 1000. Esta discrepancia causa los errores de "permiso denegado".
Comprensión de los IDs de Usuario y Grupo en Contenedores
En Kubernetes, los contenedores pueden ejecutarse como IDs de usuario específicos a través de la configuración securityContext. En nuestro ejemplo:
securityContext:
runAsUser: 1000 ## Run as non-root user
Esto le dice a Kubernetes que ejecute el proceso del contenedor como el ID de usuario 1000, que no tiene permiso para escribir en los archivos propiedad de root.
Limpieza
Antes de pasar al siguiente paso, eliminemos el pod:
kubectl delete pod hostpath-pod
En el siguiente paso, exploraremos soluciones a estos problemas de permisos.