在身份验证配置中找不到 Pod 执行角色或不具有所有必需的权限。我该如何调试?

2024-01-11

客观的

我希望能够使用 Fargate 部署 AWS EKS。我已经成功地进行了部署node_group。然而,当我转而使用 Fargate 时,Pod 似乎都陷入了挂起状态。

我当前的代码是什么样的

我正在使用 Terraform 进行配置(不一定是在寻找 Terraform 答案)。这就是我创建 EKS 集群的方式:

module "eks_cluster" {
  source                            = "terraform-aws-modules/eks/aws"
  version                           = "13.2.1"
  cluster_name                      = "${var.project_name}-${var.env_name}"
  cluster_version                   = var.cluster_version
  vpc_id                            = var.vpc_id
  cluster_enabled_log_types         = ["api", "audit", "authenticator", "controllerManager", "scheduler"]
  enable_irsa                       = true
  subnets                           = concat(var.private_subnet_ids, var.public_subnet_ids)
  create_fargate_pod_execution_role = true
  write_kubeconfig                  = false
  fargate_pod_execution_role_name   = "${var.project_name}-role"
  # Assigning worker groups
  node_groups = {
    my_nodes = {
      desired_capacity = 1
      max_capacity     = 1
      min_capacity     = 1
      instance_type    = var.nodes_instance_type
      subnets          = var.private_subnet_ids
    }
  }
}

这就是我配置 Fargate 配置文件的方式:

//#  Create EKS Fargate profile
resource "aws_eks_fargate_profile" "fargate_profile" {
  cluster_name           = module.eks_cluster.cluster_id
  fargate_profile_name   = "${var.project_name}-fargate-profile-${var.env_name}"
  pod_execution_role_arn = aws_iam_role.fargate_iam_role.arn
  subnet_ids             = var.private_subnet_ids

  selector {
    namespace = var.project_name
  }
}

这就是我创建并附加所需策略的方式:

//# Create IAM Role for Fargate Profile
resource "aws_iam_role" "fargate_iam_role" {
  name                  = "${var.project_name}-fargate-role-${var.env_name}"
  force_detach_policies = true
  assume_role_policy    = jsonencode({
    Statement = [{
      Action    = "sts:AssumeRole"
      Effect    = "Allow"
      Principal = {
        Service = "eks-fargate-pods.amazonaws.com"
      }
    }]
    Version   = "2012-10-17"
  })
}

# Attach IAM Policy for Fargate
resource "aws_iam_role_policy_attachment" "fargate_pod_execution" {
  role       = aws_iam_role.fargate_iam_role.name
  policy_arn = "arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy"
}

我尝试过但似乎不起作用

Running kubectl describe pod I get:

Events:
  Type     Reason            Age   From               Message
  ----     ------            ----  ----               -------
  Warning  FailedScheduling  14s   fargate-scheduler  Misconfigured Fargate Profile: fargate profile fargate-airflow-fargate-profile-dev blocked for new launches due to: Pod execution role is not found in auth config or does not have all required permissions for launching fargate pods.

我尝试过但没有成功的其他事情

我尝试通过模块的功能映射角色,例如:

module "eks_cluster" {
  source                            = "terraform-aws-modules/eks/aws"
  version                           = "13.2.1"
  cluster_name                      = "${var.project_name}-${var.env_name}"
  cluster_version                   = var.cluster_version
  vpc_id                            = var.vpc_id
  cluster_enabled_log_types         = ["api", "audit", "authenticator", "controllerManager", "scheduler"]
  enable_irsa                       = true
  subnets                           = concat(var.private_subnet_ids, var.public_subnet_ids)
  create_fargate_pod_execution_role = true
  write_kubeconfig                  = false
  fargate_pod_execution_role_name   = "${var.project_name}-role"
  # Assigning worker groups
  node_groups = {
    my_nodes = {
      desired_capacity = 1
      max_capacity     = 1
      min_capacity     = 1
      instance_type    = var.nodes_instance_type
      subnets          = var.private_subnet_ids
    }
  }
# Trying to map role
  map_roles = [
    {
      rolearn  = aws_eks_fargate_profile.airflow.arn
      username = aws_eks_fargate_profile.airflow.fargate_profile_name
      groups   = ["system:*"]
    }
  ]
}

但我的尝试没有成功。我该如何调试这个问题?其背后的原因是什么?


好吧,我看到你的问题了。我也刚刚修复了我的,尽管我使用了不同的方法。

In your eks_cluster在模块中,您已经告诉模块创建角色并为其提供名称,因此以后无需创建角色资源。该模块应该为您处理它,包括填充aws-authKubernetes 中的 configmap。

In your aws_eks_fargate_profile资源,您应该使用模块提供的角色,即pod_execution_role_arn = module.eks_cluster.fargate_profile_arns[0].

我相信修复这些问题应该可以解决您第一次配置尝试的问题。


对于您的第二次尝试,map_roles输入适用于 IAM 角色,但您提供有关 Fargate 配置文件的信息。您想做以下两件事之一:

  1. 禁用创建角色的模块(create_fargate_pod_execution_role and fargate_pod_execution_role_name),而是创建您自己的 IAM 角色,类似于您在第一个配置中所做的操作,并将该信息提供给map_roles.
  2. Remove map_roles并在您的 Fargate 配置文件中引用该模块生成的 IAM 角色,类似于您的第一个配置的解决方案。

如果其中任何内容令人困惑,请告诉我。看来你们真的很亲近啊!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在身份验证配置中找不到 Pod 执行角色或不具有所有必需的权限。我该如何调试? 的相关文章

随机推荐