eksctl create iamserviceaccount在EKS集群中的底层操作是什么

110次阅读
没有评论

问题描述

想要了解在EKS集群中,”eksctl create iamserviceaccount”命令在底层做了什么操作。用户不想使用该命令,而是希望使用terraform来声明基础设施。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

“eksctl create iamserviceaccount”命令不仅仅是创建一个服务账号,它还执行了以下三个操作:
1. 创建一个IAM角色。
2. 将所需的IAM策略(–attach-policy-arn )附加到创建的IAM角色上。
3. 创建一个新的Kubernetes服务账号,并在其注释中添加创建的IAM角色的ARN。

现在,你可以使用terraform中的kubernetes和aws提供程序来声明上述步骤。以下是一个示例:

resource "aws_iam_role" "eks_service_account_role" {
  name               = "<AUTOSCALER_NAME>"
  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041:sub": "system:serviceaccount:kube-system:<AUTOSCALER_NAME>"
        }
      }
    }
  ]
}
EOF
}

resource "aws_iam_policy_attachment" "eks_service_account_policy_attachment" {
  name       = "<AUTOSCALER_NAME>-policy-attachment"
  roles      = [aws_iam_role.eks_service_account_role.name]
  policy_arn = "<POLICY_ARN>"
}

resource "kubernetes_service_account" "eks_service_account" {
  metadata {
    name      = "<AUTOSCALER_NAME>"
    namespace = "kube-system"

    annotations = {
      "eks.amazonaws.com/role-arn" = aws_iam_role.eks_service_account_role.arn
    }
  }
}

在上面的示例中,我们使用了terraform的aws和kubernetes提供程序来声明IAM角色、IAM策略附加和Kubernetes服务账号。你可以根据自己的需求进行相应的修改。

请注意,以上示例仅供参考,具体的配置取决于你的实际需求和环境。你需要根据自己的情况进行适当的调整和配置。

方案2

如果你不想使用terraform,你也可以手动创建相应的IAM角色、IAM策略附加和Kubernetes服务账号。以下是手动创建的步骤:
1. 创建一个IAM角色,并将其与所需的IAM策略进行关联。
2. 创建一个Kubernetes服务账号,并在其注释中添加创建的IAM角色的ARN。

请注意,手动创建需要更多的操作和配置,并且容易出错。因此,建议使用terraform或其他自动化工具来管理基础设施。

以上是关于”eksctl create iamserviceaccount”命令在EKS集群中的底层操作的解决方案。根据你的需求和偏好,选择适合你的方法来声明基础设施。

正文完