Habilitar el acceso a clústeres de Amazon EMR en EKS
Las siguientes secciones muestran un par de formas de habilitar el acceso a los clústeres. La primera es mediante la administración de acceso a clústeres (CAM) de Amazon EKS y la segunda muestra cómo tomar medidas manuales para habilitar el acceso a los clústeres.
Habilitación del acceso al clúster mediante EKS Access Entry (recomendado)
nota
El ConfigMap aws-auth
está en desuso. El método recomendado para administrar el acceso a las API de Kubernetes es Entradas de acceso.
Amazon EMR está integrado con la administración de acceso a clústeres (CAM) de Amazon EKS, por lo que puede automatizar la configuración de las políticas AuthN y AuthZ necesarias para ejecutar trabajos de Amazon EMR Spark en los espacios de nombres de los clústeres de Amazon EKS. Cuando crea un clúster virtual a partir de un espacio de nombres de clústeres de Amazon EKS, Amazon EMR configura automáticamente todos los permisos necesarios, por lo que no necesita añadir ningún paso adicional a sus flujos de trabajo actuales.
nota
La integración de Amazon EMR con Amazon EKS CAM solo es compatible con los nuevos clústeres virtuales de Amazon EMR en EKS. No puede migrar los clústeres virtuales existentes para utilizar esta integración.
Requisitos previos
-
Asegúrese de ejecutar la versión 2.15.3 o posteriores de la AWS CLI
-
El clúster de Amazon EKS debe estar en la versión 1.23 o posteriores.
Configuración
Para configurar la integración entre Amazon EMR y las operaciones de la API AccessEntry de Amazon EKS, asegúrese de haber completado los siguientes pasos:
-
Asegúrese de que
authenticationMode
de su clúster de Amazon EKS esté establecido enAPI_AND_CONFIG_MAP
.aws eks describe-cluster --name
<eks-cluster-name>
Si aún no lo está, establezca
authenticationMode
enAPI_AND_CONFIG_MAP
.aws eks update-cluster-config --name
<eks-cluster-name>
--access-config authenticationMode=API_AND_CONFIG_MAPPara obtener más información acerca de los modos de autenticación, consulte Modos de autenticación de clústeres.
-
Asegúrese de que el rol de IAM que está utilizando para ejecutar las operaciones de la API
CreateVirtualCluster
yDeleteVirtualCluster
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 EKS CAM.
-
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 clúster de Amazon EKS. Puede usarlo para ejecutar cargas de trabajo de Amazon EMR en un clúster de Amazon EKS dentro del espacio de nombres especificado.
-
Espacio de nombres: mecanismo para aislar grupos de recursos dentro de un único clúster de EKS.
-
Política de acceso: permisos que otorgan acceso y acciones a un rol de IAM dentro de un clúster de EKS.
-
Entrada de acceso: una entrada creada con un ARN de rol. Puede vincular la entrada de acceso a una política de acceso para asignar permisos específicos en el clúster de Amazon EKS.
-
Clúster virtual integrado de entrada de acceso EKS: el clúster virtual creado mediante las operaciones de la API de entrada de acceso desde Amazon EKS.
Habilitación del acceso al clúster mediante aws-auth
Debe permitir que Amazon EMR en EKS acceda a un espacio de nombres específico de su clúster mediante las siguientes acciones: crear un rol de Kubernetes, vincular el rol a un usuario de Kubernetes y asignar el usuario de Kubernetes con el rol AWSServiceRoleForAmazonEMRContainers
vinculado al servicio. Estas acciones se automatizan en eksctl
cuando se utiliza el comando de asignación de identidades de IAM con emr-containers
como nombre del servicio. Puede llevar a cabo estas operaciones fácilmente con el siguiente comando.
eksctl create iamidentitymapping \ --cluster
my_eks_cluster
\ --namespacekubernetes_namespace
\ --service-name "emr-containers"
Sustituya my_eks_cluster
por el nombre de su clúster de Amazon EKS y sustituya kubernetes_namespace
por el espacio de nombres de Kubernetes creado para ejecutar cargas de trabajo de Amazon EMR.
importante
Para descargar la versión más reciente de eksctl, siga el paso anterior Configuración de kubectl y eksctl para utilizar esta funcionalidad.
Pasos manuales para habilitar el acceso a clústeres de Amazon EMR en EKS
También puede utilizar los siguientes pasos manuales para habilitar el acceso al clúster de Amazon EMR en EKS.
-
Crear un rol de Kubernetes en un espacio de nombres específico
-
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 los roles vinculadas al servicio de Amazon EMR en EKS y, por lo tanto, permite que Amazon EMR en EKS lleve a cabo las acciones definidas por el rol que creó.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 -
Actualizar el mapa de configuración
aws-auth
de KubernetesPuede utilizar una de las siguientes opciones para asignar el rol vinculado al servicio de Amazon EMR en EKS con el usuario de
emr-containers
que estaba vinculado con el rol de Kubernetes en el paso anterior.Opción 1: con
eksctl
Ejecute el siguiente comando
eksctl
para asignar el rol vinculado al servicio de Amazon EMR en EKS con el usuarioemr-containers
.eksctl create iamidentitymapping \ --cluster
my-cluster-name
\ --arn "arn:aws:iam::my-account-id
:role/AWSServiceRoleForAmazonEMRContainers" \ --username emr-containersOpción 2: sin usar eksctl
-
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 recibe un error que indique
Error from server (NotFound): configmaps "aws-auth" not found
, consulte los pasos de Agregar roles de usuario en la Guía del usuario de Amazon EKS para aplicar el ConfigMap estándar. -
Agregue los detalles del rol vinculado al servicio Amazon EMR en EKS en la sección
mapRoles
deConfigMap
, endata
. Agregue esta sección si no existe todavía en el archivo. La secciónmapRoles
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>.
-
Guarde el archivo y salga del editor de texto.
-