Habilita el acceso al clúster para Amazon EMR en EKS - Amazon EMR

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Habilita el acceso al clúster para Amazon EMR en EKS

En las siguientes secciones, se muestran un par de formas de habilitar el acceso a los clústeres. La primera es mediante la administración de acceso a EKS clústeres de Amazon (CAM) y la segunda muestra cómo tomar medidas manuales para habilitar el acceso a los clústeres.

Habilite el acceso al clúster mediante la entrada de EKS acceso (recomendado)

Amazon EMR está integrado con la gestión de acceso a EKS clústeres de Amazon (CAM), por lo que puede automatizar la configuración de las políticas AuthN y AuthZ necesarias para ejecutar los trabajos de Amazon EMR Spark en los espacios de nombres de los clústeres de Amazon. EKS Cuando creas un clúster virtual a partir de un espacio de nombres de EKS clúster de Amazon, Amazon configura EMR automáticamente todos los permisos necesarios, por lo que no necesitas añadir ningún paso adicional a tus flujos de trabajo actuales.

nota

La EMR integración de Amazon con Amazon solo EKS CAM es compatible con los nuevos clústeres EKS virtuales de AmazonEMR. No puede migrar los clústeres virtuales existentes para usar esta integración.

Requisitos previos

  • Asegúrese de que está ejecutando la versión 2.15.3 o superior del AWS CLI

  • Tu EKS clúster de Amazon debe tener la versión 1.23 o superior.

Configuración

Para configurar la integración entre Amazon EMR y las AccessEntry API operaciones de AmazonEKS, asegúrate de haber completado los siguientes elementos:

  • Asegúrate de que tu EKS clúster authenticationMode de Amazon esté configurado enAPI_AND_CONFIG_MAP.

    aws eks describe-cluster --name <eks-cluster-name>

    Si aún no lo está, authenticationMode configúrelo enAPI_AND_CONFIG_MAP.

    aws eks update-cluster-config --name <eks-cluster-name> --access-config authenticationMode=API_AND_CONFIG_MAP

    Para obtener más información sobre los modos de autenticación, consulte Modos de autenticación de clúster.

  • Asegúrese de que el IAMrol que está utilizando para ejecutar las DeleteVirtualCluster API operaciones CreateVirtualCluster y también tenga los siguientes permisos:

    { "Effect": "Allow", "Action": [ "eks:CreateAccessEntry" ], "Resource": "arn:<AWS_PARTITION>:eks:<AWS_REGION>:<AWS_ACCOUNT_ID>:cluster/<EKS_CLUSTER_NAME>" }, { "Effect": "Allow", "Action": [ "eks:DescribeAccessEntry", "eks:DeleteAccessEntry", "eks:ListAssociatedAccessPolicies", "eks:AssociateAccessPolicy", "eks:DisassociateAccessPolicy" ], "Resource": "arn:<AWS_PARTITION>:eks:<AWS_REGION>:<AWS_ACCOUNT_ID>:access-entry/<EKS_CLUSTER_NAME>/role/<AWS_ACCOUNT_ID>/AWSServiceRoleForAmazonEMRContainers/*" }

Conceptos y terminología

La siguiente es una lista de terminologías y conceptos relacionados con Amazon EKSCAM.

  • Clúster virtual (VC): representación lógica del espacio de nombres creado en Amazon. EKS Es un enlace 1:1 a un espacio de nombres de un EKS clúster de Amazon. Puedes usarla para ejecutar EMR cargas de trabajo de Amazon en un EKS clúster de Amazon dentro del espacio de nombres especificado.

  • Espacio de nombres: mecanismo para aislar grupos de recursos dentro de un único clúster. EKS

  • Política de acceso: permisos que otorgan acceso y acciones a un IAM rol dentro de un clúster. EKS

  • Entrada de acceso: entrada creada con un rol arn. Puedes vincular la entrada de acceso a una política de acceso para asignar permisos específicos en el EKS clúster de Amazon.

  • EKSclúster virtual integrado de entrada de acceso: el clúster virtual creado mediante APIlas operaciones de entrada de acceso de AmazonEKS.

Habilite el acceso al clúster mediante aws-auth

Debes permitir que Amazon EMR EKS acceda a un espacio de nombres específico de tu clúster mediante las siguientes acciones: crear un rol de Kubernetes, vincular el rol a un usuario de Kubernetes y mapear el usuario de Kubernetes con el rol vinculado al servicio. AWSServiceRoleForAmazonEMRContainers Estas acciones se automatizan eksctl cuando el comando de mapeo de identidad se utiliza como nombre del servicioIAM. emr-containers Puede llevar a cabo estas operaciones fácilmente con el siguiente comando.

eksctl create iamidentitymapping \ --cluster my_eks_cluster \ --namespace kubernetes_namespace \ --service-name "emr-containers"

Reemplazar my_eks_cluster con el nombre de tu EKS clúster de Amazon y reemplaza kubernetes_namespace con el espacio de nombres de Kubernetes creado para ejecutar cargas de trabajo de Amazon. EMR

importante

