本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
Amazon EKS 存取項目身分驗證
Amazon EKS 支援兩種機制來授予 IAM 主體呼叫叢集 Kubernetes API 的許可:舊版 aws-auth ConfigMap 和較新的存取項目 API。存取項目會授予 Kubernetes API 對 IAM 主體的存取權,而不需要您編輯 ConfigMap。 AWS Batch 可以透過任一機制對您的叢集進行身分驗證。
當您ENABLED在運算環境中eksConfiguration.accessEntry.desiredState將 設定為 時, AWS Batch 可以管理叢集上該運算環境的存取項目。您不再需要手動編輯 aws-auth ConfigMap。
是否 AWS Batch 佈建存取項目取決於您的 AWS Batch 運算環境和 Amazon EKS 叢集組態。如需詳細資訊,請參閱 與叢集 的互動 authenticationMode。
的值 accessEntry.desiredState
上的 desiredState 欄位會EksAccessEntry宣告運算環境所需的存取項目狀態。有效的值如下:
ENABLED-
AWS Batch 在叢集上為運算環境建立受 AWS Batch管存取項目。只有在叢集上的所有運算環境都
desiredState設為 時, AWS Batch 才會建立受 AWS Batch管存取項目ENABLED(如需詳細資訊如何 AWS Batch 協調desiredState跨運算環境,請參閱 )。 DISABLED-
AWS Batch 會刪除叢集的 AWS Batch受管存取項目。只有在叢集上的所有運算環境都
desiredState設為 時, AWS Batch 才會刪除受 AWS Batch管存取項目DISABLED(如需詳細資訊如何 AWS Batch 協調desiredState跨運算環境,請參閱 )。必須透過 ConfigMapaws-auth設定對叢集的存取。 INHERIT_FROM_CLUSTER-
AWS Batch 會延遲至叢集目前的存取項目
status。在身分驗證模式為 的 Amazon EKS 叢集上API, 會 AWS Batch 建立和管理存取項目,因為叢集沒有要返回的aws-authConfigMap。在身分驗證模式為CONFIG_MAP或 的叢集上API_AND_CONFIG_MAP, AWS Batch 不會新增或移除存取項目。
運算環境也會在 DescribeComputeEnvironments 回應中公開唯讀accessEntry.status欄位。 ACTIVE表示運算環境的 AWS Batch受管存取項目存在於叢集上,並優先於 aws-auth ConfigMap。 INACTIVE表示不存在受 AWS Batch管存取項目。這可能是因為 desiredState 是 DISABLED,因為以叢集為目標的運算環境尚未在 上達成一致desiredState,或是因為項目尚未佈建。如果 accessEntry.status是 INACTIVE,則 Batch 會使用 aws-auth ConfigMap 進行叢集存取。
注意
存取項目會在叢集上存在時ACTIVE立即報告,即使 AWS Batch 尚未完成關聯使其可供使用的存取政策。如果運算環境狀態變更為 ,INVALID而 accessEntry.status為 ACTIVE,請參閱 Amazon EKS 存取項目設定不完整。
注意
如果您省略 accessEntry 欄位, AWS Batch 不會記錄運算環境desiredState的 ,DescribeComputeEnvironments也不會傳回一個。為了佈建存取項目, AWS Batch 的行為與 相同INHERIT_FROM_CLUSTER。
與叢集 的互動 authenticationMode
特定 AWS Batch 的行為desiredState方式取決於叢集的身分驗證模式。下表同時適用於 CreateComputeEnvironment和 UpdateComputeEnvironment。
叢集 |
運算環境 |
運算環境 |
運算環境 |
|---|---|---|---|
|
叢集上無法使用存取項目,因此 AWS Batch 不會建立或移除。 AWS Batch 仍會記錄您指定的值。變更叢集的身分驗證模式後,該記錄的值會在您的下一個 |
||
|
AWS Batch 會比較共用叢集的運算環境中記錄的值,請參閱 如何 AWS Batch 協調desiredState跨運算環境。 |
保留現有的存取模式。 AWS Batch 不會新增或移除存取項目。 |
|
|
在叢集上建立和維護存取項目。 |
請求會遭到拒絕。此模式中的叢集不支援 |
在叢集上建立和維護存取項目。當叢集僅限 時 |
如何 AWS Batch 協調desiredState跨運算環境
由於單一 Amazon EKS 叢集可以支援多個 AWS Batch 運算環境,因此叢集的存取組態是共用資源。 AWS Batch 因此, 會協調或比較和解析這些運算環境中記錄desiredState的值。
當叢集的 authenticationMode為 時API_AND_CONFIG_MAP, 會 AWS Batch 比較以叢集為目標之相同 AWS 帳戶和 AWS 區域中每個運算環境所desiredState記錄的 。 AWS Batch 會使用此比較來判斷是否要新增或移除指定 之每個 CreateComputeEnvironment或 UpdateComputeEnvironment操作的存取項目desiredState。
- 每個運算環境都有
desiredState=ENABLED -
AWS Batch 在叢集上建立存取項目。
- 每個運算環境都有
desiredState=DISABLED -
AWS Batch 如果存在存取項目, 會從叢集中刪除存取項目。
- 記錄
desiredState的值不完全相符 -
AWS Batch 會保留現有的存取模式。存取項目不會新增或移除。這包括
ENABLED、DISABLED和 的任何混合INHERIT_FROM_CLUSTER,也包括沒有desiredState記錄的任何運算環境。
注意
若要將身分驗證模式為 API_AND_CONFIG_MAP ConfigMap aws-auth 的叢集轉換為存取項目身分驗證,desiredState=ENABLED請在以叢集為目標的每個 AWS Batch 運算環境中設定 。若要轉返,請在每個轉換desiredState=DISABLED上設定 。
在您的叢集上 AWS Batch 建立的內容
AWS Batch 每個叢集建立一個符合上述條件的存取項目,然後將 AWSBatchClusterPolicy Amazon EKS 存取政策與該存取項目建立關聯。存取項目是每個叢集而非每個運算環境,因此以相同叢集為目標的所有 AWS Batch 運算環境都會共用。
注意
刪除運算環境不會移除存取項目,即使它是叢集上的最後一個 AWS Batch 運算環境。若要移除 AWS Batch受管存取項目,請在每個以叢集為目標的 AWS Batch 運算環境desiredState=DISABLED上呼叫 UpdateComputeEnvironment 與 ,然後再刪除它們。
存取項目本身不足以在叢集上執行任務。如需您必須自行設定的Kubernetes許可和節點存取權,請參閱 您仍然必須提供的叢集組態。
所需的許可
AWS Batch 會使用呼叫 CreateComputeEnvironment或 UpdateComputeEnvironment操作的 IAM 身分憑證來管理存取項目。必須允許該身分執行下列 Amazon EKS 動作:
-
eks:DescribeCluster -
eks:DescribeAccessEntry -
eks:CreateAccessEntry -
eks:AssociateAccessPolicy -
eks:DeleteAccessEntry
設定存取項目
您可以透過 CreateComputeEnvironment 或 UpdateComputeEnvironment API eksConfiguration.accessEntry的 欄位,在運算環境中設定存取項目。
您仍然必須提供的叢集組態
存取項目只會控制對叢集進行 AWS Batch 身分驗證的方式。它不會授予執行任務所需的 AWS Batch Kubernetes許可,也不會讓 AWS Batch 啟動 的執行個體加入叢集。無論您使用哪種身分驗證機制,您仍然必須設定下列兩項。
重要
為叢集 (accessEntry.status=ACTIVE) 上的 AWS Batch 服務連結角色建立 AWS Batch受管存取項目後,其優先順序會高於角色的 aws-auth ConfigMap 組態。 AWS Batch 服務連結角色的 ConfigMap 項目未使用,而是改用存取項目進行 AWS Batch 驗證。若要返回 ConfigMap 身分驗證,desiredState=DISABLED請在以叢集為目標的所有運算環境中設定 。這會移除受 AWS Batch管存取項目。
- Kubernetes AWS Batch 命名空間的 許可
-
AWS Batch 需要Kubernetes許可,才能在您在 中指定的命名空間中建立和管理 Pod
eksConfiguration.kubernetesNamespace。建立 命名空間,然後根據您的身分驗證方法,使用下列其中一種方法設定這些許可:-
存取政策關聯 (存取項目 時為必要
status=ACTIVE) — 當您desiredState=ENABLED在所有以叢集為目標的運算環境中設定 時, 會使用叢集層級 AWS Batch 建立存取項目AWSBatchClusterPolicy。然後,您必須將命名空間範圍建立關聯AWSBatchNamespacePolicy,以授予 AWS Batch 建立和管理 Pod 的許可。存取項目到達 後
status=ACTIVE,請使用 建立命名空間政策的關聯 AWS CLI:$aws eks associate-access-policy \ --cluster-namemy-cluster\ --principal-arnarn:aws:iam::123456789012:role/aws-service-role/batch.amazonaws.com/AWSServiceRoleForBatch\ --policy-arn arn:aws:eks::aws:cluster-access-policy/AWSBatchNamespacePolicy \ --access-scope type=namespace,namespaces=my-aws-batch-namespace將
my-aws-batch-namespace取代為您在 中指定的值eksConfiguration.kubernetesNamespace。重要
如果沒有命名空間範圍政策關聯,任務將保持停滯
RUNNABLE狀態。叢集層級政策本身不會授予 Pod 管理許可。 -
Kubernetes 角色和角色繫結 (當存取項目 時
status=INACTIVE) — 如果 AWS Batch受管存取項目未處於作用中狀態,請建立授予這些許可Kubernetes的角色和角色繫結,如中所述步驟 2:準備您的 Amazon EKS 叢集 AWS Batch。您可以為每個叢集執行此操作一次。注意
當受 AWS Batch管存取項目處於作用中 (
status=ACTIVE) 時,會略過 RBAC Kubernetes 角色。您必須改用存取政策關聯方法。
AWS Batch 不會為您建立這些資源,且 AWS Batch受管存取項目不會取代這些資源。如果遺失,當任務無法啟動
VALID時,運算環境仍會變成 。 -
- 節點執行個體角色的叢集存取
-
AWS Batch 啟動的執行個體會使用您在 中指定的執行個體描述檔加入叢集
computeResources.instanceRole。該角色需要自己的叢集存取權,而叢集與 AWS Batch受管存取項目分開, AWS Batch 且未設定。組態方法取決於叢集的
authenticationMode:-
在
authenticationMode為 的叢集CONFIG_MAP上 — 您必須使用aws-authConfigMap。這些叢集不支援存取項目。 -
在
authenticationMode為 的叢集API_AND_CONFIG_MAP上 — 節點執行個體角色可以使用aws-authConfigMap 或存取項目進行身分驗證。如果執行個體角色已在 ConfigMap 中映射,節點將成功加入,而無需為角色建立存取項目。 -
在
authenticationMode為 的叢集API上 — 您必須為節點執行個體角色建立存取項目。ConfigMapaws-auth不會用於這些叢集上的身分驗證。
若要建立節點執行個體角色的存取項目,請使用 AWS CLI:
$aws eks create-access-entry \ --cluster-namemy-cluster\ --principal-arnarn:aws:iam::123456789012:role/my-node-instance-role\ --type EC2_LINUX$aws eks associate-access-policy \ --cluster-namemy-cluster\ --principal-arnarn:aws:iam::123456789012:role/my-node-instance-role\ --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSWorkerNodePolicy \ --access-scope type=cluster如需詳細資訊,請參閱《Amazon EKS 使用者指南》中的建立存取項目。
重要
如果沒有節點執行個體角色的適當叢集存取,EC2 執行個體將無法加入叢集。任務將保持
RUNNABLE狀態,因為沒有容量向叢集註冊。 -
在 aws-auth ConfigMap 和存取項目之間進行選擇
存取項目身分驗證是 Amazon EKS 運算環境 AWS Batch 上新 的建議路徑,並提供下列優點:
-
無需手動編輯
aws-authConfigMap 即可授予對叢集的 AWS Batch 存取權。 -
提供可存取叢集之主體的可稽核 API 驅動記錄。
-
對於其
authenticationMode為API且不支援 ConfigMapaws-auth的叢集為必要。
如果您的叢集authenticationMode是 CONFIG_MAP,則無法使用存取項目,並透過 ConfigMap aws-auth 進行 AWS Batch 驗證。如需說明,請參閱確認 aws-auth ConfigMap 已正確設定。