Abilita l'accesso al cluster per Amazon EMR su EKS - Amazon EMR

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Abilita l'accesso al cluster per Amazon EMR su EKS

Abilita l'accesso al cluster utilizzando EKS Access Entry (consigliato)

Amazon EMR è integrato con Amazon EKS Cluster Access Management (CAM), quindi puoi automatizzare la configurazione delle politiche AuthN e AuthZ necessarie per eseguire i job Amazon Spark nei namespace dei cluster EMR Amazon. EKS Quando crei un cluster virtuale da uno spazio dei nomi di EKS cluster Amazon, Amazon configura EMR automaticamente tutte le autorizzazioni necessarie, quindi non devi aggiungere passaggi aggiuntivi ai flussi di lavoro correnti.

Nota

L'EMRintegrazione di Amazon con Amazon EKS CAM è supportata solo per i nuovi Amazon EMR su cluster EKS virtuali. Non puoi migrare i cluster virtuali esistenti per utilizzare questa integrazione.

Prerequisiti

  • Assicurati di utilizzare la versione 2.15.3 o successiva di AWS CLI

  • Il tuo EKS cluster Amazon deve avere la versione 1.23 o successiva.

Installazione

Per configurare l'integrazione tra Amazon EMR e le AccessEntry API operazioni di AmazonEKS, assicurati di aver completato i seguenti elementi:

  • Assicurati che quello authenticationMode del tuo EKS cluster Amazon sia impostato suAPI_AND_CONFIG_MAP.

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

    Se non lo è già, imposta authenticationMode suAPI_AND_CONFIG_MAP.

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

    Per ulteriori informazioni sulle modalità di autenticazione, vedere Modalità di autenticazione del cluster.

  • Assicurati che il IAMruolo che stai utilizzando per eseguire le DeleteVirtualCluster API operazioni CreateVirtualCluster and disponga anche delle seguenti autorizzazioni:

    { "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/*" }

Concetti e terminologia

Di seguito è riportato un elenco di terminologie e concetti relativi ad Amazon EKSCAM.

  • Cluster virtuale (VC): rappresentazione logica dello spazio dei nomi creato in Amazon. EKS È un collegamento 1:1 a un namespace EKS del cluster Amazon. Puoi usarlo per eseguire EMR carichi di lavoro Amazon su un EKS cluster Amazon all'interno dello spazio dei nomi specificato.

  • Namespace: meccanismo per isolare gruppi di risorse all'interno di un singolo cluster. EKS

  • Politica di accesso: autorizzazioni che garantiscono l'accesso e le azioni a un IAM ruolo all'interno di un cluster. EKS

  • Inserimento di accesso: una voce creata con un ruolo arn. Puoi collegare la voce di accesso a una politica di accesso per assegnare autorizzazioni specifiche nel cluster AmazonEKS.

  • EKScluster virtuale integrato di accesso: il cluster virtuale creato utilizzando APIle operazioni di accesso di AmazonEKS.

Abilita l'accesso al cluster utilizzando aws-auth

Devi consentire ad Amazon di EKS accedere EMR a uno spazio dei nomi specifico nel tuo cluster eseguendo le seguenti azioni: creazione di un ruolo Kubernetes, associazione del ruolo a un utente Kubernetes e mappatura dell'utente Kubernetes con il ruolo collegato al servizio. AWSServiceRoleForAmazonEMRContainers Queste azioni sono automatizzate eksctl quando il comando di mappatura dell'identità viene utilizzato come nome del servizio. IAM emr-containers È possibile eseguire facilmente queste operazioni utilizzando il comando seguente.

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

Replace (Sostituisci) my_eks_cluster con il nome del tuo EKS cluster Amazon e sostituisci kubernetes_namespace con lo spazio dei nomi Kubernetes creato per eseguire carichi di lavoro Amazon. EMR

Importante

Per utilizzare questa funzionalità, è necessario scaricare l'eksctl più recente seguendo il passaggio precedente Installazione di eksctl.

Passaggi manuali per abilitare l'accesso al cluster per Amazon EMR su EKS

Puoi anche utilizzare i seguenti passaggi manuali per abilitare l'accesso al cluster per Amazon EMR suEKS.

  1. Creazione di un ruolo Kubernetes in uno spazio dei nomi specifico

    Amazon EKS 1.22 - 1.29

    Con Amazon EKS 1.22 - 1.29, esegui il comando seguente per creare un ruolo Kubernetes in uno spazio dei nomi specifico. Questo ruolo concede le RBAC autorizzazioni necessarie ad Amazon EMR on. EKS

    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 e versioni precedenti, esegui il comando seguente per creare un ruolo Kubernetes in uno spazio dei nomi specifico. Questo ruolo concede le RBAC autorizzazioni necessarie ad Amazon EMR on. EKS

    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. Creazione dell'associazione di un ruolo Kubernetes allo spazio dei nomi

    Esegui questo comando per creare l'associazione di un ruolo Kubernetes a uno spazio dei nomi specifico. Questa associazione di ruolo concede le autorizzazioni definite nel ruolo creato nel passaggio precedente a un utente denominato emr-containers. Questo utente identifica i ruoli collegati ai servizi per Amazon EMR on EKS e consente quindi ad Amazon EMR on di EKS eseguire azioni come definito dal ruolo che hai creato.

    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. Aggiornamento della mappa di configurazione aws-auth di Kubernetes

    Puoi utilizzare una delle seguenti opzioni per mappare il ruolo Amazon EMR on EKS service-linked con l'emr-containersutente associato al ruolo Kubernetes nel passaggio precedente.

    Opzione 1: usando eksctl

    Esegui il eksctl comando seguente per mappare il ruolo Amazon EMR on EKS service-linked con l'emr-containersutente.

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

    Opzione 2: Senza utilizzare eksctl

    1. Esegui il seguente comando per aprire la mappa di configurazione aws-auth nell'editor di testo.

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

      Se ricevi un messaggio di erroreError from server (NotFound): configmaps "aws-auth" not found, consulta la procedura riportata in Aggiungere ruoli utente nella Amazon EKS User Guide per applicare lo stock ConfigMap.

    2. Aggiungi i dettagli del ruolo di Amazon EMR on EKS service-linked alla mapRoles sezione diConfigMap, sotto. data Aggiungi questa sezione se non esiste già nel file. La sezione mapRoles aggiornata in dati ha l'aspetto seguente.

      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. Salva il file ed esci dall'editor di testo.