存放 Kubernetes 使用 Amazon 的磁碟區 EBS - Amazon EKS

協助改善此頁面

想要為此使用者指南做出貢獻? 捲動至此頁面底部,然後在 上選取編輯此頁面 GitHub。您的貢獻將幫助我們的使用者指南更適合所有人。

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

存放 Kubernetes 使用 Amazon 的磁碟區 EBS

Amazon Elastic Block Store (AmazonEBS) Container Storage Interface (CSI) 驅動程式會管理 Amazon EBS磁碟區的生命週期,做為 的儲存體 Kubernetes 您建立的磁碟區。Amazon EBSCSI驅動程式會為這些類型的 Amazon EBS磁碟區 Kubernetes 磁碟區:一般暫時性磁碟區持久性磁碟區

考量事項

  • 您無法將 Amazon EBS磁碟區掛載至 Fargate Pods.

  • 您可以在 Fargate 節點上執行 Amazon EBSCSI控制器,但 Amazon EBSCSI節點 DaemonSet 只能在 Amazon EC2執行個體上執行。

  • 將支援最新的附加元件版本和一個先前版本。最新版本中發現的錯誤或漏洞將回溯至新次要版本中的先前版本。

重要

若要使用 Amazon EBSCSI驅動程式的快照功能,您必須先安裝CSI快照控制器。如需詳細資訊,請參閱啟用CSI磁碟區的快照功能

必要條件

  • 現有的叢集。若要查看所需的平台版本,請執行下列命令。

    aws eks describe-addon-versions --addon-name aws-ebs-csi-driver
  • 現有 AWS Identity and Access Management (IAM) OpenID Connect (OIDC) 叢集的供應商。若要判定您是否已經擁有一個,或是要建立一個,請參閱 建立 IAM OIDC 叢集的提供者

  • 若您使用叢集範圍受限制的 PodSecurityPolicy,請確認已授予附加元件足夠的許可以供部署。針對每個附加元件所需的許可 Pod,請參閱 上的相關附加元件清單定義 GitHub。

步驟 1:建立IAM角色

Amazon EBSCSI外掛程式需要IAM許可,才能代表您呼叫 AWS APIs。如果您不執行這些步驟,嘗試安裝附加元件並執行 kubectl describe pvc 會顯示 failed to provision volume with StorageClass並顯示could not create volume in EC2: UnauthorizedOperation錯誤。如需詳細資訊,請參閱在 上設定驅動程式許可 GitHub.

注意

Pods 將有權存取指派給IAM角色的許可,除非您封鎖對 的存取IMDS。如需詳細資訊,請參閱使用最佳實務保護 Amazon EKS 叢集

下列程序說明如何建立IAM角色, AWS 並將受管政策連接至該角色。您可以使用 eksctl、 AWS Management Console或 AWS CLI。

注意

此程序中的特定步驟是使用驅動程式作為 Amazon EKS 附加元件編寫。需要執行不同的步驟,才能將驅動程式用作自我管理附加元件。如需詳細資訊,請參閱在 上設定驅動程式許可 GitHub.

