本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定Pods為使用服Kubernetes務帳戶
如果Pod需要存取 AWS 服務,則必須將其設定為使用Kubernetes服務帳戶。服務帳戶必須與具有存取權限的 AWS Identity and Access Management (IAM) 角色相關聯 AWS 服務。
必要條件
-
現有的叢集。如果您沒有,則可以使用其中一個 Amazon EKS 入門 指南來建立一個。
-
叢集的現有 IAM OpenID Connect (OIDC) 供應商。若要了解是否已經擁有,或是了解如何建立,請參閱為您的叢集建立 IAM OIDC 提供者。
-
與 IAM 角色相關聯的現有 Kubernetes 服務帳戶。服務帳戶必須標註 IAM 角色的 Amazon Resource Name (ARN)。該角色必須具 有相關聯的 IAM 政策,其中包含您希望 Pods 必須具備以便使用 AWS 服務的許可。如需有關服務帳戶和角色之建立和設定方式的詳細資訊,請參閱設定Kubernetes服務帳戶以擔任 IAM 角色。
-
您裝置上安裝和設定的 AWS Command Line Interface (AWS CLI) 的版本
1.27.160
或更新版本、版本或更新版本或更新版本或更新版本 AWS CloudShell。2.12.3
若要檢查您目前的版本,請使用
。如aws --version | cut -d / -f2 | cut -d ' ' -f1
yum
、apt-get
或適用於 macOS 的 Homebrew 等套件管理工具通常比最新版本的 AWS CLI落後數個版本之多。若要安裝最新版本,請參閱《AWS Command Line Interface 使用者指南》中的安裝、更新和解除安裝 AWS CLI以及使用 aws configure 的快速組態。安裝在中的 AWS CLI 版本也 AWS CloudShell 可能是最新版本之後的幾個版本。若要進行更新,請參閱《AWS CloudShell 使用者指南》中的〈安裝 AWS CLI 到主目錄〉。 -
已在裝置或 AWS CloudShell上安裝
kubectl
命令列工具。版本可以與您的叢集 Kubernetes 版本相同,或是為最多比該版本更舊一版或更新一版的次要版本。例如,如果您的叢集版本為1.28
,則可以搭配使用kubectl
1.27
、1.28
或1.29
版。若要安裝或升級kubectl
,請參閱 安裝或更新 kubectl。 -
包含叢集組態的現有
kubectl
config
檔案。若要建立kubectl
config
檔案,請參閱建立或更新 Amazon EKS 叢集的 kubeconfig 檔案。
設定 Pod 以使用服務帳戶
-
使用以下命令,以建立部署清單檔案,讓您可部署 Pod 以確認組態。以您自己的值取代
。example values
cat >
my-deployment.yaml
<<EOF apiVersion: apps/v1 kind: Deployment metadata: name:my-app
spec: selector: matchLabels: app:my-app
template: metadata: labels: app:my-app
spec: serviceAccountName:my-service-account
containers: - name:my-app
image:public.ecr.aws/nginx/nginx:X.XX
EOF -
將清單檔案部署到叢集。
kubectl apply -f
my-deployment.yaml
-
確認您的 Pod 有必要的環境變數。
-
檢視使用上一步中的部署作業進行部署的 Pods。
kubectl get pods | grep
my-app
範例輸出如下。
my-app
-6f4dfff6cb-76cv9
1/1 Running 0 3m28s -
檢視 Pod 所使用 IAM 角色的 ARN。
kubectl describe pod
my-app
-6f4dfff6cb-76cv9
| grep AWS_ROLE_ARN:範例輸出如下。
AWS_ROLE_ARN: arn:aws:iam::
111122223333
:role/my-role
角色 ARN 必須與您用來標註現有服務帳戶的角色 ARN 相符。如需有關標註服務帳戶的詳細資訊,請參閱設定Kubernetes服務帳戶以擔任 IAM 角色。
-
確認 Pod 有 Web 身分字符檔案掛載。
kubectl describe pod
my-app
-6f4dfff6cb-76cv9
| grep AWS_WEB_IDENTITY_TOKEN_FILE:範例輸出如下。
AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
kubelet
請求並代表 Pod 存放字符。根據預設,如果字符超過總存留時間的 80% 或 24 小時,kubelet
會重新整理字符。您可以使用 Pod 規格中的設定來修改任何帳戶 (預設服務帳戶除外) 的過期持續時間。如需詳細資訊,請參閱 Kubernetes 文件中的服務帳戶字符磁碟區投影。 叢集上的 Amazon EKS Pod Identity Webhook
會監視使用具有以下註釋之服務帳戶的 Pods: eks.amazonaws.com/role-arn: arn:aws:iam::
111122223333
:role/my-role
Webhook 會將先前的環境變數套用至這些 Pods。您的叢集不需要使用 Webhook 來設定環境變數和字符檔案掛載。您可以手動將 Pods 設定為具有這些環境變數。支援的 AWS SDK 版本會先在憑證鏈提供者中尋找這些環境變數。符合此條件的 Pods 會使用角色憑證。
-
-
確認您Pods可以 AWS 服務 使用您在附加到角色的 IAM 政策中指派的許可與互動。
注意
當Pod使用與服務帳戶相關聯的 IAM 角色的 AWS 登入資料時,容器中的 AWS CLI 或其他 SDK Pod 使用該角色提供的認證。如果您沒有對提供給 Amazon EKS 節點 IAM 角色的認證限制存取權,則 Pod 仍然可以存取這些認證。如需詳細資訊,請參閱限制存取指派給工作節點的執行個體設定檔
。 如果您的 Pods 無法如預期與服務互動,請完成以下步驟以確認所有項目都已正確設定。
-
確認您Pods使用的 AWS SDK 版本支持通過 OpenID Connect Web 身份令牌文件假設 IAM 角色。如需詳細資訊,請參閱 使用支援的 AWS 開發套件。
-
確認部署使用服務帳戶。
kubectl describe deployment
my-app
| grep "Service Account"範例輸出如下。
Service Account:
my-service-account
-
如果您的 Pods 仍然無法存取服務,請查看設定Kubernetes服務帳戶以擔任 IAM 角色中描述的步驟,以確認您的角色和服務帳戶設定正確。
-