Habilitação do acesso ao cluster para o Amazon EMR no EKS - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Habilitação do acesso ao cluster para o Amazon EMR no EKS

Você deve permitir o acesso do Amazon EMR no EKS a um namespace específico em seu cluster ao executar as seguintes ações: criar um perfil do Kubernetes, associar o perfil a um usuário do Kubernetes e mapear o usuário do Kubernetes com o perfil vinculado ao serviço AWSServiceRoleForAmazonEMRContainers. Essas ações são automatizadas em eksctl quando o comando de mapeamento de identidade do IAM é usado com emr-containers como nome do serviço. Você pode executar essas operações facilmente ao usar o comando apresentado a seguir.

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

Substitua my_eks_cluster pelo nome do cluster do Amazon EKS e kubernetes_namespace pelo namespace do Kubernetes criado para executar workloads do Amazon EMR.

Importante

Você deve fazer o download do eksctl mais recente usando a etapa anterior Instalar o eksctl para usar esta funcionalidade.

Etapas manuais para habilitar o acesso ao cluster para o Amazon EMR no EKS

Você também pode usar as etapas manuais apresentadas a seguir para habilitar o acesso ao cluster para o Amazon EMR no EKS.

  1. Crie um perfil do Kubernetes em um namespace específico

    Amazon EKS 1.22 - 1.29

    Com o Amazon EKS 1.22 - 1.29, execute o comando a seguir para criar uma função do Kubernetes em um namespace específico. Esse perfil concede as permissões de RBAC obrigatórias ao Amazon EMR no 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

    Com o Amazon EKS, versões 1.21 e anteriores, execute o comando a seguir para criar um perfil do Kubernetes em um namespace específico. Esse perfil concede as permissões de RBAC obrigatórias ao Amazon EMR no 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. Crie uma associação de perfil do Kubernetes com escopo definido para o namespace

    Execute o comando apresentado a seguir para criar uma associação de perfil do Kubernetes no namespace especificado. Essa associação de perfil concede as permissões definidas no perfil criado na etapa anterior a um usuário chamado emr-containers. Esse usuário identifica perfis vinculados ao serviço para o Amazon EMR no EKS e, dessa forma, permite que o Amazon EMR no EKS execute ações conforme definido pelo perfil criado.

    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. Atualize mapa de configuração aws-auth do Kubernetes

    Você pode usar uma das opções apresentadas a seguir para mapear o perfil vinculado ao serviço do Amazon EMR no EKS com o usuário emr-containers que foi associado ao perfil do Kubernetes na etapa anterior.

    Opção 1: usar o eksctl

    Execute o comando eksctl apresentado a seguir para mapear o perfil vinculado ao serviço do Amazon EMR no EKS com o usuário emr-containers.

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

    Opção 2: sem usar o eksctl

    1. Execute o comando apresentado a seguir para abrir o mapa de configuração aws-auth no editor de texto.

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

      Se você receber um erro informandoError from server (NotFound): configmaps "aws-auth" not found, consulte as etapas em Adicionar funções de usuário no Guia do usuário do Amazon EKS para aplicar o estoque ConfigMap.

    2. Adicione detalhes do perfil vinculado ao serviço do Amazon EMR no EKS à seção mapRoles do ConfigMap, em data. Adicione essa seção se ela ainda não existir no arquivo. A seção mapRoles atualizada em dados deve ser semelhante ao exemplo a seguir.

      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. Salve o arquivo e saia do seu editor de texto.

Automatize a habilitação do acesso ao cluster para o Amazon EMR no EKS

O Amazon EMR é integrado ao gerenciamento de acesso ao cluster (CAM) do Amazon EKS, para que você possa automatizar a configuração das políticas AuthN e AuthZ necessárias para executar trabalhos do Amazon EMR Spark em namespaces de clusters do Amazon EKS. Quando você cria um cluster virtual a partir de um namespace de cluster do Amazon EKS, o Amazon EMR configura automaticamente todas as permissões necessárias, para que você não precise adicionar nenhuma etapa extra aos seus fluxos de trabalho atuais.

nota

A entrada de acesso do Amazon EKS suporta no máximo apenas 100 namespaces. Se você tiver mais de 100 clusters virtuais, o Amazon EMR não usará as APIs de entrada de acesso ao criar novos clusters virtuais. Você pode ver quais clusters têm a integração de entrada de acesso ativada definindo o eksAccessEntryIntegrated parâmetro como true ao executar a operação da ListVirtualClusters API ou o comando da list-virtual-clusters CLI. O comando retorna os identificadores exclusivos de todos os clusters virtuais aplicáveis.

Pré-requisitos

  • Verifique se você está executando a versão 2.15.3 ou superior do AWS CLI

  • Seu cluster Amazon EKS deve estar na versão 1.23 ou superior.

Configuração

Para configurar a integração entre o Amazon EMR e as operações de AccessEntry API do Amazon EKS, certifique-se de ter concluído os seguintes itens:

  • Certifique-se authenticationMode de que seu cluster Amazon EKS esteja configurado comoAPI_AND_CONFIG_MAP.

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

    Se ainda não estiver, authenticationMode defina comoAPI_AND_CONFIG_MAP.

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

    Para obter mais informações sobre os modos de autenticação, consulte Modos de autenticação de cluster.

  • Certifique-se de que a função do IAM que você está usando para executar CreateVirtualCluster as operações de DeleteVirtualCluster API também tenha as seguintes permissões:

    { "Effect": "Allow", "Action": [ "eks:DescribeAccessEntry", "eks:CreateAccessEntry", "eks:DeleteAccessEntry", "eks:ListAssociatedAccessPolicies", "eks:AssociateAccessPolicy", "eks:DisassociateAccessPolicy" ], "Resource": "*" }

Conceitos e terminologia

A seguir está uma lista de terminologias e conceitos relacionados ao Amazon EKS CAM.

  • Cluster virtual (VC) — representação lógica do namespace criado no Amazon EKS. É um link 1:1 para um namespace de cluster Amazon EKS. Você pode usá-lo para executar cargas de trabalho do Amazon EMR em um cluster do Amazon EKS dentro do namespace especificado.

  • Namespace — mecanismo para isolar grupos de recursos em um único cluster EKS.

  • Política de acesso — permissões que concedem acesso e ações a uma função do IAM em um cluster EKS.

  • Entrada de acesso — uma entrada criada com uma função arn. Você pode vincular a entrada de acesso a uma política de acesso para atribuir permissões específicas no cluster Amazon EKS.

  • Cluster virtual integrado de entrada de acesso EKS — o cluster virtual criado usando operações de API de entrada de acesso do Amazon EKS.