Debe descargar la versión más reciente de eksctl siguiendo el paso anterior: configure kubectl y eksctl para usar esta funcionalidad.

Pasos manuales para habilitar el acceso a los clústeres para Amazon EMR en EKS

También puedes seguir los siguientes pasos manuales para habilitar el acceso al clúster para Amazon EMR onEKS.

  1. Crear un rol de Kubernetes en un espacio de nombres específico

    Amazon EKS 1.22 - 1.29

    Con Amazon EKS 1.22 - 1.29, ejecuta el siguiente comando para crear un rol de Kubernetes en un espacio de nombres específico. Este rol otorga los RBAC permisos necesarios a Amazon EMR onEKS.

    namespace=my-namespace cat - >>EOF | kubectl apply -f - >>namespace "${namespace}" apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: emr-containers namespace: ${namespace} rules: - apiGroups: [""] resources: ["namespaces"] verbs: ["get"] - apiGroups: [""] resources: ["serviceaccounts", "services", "configmaps", "events", "pods", "pods/log"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"] - apiGroups: [""] resources: ["secrets"] verbs: ["create", "patch", "delete", "watch"] - apiGroups: ["apps"] resources: ["statefulsets", "deployments"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"] - apiGroups: ["extensions", "networking.k8s.io"] resources: ["ingresses"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"] - apiGroups: ["rbac.authorization.k8s.io"] resources: ["roles", "rolebindings"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"] - apiGroups: [""] resources: ["persistentvolumeclaims"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"] EOF
    Amazon EKS 1.21 and below

    Con Amazon EKS 1.21 y versiones anteriores, ejecuta el siguiente comando para crear un rol de Kubernetes en un espacio de nombres específico. Este rol otorga los RBAC permisos necesarios a Amazon EMR onEKS.

    namespace=my-namespace cat - >>EOF | kubectl apply -f - >>namespace "${namespace}" apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: emr-containers namespace: ${namespace} rules: - apiGroups: [""] resources: ["namespaces"] verbs: ["get"] - apiGroups: [""] resources: ["serviceaccounts", "services", "configmaps", "events", "pods", "pods/log"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"] - apiGroups: [""] resources: ["secrets"] verbs: ["create", "patch", "delete", "watch"] - apiGroups: ["apps"] resources: ["statefulsets", "deployments"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"] - apiGroups: ["extensions"] resources: ["ingresses"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "annotate", "patch", "label"] - apiGroups: ["rbac.authorization.k8s.io"] resources: ["roles", "rolebindings"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"] - apiGroups: [""] resources: ["persistentvolumeclaims"] verbs: ["get", "list", "watch", "describe", "create", "edit", "delete", "deletecollection", "annotate", "patch", "label"] EOF
  2. Crear una vinculación de roles de Kubernetes limitada al espacio de nombres

    Ejecute el siguiente comando para crear una vinculación de roles de Kubernetes en el espacio de nombres dado. Esta vinculación de roles otorga los permisos definidos en el rol creado en el paso anterior a un usuario nombrado emr-containers. Este usuario identifica las funciones vinculadas a servicios para Amazon EMR on EKS y, por lo tanto, permite EKS a Amazon EMR on realizar las acciones definidas en la función que has creado.

    namespace=my-namespace cat - <<EOF | kubectl apply -f - --namespace "${namespace}" apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: emr-containers namespace: ${namespace} subjects: - kind: User name: emr-containers apiGroup: rbac.authorization.k8s.io roleRef: kind: Role name: emr-containers apiGroup: rbac.authorization.k8s.io EOF
  3. Actualizar el mapa de configuración aws-auth de Kubernetes

    Puedes usar una de las siguientes opciones para asignar el rol vinculado a Amazon EMR on EKS Service con el emr-containers usuario que estaba vinculado al rol de Kubernetes en el paso anterior.

    Opción 1: con eksctl

    Ejecuta el siguiente eksctl comando para asignar la función Amazon EMR on EKS service vinculada al usuario. emr-containers

    eksctl create iamidentitymapping \ --cluster my-cluster-name \ --arn "arn:aws:iam::my-account-id:role/AWSServiceRoleForAmazonEMRContainers" \ --username emr-containers

    Opción 2: sin usar eksctl

    1. Ejecute el siguiente comando para abrir el mapa de configuración aws-auth en el editor de texto.

      kubectl edit -n kube-system configmap/aws-auth
      nota

      Si recibes un mensaje de error al Error from server (NotFound): configmaps "aws-auth" not found respecto, consulta los pasos de Añadir funciones de usuario en la Guía del EKS usuario de Amazon para aplicar el stock ConfigMap.

    2. Añade los detalles del rol EKS vinculado a Amazon EMR on Service en la mapRoles sección deConfigMap, debajo. data Agregue esta sección si no existe todavía en el archivo. La sección mapRoles actualizada en datos es similar al siguiente ejemplo.

      apiVersion: v1 data: mapRoles: | - rolearn: arn:aws:iam::<your-account-id>:role/AWSServiceRoleForAmazonEMRContainers username: emr-containers - ... <other previously existing role entries, if there's any>.
    3. Guarde el archivo y salga del editor de texto.