使用 Amazon 存儲Kubernetes卷 EBS - Amazon EKS

協助改善此頁面

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

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

使用 Amazon 存儲Kubernetes卷 EBS

Amazon 彈性區塊存放區 (AmazonEBS) 容器儲存界面 (CSI) 驅動程式會將 Amazon EBS 磁碟區的生命週期作為您建立的Kubernetes磁碟區的儲存來管理。Amazon EBS CSI 驅動程式會為這些類型的EBS磁碟區建立 Amazon Kubernetes 磁碟區:一般暫時磁碟區和持久磁碟區

考量事項

  • 您無法將 Amazon EBS 卷安裝到 Fargate Pods。

  • 您可以在 Fargate 節點上運行 Amazon EBS CSI 控制器,但 Amazon EBS CSI 節點只DaemonSet能在 Amazon EC2 實例上運行。

重要

若要使用 Amazon EBS CSI 驅動程式的快照功能,您必須在安裝附加元件之前或之後安裝外部快照。必須依照下列順序安裝外部快照元件:

如需詳細資訊,請參閱上的CSI快照。 GitHub

必要條件

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

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

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

步驟 1:建立IAM角色

Amazon EBS CSI 外掛程式需要IAM許可才能代表您撥打 AWS APIs電話。如果您不執行這些步驟,嘗試安裝附加元件並執行kubectl describe pvc會顯示failed to provision volume with StorageClasscould 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 (取代) 我的集群 使用您的群集的名稱。命令會部署建立IAM角色並將IAM原則附加至其中的 AWS CloudFormation 堆疊。如果您的叢集位於 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. 如果您在 Amazon EBS 磁碟區上使用自訂KMS金鑰進行加密,請視需要自訂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 EBS CSI 外掛程式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. 對於身分識別提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. 如果您在 Amazon EBS 磁碟區上使用自訂KMS金鑰進行加密,請視需要自訂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. 附加策略。 AWS 維護受 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. 如果您在 Amazon EBS 磁碟區上使用自訂KMS金鑰進行加密,請視需要自訂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 EBS CSI 驅動程式IAM角色,您可以繼續下一節。當您使用此IAM角色部署附加元件時,它會建立並設定為使用名為的服務帳戶ebs-csi-controller-sa。服務帳戶會繫結至指派所需 Kubernetes 許可的 Kubernetes clusterrole

步驟 2:獲取 Amazon EBS CSI 驅動程序

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

重要

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

或者,如果您想要 Amazon EBS CSI 驅動程式的自我管理安裝,請參閱在上GitHub安裝

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

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