¿Cómo se resuelven los problemas relacionados con los montajes de volúmenes de Amazon EFS en Amazon EKS?

Última actualización: 22-12-2021

Aparecen los siguientes errores en los pods al montar los volúmenes de Amazon Elastic File System (Amazon EFS) en el clúster de Amazon Elastic Kubernetes Service (Amazon EKS):

  • “Salida: mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com:/path-in-dir:/ falló, motivo dado por el servidor: no existe tal archivo o directorio”
  • “Salida: no se pudo resolver “fs-xxxxxx.efs.us-west-2.amazonaws.com”; verifique que el ID del sistema de archivos sea correcto”
  • “mount.nfs4: acceso denegado por el servidor al montar 127.0.0.1:/”
  • “mount.nfs: se agotó el tiempo de espera de la conexión”

¿Cómo se soluciona este problema?

Resolución

En primer lugar, antes de proceder a la resolución de problemas, verifique que dispone de lo siguiente:

Verifique que los destinos de montaje están configurados correctamente

Asegúrese de crear los destinos de montaje de EFS en cada zona de disponibilidad donde se ejecuten los nodos de EKS. Por ejemplo, si los nodos de trabajo se encuentran distribuidos entre us-east-1a y us-east-1b, asegúrese de crear destinos de montaje en ambas zonas de disponibilidad para el sistema de archivos de EFS que intenta montar. Si no se crean correctamente los destinos de montaje, los pods que se montan en el sistema de archivos de EFS muestran un error similar al siguiente:

Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct.

Verifique que el grupo de seguridad asociado al sistema de archivos de EFS permite el tráfico NFS

El grupo de seguridad asociado al sistema de archivos de EFS debe contar con una regla de entrada que permita el tráfico NFS (puerto 2049) desde el CIDR para la VPC del clúster. Si el grupo de seguridad de los destinos de montaje de EFS no permite el tráfico NFS, los pods que montan el sistema de archivos de EFS generan un error similar al siguiente:

"mount.nfs: Connection timed out"

Verifique que el subdirectorio se cree en el sistema de archivos de EFS en caso de que monte el pod en un subdirectorio

Cuando se agregan subrutas en volúmenes persistentes, el controlador CSI de EFS no crea la ruta del subdirectorio en el sistema de archivos de EFS como parte de la operación de montaje. Los directorios deben estar ya presentes para que la operación de montaje se realice correctamente. Si la subruta no está presente en el sistema de archivos, se produce el siguiente error en los pods:

Output: mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com:/path-in-dir:/ failed, reason given by server: No such file or directory

Confirme que la VPC del clúster utiliza el servidor DNS de Amazon

Cuando se utiliza el controlador CSI de EFS para montar el EFS, el ayudante de montaje de EFS en el controlador CSI de EFS requiere que la VPC utilice el servidor DNS de Amazon para la VPC. Nota: El DNS del sistema de archivos del servicio de EFS tiene una limitación de arquitectura de AWS. Únicamente el DNS proporcionado por Amazon puede resolver el DNS del sistema de archivos del servicio de EFS.

Inicie sesión en el nodo de trabajo y ejecute el siguiente comando para verificar el servidor de DNS:

nslookup fs-4fxxxxxx.efs.region.amazonaws.com <amazon provided DNS IP>
<amazon provided DNS IP = VPC network(10.0.0.0) range plus two>

Nota: Sustituya región por su región de AWS.

Si la VPC del clúster utiliza un servidor de DNS personalizado, es necesario configurar el servidor de DNS personalizado para que reenvíe todas las solicitudes de *.amazonaws.com al servidor de DNS de Amazon. Si estas solicitudes no se reenvían, se produce un error en los pods similar al siguiente:

Output: Failed to resolve "fs-4 fxxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct.

Verifique que tiene las opciones de montaje “iam” en la definición del volumen persistente al utilizar una política de sistema de archivos restrictiva

En algunos casos, la política del sistema de archivos EFS está configurada para restringir los permisos de montaje a determinados roles de IAM. Si este es el caso, entonces el ayudante de montaje de EFS en el controlador CSI de EFS requiere que la opción de montaje -o iam pase durante la operación de montaje. Incluya la propiedad spec.mountOptions de modo que el controlador CSI pueda agregar la opción de montaje iam (desde el sitio web de GitHub).

Ejemplo de especificación de PersistentVolume:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs-pv1
spec:
  mountOptions:
    - iam
. . . . . .

Si no se agrega la opción de montaje iam cuando se utiliza una política de sistema de archivos restrictiva, se produce un error en los pods similar al siguiente:

mount.nfs4: access denied by server while mounting 127.0.0.1:/

Verifique que la cuenta de servicio del controlador CSI de Amazon EFS se encuentra anotada con el rol IAM correcto y que el rol IAM cuenta con los permisos requeridos

Ejecute el siguiente comando para verificar que la cuenta de servicio utilizada por los pods efs-csi-controller tiene la anotación correcta:

kubectl describe sa efs-csi-controller-sa -n kube-system

Verifique que esté presente la siguiente anotación:

eks\.amazonaws\.com/role-arn"="arn:aws:iam::111122223333:role/AmazonEKS_EFS_CSI_Driver_Policy

Verifique que se haya creado el proveedor OIDC de IAM para el clúster y que el rol de IAM tenga los permisos necesarios (desde el sitio web de GitHub) para realizar llamadas a la API de EFS. Además, verifique que la política de confianza del rol IAM confía en la cuenta de servicio efs-csi-controller-sa.

Verifique que los pods de controladores de CSI de EFS se encuentren en ejecución

El controlador CSI de EFS está compuesto por pods de controladores que se ejecutan como una implementación y pods de nodos que se ejecutan como un daemonset. Ejecute los siguientes comandos para verificar que estos pods se ejecutan en el clúster:

kubectl get all -l app.kubernetes.io/name=aws-efs-csi-driver -n kube-system

Verifique la operación de montaje de EFS desde el nodo de trabajo de EC2 en el que el pod no puede montar el sistema de archivos

Inicie sesión en el nodo de trabajo de Amazon EKS en el que está programado el pod. A continuación, utilice el ayudante de montaje de EFS para intentar montar manualmente el sistema de archivos de EFS en el nodo de trabajo. Puede ejecutar el siguiente comando para realizar una prueba:

sudo mount -t -efs -o tls file-system-dns-name efs-mount-point/

Si el nodo de trabajo puede montar el sistema de archivos, entonces revise los registros de efs-plugin del controlador de CSI y de los pods de nodos de CSI.

Comprobar los registros del pod del controlador CSI de EFS

Compruebe los registros del pod del controlador de CSI para determinar la causa de los errores que se presentan en el montaje. Si el volumen no se puede montar, revise los registros de efs-plugin. Ejecute los siguientes comandos para recuperar los registros del contenedor efs-plugin:

kubectl logs deployment/efs-csi-controller -n kube-system -c efs-plugin
kubectl logs daemonset/efs-csi-node -n kube-system -c efs-plugin

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?