eksctl
若要使用 建立 Amazon EBS CSI 外掛程式IAM角色 eksctl
  1. 建立IAM角色並連接政策。 會 AWS 維護受管政策, AWS 或者您可以建立自己的自訂政策。您可以使用下列命令建立IAM角色並連接 AWS 受管政策。Replace (取代) my-cluster 您的叢集名稱。命令會部署建立IAM角色的 AWS CloudFormation 堆疊,並將IAM政策連接至該堆疊。如果您的叢集位於 AWS GovCloud (美國東部) 或 AWS GovCloud (美國西部) AWS 區域,則arn:aws:以 取代 arn:aws-us-gov:

    eksctl create iamserviceaccount \ --name ebs-csi-controller-sa \ --namespace kube-system \ --cluster my-cluster \ --role-name AmazonEKS_EBS_CSI_DriverRole \ --role-only \ --attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --approve
  2. 如果您使用自訂KMS金鑰對 Amazon EBS磁碟區進行加密,請視需要自訂IAM角色。例如,請執行以下操作:

    1. 複製以下程式碼並貼到新 kms-key-for-encryption-on-ebs.json 檔案中。custom-key-arn 以自訂KMS金鑰 取代 ARN

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    2. 建立政策。您可以將 KMS_Key_For_Encryption_On_EBS_Policy 變更為不同名稱。但是,如果您這樣做,請務必在稍後的步驟中也進行變更。

      aws iam create-policy \ --policy-name KMS_Key_For_Encryption_On_EBS_Policy \ --policy-document file://kms-key-for-encryption-on-ebs.json
    3. 使用下列命令將IAM政策連接至角色。使用您的帳戶 ID 取代 111122223333如果您的叢集位於 AWS GovCloud (美國東部) 或 AWS GovCloud (美國西部) AWS 區域,則arn:aws:以 取代 arn:aws-us-gov:

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \ --role-name AmazonEKS_EBS_CSI_DriverRole
AWS Management Console
若要使用 建立 Amazon EBSCSI外掛程式IAM角色 AWS Management Console
  1. 在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 在左側導覽窗格中,選擇 Roles (角色)。

  3. Roles (角色) 頁面上,選擇 Create role (建立角色)。

  4. Select trusted entity (選取信任的實體) 頁面上,執行以下作業:

    1. Trusted entity type (信任的實體類型) 區段中,選擇 Web identity (Web 身分)。

    2. 針對 Identity 提供者 ,選擇 OpenID Connect 叢集URL的提供者 (如 Amazon 中的概觀 所示EKS)。

    3. 針對 Audience (對象),選擇 sts.amazonaws.com

    4. 選擇 Next (下一步)。

  5. Add permissions (新增許可) 頁面上,執行以下作業:

    1. Filter policies (篩選政策) 方塊中,輸入 AmazonEBSCSIDriverPolicy

    2. 勾選在搜尋中傳回的 AmazonEBSCSIDriverPolicy 左側的核取方塊。

    3. 選擇 Next (下一步)。

  6. Name, review, and create (命名、檢閱和建立) 頁面上,執行以下作業:

    1. 針對 Role name (角色名稱),為您的角色輸入唯一名稱 (例如 AmazonEKS_EBS_CSI_DriverRole)。

    2. 藉由連接標籤做為鍵值對,在新增標籤 (選用) 下將中繼資料新增至角色。如需在 中使用標籤的詳細資訊IAM,請參閱 IAM 使用者指南 中的標記IAM資源

    3. 選擇建立角色

  7. 建立角色之後,在主控台中選擇角色,以開啟角色進行編輯。

  8. 選擇 Trust Relationships (信任關係) 標籤,然後選擇 Edit Trust Relationship (編輯信任政策)。

  9. 查找與下列行相似的行:

    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"

    在上一行的末尾新增一個逗號,然後在上一行之後新增下一行。region-code將 取代 AWS 區域 為您的叢集所在的 。EXAMPLED539D4633E53DE1B71EXAMPLE 以叢集的OIDC提供者 ID 取代 。

    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa"
  10. 選擇 Update policy (更新政策) 以完成操作。

  11. 如果您使用自訂KMS金鑰對 Amazon EBS磁碟區進行加密,請視需要自訂IAM角色。例如,請執行以下操作:

    1. 在左側導覽窗格中選擇 Policies (政策)。

    2. Policies (政策) 頁面上,選擇 Create a policy (建立政策)。

    3. 建立政策頁面上,選擇 JSON 索引標籤。

    4. 將下列程式碼複製並貼到編輯器中,custom-key-arn以自訂KMS金鑰取代 ARN

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    5. 選擇下一步:標籤

    6. Add tags (Optional) (新增標籤 (選用)) 頁面上,選擇 Next: Review (下一步:檢閱)。

    7. Name (名稱) 中輸入您的政策名稱 (例如 KMS_Key_For_Encryption_On_EBS_Policy)。

    8. 選擇 建立政策

    9. 在左側導覽窗格中,選擇 Roles (角色)。

    10. 選擇 AmazonEKS_EBS_CSI_DriverRole 在主控台中開啟以供編輯。

    11. 新增許可下拉式清單中,選擇連接政策

    12. Filter policies (篩選政策) 方塊中,輸入 KMS_Key_For_Encryption_On_EBS_Policy

    13. 勾選在搜尋中傳回的 KMS_Key_For_Encryption_On_EBS_Policy 左側的核取方塊。

    14. 選擇連接政策

