Я создал дополнение AWS EBS CSI Driver с помощью eks_blueprints_addons от Terraform:
module "eks_cluster" {
source = "terraform-aws-modules/eks/aws"
version = "~> 20.17"
...
}
module "eks_blueprints_addons" {
source = "aws-ia/eks-blueprints-addons/aws"
version = "~> 1.1"
cluster_name = module.eks_cluster.cluster_name
cluster_endpoint = module.eks_cluster.cluster_endpoint
cluster_version = module.eks_cluster.cluster_version
oidc_provider_arn = module.eks_cluster.oidc_provider_arn
eks_addons = {
aws-ebs-csi-driver = {
most_recent = true
}
}
}
Я могу подтвердить, что он создал драйвер ebs в пространстве имен kube-system. Когда я развертываю приложение с PVC, я получаю эту ошибку:
Warning ProvisioningFailed 113s (x2 over 4m53s) ebs.csi.aws.com_ebs-csi-controller-c4bc5f559-k6fqp_5a4ed8cc-0085-4875-8070-87fceda36abf (combined from similar events): failed to provision volume with StorageClass "standard": rpc error: code = Internal desc = Could not create volume "pvc-f8f034de-5f7b-4ca6-bb0c-0c3e4be8026d": could not create volume in EC2: operation error EC2: CreateVolume, https response error StatusCode: 403, RequestID: 0d5d6201-4115-4cd9-bc99-201331b97450, api error UnauthorizedOperation: You are not authorized to perform this operation. User: arn:aws:sts::111111111111:assumed-role/default-eks-node-group-2024071204291580710000000e/i-075c478df65c9bd58 is not authorized to perform: ec2:CreateVolume on resource: arn:aws:ec2:ap-northeast-1:111111111111:volume/* because no identity-based policy allows the ec2:CreateVolume action
Кажется, используется предполагаемая роль, созданная модулем EKS. Даже я использую этот способ, получил тот же результат:
module "ebs_csi_driver_irsa" {
source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
version = "~> 5.20"
role_name_prefix = "ebs-csi-driver-"
attach_ebs_csi_policy = true
oidc_providers = {
main = {
provider_arn = module.eks_cluster.oidc_provider_arn
namespace_service_accounts = ["kube-system:ebs-csi-controller-sa"]
}
}
tags = var.tags
}
module "eks_blueprints_addons" {
source = "aws-ia/eks-blueprints-addons/aws"
version = "~> 1.1"
cluster_name = module.eks_cluster.cluster_name
cluster_endpoint = module.eks_cluster.cluster_endpoint
cluster_version = module.eks_cluster.cluster_version
oidc_provider_arn = module.eks_cluster.oidc_provider_arn
eks_addons = {
aws-ebs-csi-driver = {
most_recent = true
service_account_role_arn = module.ebs_csi_driver_irsa.iam_role_arn
}
}
}
Но если я делаю с eksctl, то работает:
eksctl create addon --name aws-ebs-csi-driver --cluster eks-test --service-account-role-arn arn:aws:iam::11111111:role/AmazonEKS_EBS_CSI_DriverRole --force
eksctl create iamserviceaccount \
--name ebs-csi-controller-sa \
--namespace kube-system \
--cluster eks-test \
--role-name AmazonEKS_EBS_CSI_DriverRole \
--role-only \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--approve
Пробовали ли вы прикрепить AmazonEBSCSIDriverPolicy
к своей роли, созданной ebs_csi_driver_irsa
?
У меня похожая проблема, похоже, module "eks_blueprints_addons"
и eksctl
используют разные подходы к созданию сервисных учетных записей.
Кроме того, вы можете попробовать aws_ebs_csi_pod_identity
, но для этого вам понадобится дополнение Amazon EKS Pod Identity Agent
.
module "aws_ebs_csi_pod_identity" {
source = "terraform-aws-modules/eks-pod-identity/aws"
name = "aws-ebs-csi-pod-identity"
attach_aws_ebs_csi_policy = true
association_defaults = {
namespace = "kube-system"
service_account = "ebs-csi-controller-sa"
}
associations = {
eks = {
cluster_name = aws_eks_cluster.this.name
}
}
tags = {
Environment = "${var.env}"
}
}
Да, для меня это работает, но очень странным образом, как я изначально писал, я думаю, проблема в eks_blueprints_addons
, потому что когда я создаю дополнение с помощью команды eksctl
и присоединяю роль, созданную ebs_csi_driver_irsa
или aws_ebs_csi_pod_identity
, это работает отлично, но когда ту же роль использует eks_blueprints_addons
, она не работает. А еще есть о чем подумать: когда вы удаляете аддон с помощью terraform, он не удаляет учетную запись службы, роли кластера и т. д., НО eksctl
удаляет все это.
Я не пробовал. Это работает? модуль «eks_blueprints_addons» и «ebs_csi_driver_irsa» вместе должны работать.
AmazonEBSCSIDriverPolicy
должен быть успешно добавлен в IRSA.