繁体   English   中英

Terraform中EKS集群的两个节点组如何使用同一个IAM角色?

[英]How to use the same IAM role for two node groups in an EKS cluster in Terraform?

上下文:我正在尝试设置流利位以记录集群中包含的多个节点组中的 pod 中的活动。 因此,它要求每个节点组都有一个分配给它的 IAM 角色以及所有必需的策略,因此,fluent bit 的守护程序集可以记录日志并将其保存到云监视中的日志组中。 这是我正在关注的解决方案的回购协议。

我试过什么:

  1. 通过将输入传递到模块的相关变量来创建单独的节点组角色并附加策略。 像这样:
module "eks" {
...
        eks_managed_node_groups = {
            one = {

              create_iam_role          = true
              iam_role_name            = "fluent-bit-logger"
              iam_role_use_name_prefix = true
              iam_role_description     = "Fluent-bit-logging for node group 1"
              iam_role_tags = {
                Name = "fb-ng-2"
              }
            two = {
               (same config, with obvious naming changes)
              }
           }
...
}
  1. 上述步骤有效,但我正在尝试通过 terraform 的 helm 资源设置流畅的位,并且根据我遵循的解决方案,我只需要输入一个 IAM 节点角色,或者这就是我所做的。

  2. 使用eks_managed_node_group_defaults属性为两个节点组创建并分配相同的IAM 角色,这就是我的做法。

module "eks" {
  source  = "terraform-aws-modules/eks/aws"
  version = "18.26.6"

  cluster_name    = local.cluster_name
  cluster_version = "1.21"

  vpc_id     = module.vpc.vpc_id
  subnet_ids = module.vpc.private_subnets

  eks_managed_node_group_defaults = {
    ami_type = "AL2_x86_64"

    attach_cluster_primary_security_group = true

    # Disabling and using externally provided security groups
    create_security_group = false

    # fluent-bit (IAM-policy-role)
    create_iam_role          = true
    iam_role_name            = "fluent-bit-logger"
    iam_role_use_name_prefix = false
    iam_role_description     = "Fluent-bit-logging - default for node groups"
    iam_role_tags = {
      Name = "fb-ng-default"
      }

我期望获得什么成功执行 eks 集群模块的消息(包括两个节点组中预期的公共节点组角色。

我得到的错误

Error: failed creating IAM Role (fluent-bit-logger): EntityAlreadyExists: Role with name fluent-bit-logger already exists.
│   status code: 409, request id: fx11xxax-axex-4xxx-b749-09xx8x8xx17x
│ 
│   with module.eks-cluster.module.eks.module.eks_managed_node_group["two"].aws_iam_role.this[0],
│   on .terraform/modules/eks-cluster.eks/modules/eks-managed-node-group/main.tf line 431, in resource "aws_iam_role" "this":
│  431: resource "aws_iam_role" "this" {

错误消息指出您正在尝试创建相同的角色两次,这将导致 AWS API 出错。 给定参数值,这与您的配置一致:

create_iam_role = true

对于两个不同的 EKS 节点组。 您需要将值更改为false ,使用例如aws_iam_role.fluent_bit_logger管理角色,然后(最佳实践)进行相应更新:

iam_role_name = aws_iam_role.fluent_bit_logger.name

否则,您可以使用您在问题第一部分中共享的配置来管理 EKS 模块声明中的角色。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM