設定 Pods 使用 Kubernetes 服務帳戶 - Amazon EKS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定 Pods 使用 Kubernetes 服務帳戶

如果 Pod 需要存取 AWS 服務,您必須將其設定為使用 Kubernetes 服務帳戶。服務帳戶必須與具有存取 AWS 服務許可的 AWS Identity and Access Management (IAM) 角色相關聯。

  • 現有的叢集。如果您沒有 ,您可以使用 中的其中一個指南來建立 Amazon EKS 入門

  • 現有 IAM OpenID Connect (OIDC) 叢集的供應商。若要了解是否已經擁有,或是了解如何建立,請參閱建立 IAM OIDC 叢集的 提供者

  • 現有 Kubernetes 與 IAM 角色相關聯的 服務帳戶。服務帳戶必須以 IAM 角色的 Amazon Resource Name (ARN) 加上註釋。角色必須具有關聯的 IAM 政策,其中包含您想要的 許可 Pods 必須使用 AWS 服務。如需有關服務帳戶和角色之建立和設定方式的詳細資訊,請參閱指派 IAM 角色至 Kubernetes 服務帳戶

  • 在您的裝置 or AWS CloudShell 上安裝和設定的 AWS 命令列介面 (AWS CLI) 版本 1.27.160 2.12.3或更新版本。若要檢查您目前的版本,請使用 aws --version | cut -d / -f2 | cut -d ' ' -f1。套件管理員apt-get,例如 yum、 或 Homebrew for macOS 通常是最新版本 AWS CLI 後面的幾個版本。若要安裝最新版本,請參閱 AWS 命令列介面使用者指南中的使用 aws 設定安裝 和 快速組態。 https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config安裝在 in AWS CLI 中的 AWS CloudShell 版本也可能是最新版本後面的幾個版本。若要更新它,請參閱 AWS CLI 使用者指南中的將 Word 安裝到您的主目錄 AWS CloudShell

  • kubectl 命令列工具安裝在您的裝置或 AWS CloudShell 上。版本可以與 相同,也可以比 更早或更晚的一個次要版本相同 Kubernetes 叢集的版本。例如,如果您的叢集版本為 1.29,則可以搭配使用 kubectl 1.281.291.30 版。若要安裝或升級 kubectl,請參閱 設定 kubectl 和 eksctl

  • 包含叢集組態的現有 kubectl config 檔案。若要建立 kubectl config 檔案,請參閱建立 kubeconfig 檔案,將 kubectl 連接至 EKS 叢集

    1. 使用下列命令來建立部署清單,您可以部署 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
    2. 將清單檔案部署到叢集。

      kubectl apply -f my-deployment.yaml
    3. 確認您的 存在必要的環境變數 Pod.

      1. 檢視 Pods 在上一個步驟中與部署一起部署的 。

        kubectl get pods | grep my-app

        範例輸出如下。

        my-app-6f4dfff6cb-76cv9 1/1 Running 0 3m28s
      2. 檢視 的 ARN 角色的 IAM Pod 正在使用 。

        kubectl describe pod my-app-6f4dfff6cb-76cv9 | grep AWS_ROLE_ARN:

        範例輸出如下。

        AWS_ROLE_ARN: arn:aws: iam::111122223333:role/my-role

        角色 ARN 必須與您為現有服務帳戶加上註釋的角色 ARN 相符。如需有關標註服務帳戶的詳細資訊,請參閱指派 IAM 角色至 Kubernetes 服務帳戶

      3. 確認 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 擁有這些環境變數。將 IRSA 與 AWS SDK 搭配使用支援的 AWS SDK 版本會先在憑證鏈提供者中尋找這些環境變數。角色憑證用於 Pods 符合此條件。

    4. 確認您的 Pods 可以使用您在連接至角色的 IAM 政策中指派的許可與 AWS 服務互動。

      注意

      當 Pod 使用與服務帳戶相關聯的 IAM 角色的 AWS 憑證、該角色容器中的 AWS CLI 或其他 SDKs Pod 使用該角色提供的憑證。如果您沒有限制對提供給 Amazon EKS 節點 IAM 角色Amazon EKS 節點 IAM 角色的憑證的存取,則 Pod 仍然可以存取這些憑證。如需詳細資訊,請參閱‬限制存取指派給工作節點的執行個體設定檔‭

      如果您的 Pods 無法如預期與 服務互動,請完成下列步驟以確認所有項目都已正確設定。

      1. 確認您的 Pods 使用支援透過 擔任 AWS SDK 角色的 IAM 版本 OpenID Connect Web 身分權杖檔案。如需詳細資訊,請參閱將 IRSA 與 AWS SDK 搭配使用

      2. 確認部署使用服務帳戶。

        kubectl describe deployment my-app | grep "Service Account"

        範例輸出如下。

        Service Account: my-service-account
      3. 如果您的 Pods 仍然無法存取 服務,請檢閱將 IAM 角色指派 IAM 角色至 Kubernetes 服務帳戶指派給 Kubernetes 服務帳戶中所述步驟 3:確認組態的步驟,以確認您的角色和服務帳戶已正確設定。