本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
啟用 Amazon EMR on 的叢集存取 EKS
下列各節顯示啟用叢集存取的幾種方法。第一種是使用 Amazon EKS叢集存取管理 (CAM),後一種則示範如何採取手動步驟來啟用叢集存取。
使用存取項目啟用叢集EKS存取 (建議)
注意
aws-auth
ConfigMap 已棄用。管理 Kubernetes 存取的建議方法是 APIs Access Entries 。
Amazon 與 Amazon EKS叢集存取管理 (CAM) EMR整合,因此您可以自動設定必要的 AuthN 和 AuthZ 政策,以在 Amazon EKS叢集命名空間中執行 Amazon EMR Spark 任務。當您從 Amazon 叢集命名空間建立虛擬EKS叢集時,Amazon EMR會自動設定所有必要的許可,因此您不需要在目前的工作流程中新增任何額外的步驟。
注意
只有EKS虛擬叢集EMR上的新 Amazon EKSCAM才支援 Amazon 與 Amazon EMR整合。您無法遷移現有的虛擬叢集以使用此整合。
必要條件
-
請確定您正在執行 2.15.3 版或更新版本的 AWS CLI
-
您的 Amazon EKS叢集必須位於 1.23 版或更新版本。
設定
若要設定 Amazon EMR與 AccessEntry API Amazon 操作之間的整合EKS,請確定您已完成下列項目:
-
請確定 Amazon EKS叢集
authenticationMode
的 設定為API_AND_CONFIG_MAP
。aws eks describe-cluster --name
<eks-cluster-name>
如果尚未設定,請
authenticationMode
設定為API_AND_CONFIG_MAP
。aws eks update-cluster-config --name
<eks-cluster-name>
--access-config authenticationMode=API_AND_CONFIG_MAP如需身分驗證模式的詳細資訊,請參閱叢集身分驗證模式 。
-
請確定您用來執行
CreateVirtualCluster
和DeleteVirtualCluster
API操作IAM的角色也具有下列許可:{ "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/*" }
概念和術語
以下是與 Amazon 相關的術語和概念清單EKSCAM。
-
虛擬叢集 (VC) – 在 Amazon 中建立之命名空間的邏輯表示EKS法。這是 Amazon EKS叢集命名空間的 1:1 連結。您可以使用它在指定命名空間內的 Amazon EKS叢集上執行 Amazon EMR工作負載。
-
命名空間 – 隔離單一EKS叢集內資源群組的機制。
-
存取政策 – 將存取權和動作授予EKS叢集中IAM角色的許可。
-
存取項目 – 使用角色產生的項目。您可以將存取項目連結至存取政策,以在 Amazon EKS叢集中指派特定許可。
-
EKS 存取項目整合虛擬叢集 – 使用 Amazon 的存取項目API操作建立的虛擬叢集EKS。
使用 啟用叢集存取 aws-auth
您必須採取下列動作EMR,允許 Amazon EKS存取叢集中的特定命名空間:建立 Kubernetes 角色、將角色繫結至 Kubernetes 使用者,以及對應 Kubernetes 使用者與服務連結角色AWSServiceRoleForAmazonEMRContainers
。當IAM身分映射命令與 搭配使用emr-containers
做為服務名稱eksctl
時,這些動作會在 中自動執行。可以透過使用下列命令輕鬆執行這些操作。
eksctl create iamidentitymapping \ --cluster
my_eks_cluster
\ --namespacekubernetes_namespace
\ --service-name "emr-containers"
Replace (取代) my_eks_cluster
使用 Amazon EKS叢集的名稱,並取代 kubernetes_namespace
使用為執行 Amazon EMR工作負載而建立的 Kubernetes 命名空間。
重要
您必須使用上一步設定 kubectl 和 eksctl 下載最新的 eksctl,才能使用此功能。
為 Amazon EMR on 啟用叢集存取的手動步驟 EKS
您也可以使用下列手動步驟,在 EMR上啟用 Amazon 的叢集存取EKS。
-
在特定命名空間中建立 Kubernetes 角色
-
建立範圍為命名空間的 Kubernetes 角色繫結
執行下列命令,在指定命名空間中建立 Kubernetes 角色繫結。此角色繫結會將在上一個步驟建立的角色中定義的許可授予名為
emr-containers
的使用者。此使用者識別 Amazon EMR on 的服務連結角色EKSEKS,因此允許 Amazon EMR on 執行由您建立的角色定義的動作。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 -
更新 Kubernetes
aws-auth
組態地圖您可以使用下列其中一個選項,將EKS服務連結角色EMR上的 Amazon 與上一個步驟中與 Kubernetes 角色繫結
emr-containers
的使用者進行對應。選項 1:使用
eksctl
執行下列
eksctl
命令,將 Amazon EMR on EKS service-linked 角色與emr-containers
使用者對應。eksctl create iamidentitymapping \ --cluster
my-cluster-name
\ --arn "arn:aws:iam::my-account-id
:role/AWSServiceRoleForAmazonEMRContainers" \ --username emr-containers選項 2:不使用 eksctl
-
執行下列命令,在文字編輯器中開啟
aws-auth
組態映射。kubectl edit -n kube-system configmap/aws-auth
注意
如果您收到錯誤,說明
Error from server (NotFound): configmaps "aws-auth" not found
,請參閱 Amazon EKS使用者指南中的新增使用者角色以套用庫存 中的步驟 ConfigMap。 -
將EKS服務連結角色詳細資訊EMR上的 Amazon 新增至 的
mapRoles
區段ConfigMap
,位於 下data
。若此區段在檔案不存在,則將其新增。資料下的已更新mapRoles
章節類似下列範例。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>.
-
儲存檔案並結束您的文字編輯器。
-