Configuración de Pods para usar una cuenta de servicio de Kubernetes - Amazon EKS

Ayude a mejorar esta página

¿Quiere contribuir a esta guía del usuario? Desplácese hasta el final de esta página y seleccione Editar esta página en GitHub. Sus contribuciones ayudarán a que nuestra guía del usuario sea mejor para todos.

Configuración de Pods para usar una cuenta de servicio de Kubernetes

Si un Pod necesita acceder a los Servicios de AWS, debe configurarlo para que use una cuenta de servicio de Kubernetes. La cuenta de servicio debe estar asociada a un rol de AWS Identity and Access Management (IAM) que tenga permisos para acceder a Servicios de AWS.

Requisitos previos
  • Un clúster existente. Si no tiene uno, puede crearlo mediante una de las guías de Introducción a Amazon EKS.

  • Una cuenta de servicio de Kubernetes existente y una asociación de Pod Identity de EKS que asocia la cuenta de servicio a un rol de IAM. El rol debe tener una política de IAM asociada que contenga los permisos que desee que tengan sus Pods para usar Servicios de AWS. Para obtener más información acerca de cómo crear y configurar la cuenta de servicio y el rol, consulte Configuración de una cuenta de servicio de Kubernetes para asumir un rol de IAM con Pod Identity de EKS.

  • La última versión de AWS CLI instalada y configurada en su dispositivo o AWS CloudShell. Puede comprobar su versión actual con aws --version | cut -d / -f2 | cut -d ' ' -f1. Los administradores de paquetes tales como yum, apt-get o Homebrew para macOS suelen estar atrasados varias versiones respecto de la versión de la AWS CLI más reciente. Para instalar la versión más reciente, consulte Instalar, actualizar y desinstalar la AWS CLI y Configuración rápida con aws configure en la Guía del usuario de AWS Command Line Interface. La versión de la AWS CLI instalada en AWS CloudShell también puede estar atrasada varias versiones respecto de la versión más reciente. Para actualizarla, consulte Instalación de AWS CLI en el directorio de inicio en la Guía del usuario de AWS CloudShell.

  • La herramienta de línea de comandos de kubectl está instalada en su dispositivo o AWS CloudShell. La versión puede ser la misma o hasta una versión secundaria anterior o posterior a la versión de Kubernetes de su clúster. Por ejemplo, si la versión del clúster es 1.29, puede usar la versión 1.28, 1.29 o 1.30 de kubectl con él. Para instalar o actualizar kubectl, consulte Instalación o actualización del kubectl.

  • Un archivo config de kubectl existente que contenga la configuración del clúster. Para crear un archivo config de kubectl, consulte Creación o actualización de un archivo kubeconfig para un clúster de Amazon EKS.

Cómo configurar un Pod para usar una cuenta de servicio
  1. Use el siguiente comando para crear un manifiesto de implementación que puede implementar en un Pod con el que se puede confirmar la configuración. Sustituya example values con valores propios.

    cat >my-deployment.yaml <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: serviceAccountName: my-service-account containers: - name: my-app image: public.ecr.aws/nginx/nginx:X.XX EOF
  2. Implemente el manifiesto en el clúster.

    kubectl apply -f my-deployment.yaml
  3. Confirme que existan las variables de entorno necesarias para su Pod.

    1. Consulte los Pods que se implementaron en el paso anterior.

      kubectl get pods | grep my-app

      Un ejemplo de salida sería el siguiente.

      my-app-6f4dfff6cb-76cv9   1/1     Running   0          3m28s
    2. Confirme que el Pod tiene un archivo de token de cuenta de servicio montado.

      kubectl describe pod my-app-6f4dfff6cb-76cv9 | grep AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE:

      Un ejemplo de salida sería el siguiente.

      AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE:  /var/run/secrets/pods.eks.amazonaws.com/serviceaccount/eks-pod-identity-token
  4. Confirme que sus Pods puedan interactuar con los Servicios de AWS mediante los permisos que asignó en la política de IAM adjunta a su rol.

    nota

    Cuando un Pod utiliza credenciales de AWS de un rol de IAM asociado a una cuenta de servicio, la AWS CLI u otros SDK de los contenedores de ese Pod utilizan las credenciales proporcionadas por dicho rol. Si no restringe el acceso a las credenciales que se proporcionan al rol de IAM del nodo de Amazon EKS, el Pod sigue teniendo acceso a esas credenciales. Para obtener más información, consulte Restringir el acceso al perfil de instancias asignado al nodo de trabajo.

    Si sus Pods no pueden interactuar con los servicios como esperaba, siga estos pasos para confirmar que todo esté configurado correctamente.

    1. Confirme que los Pods usen una versión del SDK de AWS que admita asumir un rol de IAM a través de una asociación de Pod Identity de EKS. Para obtener más información, consulte Uso de un AWS SDK compatible.

    2. Confirme que la implementación use la cuenta de servicio.

      kubectl describe deployment my-app | grep "Service Account"

      Un ejemplo de salida sería el siguiente.

      Service Account:  my-service-account