AWS CLI
若要使用 建立 Amazon EBS CSI 外掛程式IAM角色 AWS CLI
  1. 檢視叢集的OIDC提供者 URL。使用您的叢集名稱取代 my-cluster。如果來自命令的輸出是 None,則請檢閱先決條件

    aws eks describe-cluster --name my-cluster --query "cluster.identity.oidc.issuer" --output text

    範例輸出如下。

    https://oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE
  2. 建立IAM角色,授予 AssumeRoleWithWebIdentity動作。

    1. 將以下內容複製到名為 aws-ebs-csi-driver-trust-policy.json 的檔案。使用您的帳戶 ID 取代 111122223333。使用前一個步驟傳回的值取代 EXAMPLED539D4633E53DE1B71EXAMPLEregion-code如果您的叢集位於 AWS GovCloud (美國東部) 或 AWS GovCloud (美國西部) AWS 區域,則arn:aws:以 取代 arn:aws-us-gov:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com", "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa" } } } ] }
    2. 建立角色。您可以將 AmazonEKS_EBS_CSI_DriverRole 變更為不同名稱。若要變更名稱,請務必在稍後的步驟中進行變更。

      aws iam create-role \ --role-name AmazonEKS_EBS_CSI_DriverRole \ --assume-role-policy-document file://"aws-ebs-csi-driver-trust-policy.json"
  3. 連接 policy. AWS mains 維護 AWS 受管政策,或者您可以建立自己的自訂政策。使用下列命令將 AWS 受管政策連接至角色。如果您的叢集位於 AWS GovCloud (美國東部) 或 AWS GovCloud (美國西部) AWS 區域,則arn:aws:以 取代 arn:aws-us-gov:

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \ --role-name AmazonEKS_EBS_CSI_DriverRole
  4. 如果您使用自訂KMS金鑰對 Amazon EBS磁碟區進行加密,請視需要自訂IAM角色。例如,請執行以下操作:

    1. 複製以下程式碼並貼到新 kms-key-for-encryption-on-ebs.json 檔案中。custom-key-arn 以自訂KMS金鑰取代 ARN

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["custom-key-arn"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": ["custom-key-arn"] } ] }
    2. 建立政策。您可以將 KMS_Key_For_Encryption_On_EBS_Policy 變更為不同名稱。但是,如果您這樣做,請務必在稍後的步驟中也進行變更。

      aws iam create-policy \ --policy-name KMS_Key_For_Encryption_On_EBS_Policy \ --policy-document file://kms-key-for-encryption-on-ebs.json
    3. 使用下列命令將IAM政策連接至角色。使用您的帳戶 ID 取代 111122223333如果您的叢集位於 AWS GovCloud (美國東部) 或 AWS GovCloud (美國西部) AWS 區域,則arn:aws:以 取代 arn:aws-us-gov:

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \ --role-name AmazonEKS_EBS_CSI_DriverRole

現在您已建立 Amazon EBSCSI驅動程式IAM角色,您可以繼續前往下一節。當您使用此IAM角色部署附加元件時,它會建立並設定為使用名為 的服務帳戶ebs-csi-controller-sa。服務帳戶繫結至 Kubernetes clusterrole 已指派必要的 Kubernetes 許可。

步驟 2:取得 Amazon EBSCSI驅動程式

建議您透過 Amazon EKS 附加元件安裝 Amazon EBSCSI驅動程式,以提高安全性並減少工作量。若要將 Amazon EKS 附加元件新增至叢集,請參閱 建立 Amazon EKS 附加元件。如需附加元件的詳細資訊,請參閱 Amazon EKS 插件

重要

將 Amazon EBS驅動程式新增為 Amazon EKS 附加元件之前,請確認叢集上未安裝自我管理版本的驅動程式。如果是這樣,請參閱在 上解除安裝自我管理的 Amazon EBSCSI驅動程式 GitHub.

或者,如果您想要自行管理安裝 Amazon EBSCSI驅動程式,請參閱在 上安裝 GitHub.

步驟 3:部署範例應用程式

您可以部署各種範例應用程式,再視需要進行修改。如需詳細資訊,請參閱 Kubernetes 上的範例 GitHub.